美文网首页
鼠标交互高亮插件

鼠标交互高亮插件

作者: 萧非子 | 来源:发表于2017-12-13 16:02 被阅读28次

//鼠标交互高亮插件,共三个脚本,一个编辑脚本放Editor文件夹,一个挂载在对象上,一个挂载在摄像机上
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
//鼠标交互高亮插件,共三个脚本(MouseInteraction,挂物体上,),一个编辑脚本放Editor文件夹,一个挂载在对象上,一个挂载在摄像机上
//鼠标交互高亮插件:此脚本挂物体上,鼠标移动到物体上时,物体显示颜色
public class MouseInteraction : MonoBehaviour {

[Tooltip("Color change of the interacted object.")]
    public Color interactionColor = new Color(0.38f, 0.97f, 0.44f) ;
[Tooltip("Fade speed of the color change (slow -> quick)")]
    public float interactionSpeed = 4f ;
[Tooltip("Emission intensity (doesn't work with material which has no emissive intensity)")]
    [Range(0f, 1f)]public float emissionIntensity = 0f ;
[Tooltip("Use the center of the screen instead mouse position to detect interaction.")]
    public bool useCenterScreen = false ;
[Tooltip("Use the touch/click instead mouse position to detect interaction.")]
    public bool useTouchClick = false ;
[Tooltip("Cursor sprite when interaction with the object (texture must be a Cursor in import settings)")]
    public Texture2D mouseCursor ;
[Tooltip("Interaction with all objects of the same parent.")]
    public bool groupedInteraction = false ;
[Tooltip("Number of ascent to define the parent for the Grouped Interaction setting.")]
    public int numberOfAscent = 1 ;
[Tooltip("Max distance of the interaction (1000 = far away, 6 = melee range)")]
    public int interactionDistance = 1000 ;
[Tooltip("Animation played when interacted.")]
    public AnimationClip interactionAnim ;
[Tooltip("Loop the interacted animation.")]
    public bool animationLoop = true ;
[Tooltip("[Loop animation only] Reset the animation loop when the interaction exit.")]
    public bool animationReset = false ;
[Tooltip("Show a text over the interacted object.")]
    public bool showTooltip = true ;
[Tooltip("Show a predefined UI Panel over the interacted object.")]
    public GameObject tooltipUIPanel ;
/*[Tooltip("[Mouse interaction only] Check if the UI Panel is outside the screen, and auto change its anchor.")]
    public bool checkOutOfScreen = true ;*/
[Tooltip("Show the tooltip over the object instead of over the mouse.")]
    public bool fixedToTheObject = false ;
[Tooltip("Position of the tooltip showed over the interacted object.")] 
    public Vector2 tooltipPosition = new Vector2 (-50f, 30f) ;
[Tooltip("Text to show over the interacted object.")]
    public string tooltipText = "" ;
[Tooltip("Color of the text showed over the interacted object.")]
    public Color tooltipColor = new Color(0.9f, 0.9f, 0.9f) ;
[Tooltip("Size of the text showed over the interacted object.")]
    public int tooltipSize = 20 ;
[Tooltip("Resize the text, relative to the distance between the object and the camera.")]
    public bool textResized = false ;
[Tooltip("Font of the text showed over the interacted object.")]
    public Font tooltipFont ;
public enum TooltipAlignment {Center, Left, Right}
[Tooltip("Alignment of the text showed over the interacted object.")]
    public TooltipAlignment tooltipAlignment ;
[Tooltip("Color of the text shadow showed over the interacted object.")]
public Color tooltipShadowColor = new Color(0.1f, 0.1f, 0.1f) ;
[Tooltip("Position of the text shadow showed over the interacted object.")]
    public Vector2 tooltipShadowPosition = new Vector2 (-2f, -2f) ;

private Renderer render ;
private Renderer[] render_child ;
private MouseInteraction[] scripts_child ;
private Material[] allMaterials ;
private Color[] baseColor ;
private float t = 0f ;
private bool over = false ;
private bool otherGroupedObj = false ;
private bool clickDelayed = false ;
private Vector2 UIanchor ;
private string currentText = "" ;
private GUIStyle tooltipStyle = new GUIStyle() ;
private GUIStyle tooltipStyleShadow = new GUIStyle() ;
private Vector3 positionToScreen ;
private float cameraDistance ;
private bool lookedByCam = false ;
private Animation animationComponent ;

// ===== HINTS =====
// Don't forget to attach a collider component to the object which must be interacted.
// For the center of screen interaction, don't forget to attach the CameraRaycast script to your main active camera.

// Initialization
void Start () {

    // Get all materials and all colors for supporting multi-materials object
    render = GetComponent<Renderer>() ;
    allMaterials = render.materials;
    baseColor = new Color[allMaterials.Length] ;
    int temp_length = baseColor.Length ;
    for(int i=0; i<temp_length; i++) {
        baseColor[i] = allMaterials[i].color ;
    }

    // Get all parent and children script according to the Number Of Ascent
    if(groupedInteraction) {
        Transform current_transform = transform ;
        for(int i = 1 ; i <= numberOfAscent ; i++) {
            current_transform = current_transform.parent ;
        }
        scripts_child = current_transform.GetComponentsInChildren<MouseInteraction>() ;
    }

    // Get the animation component, if exist
    if(interactionAnim != null)
        animationComponent = GetComponent<Animation>() ;

    // Start settings of the tooltip
    if (showTooltip) { // Tooltip text style customization
        if(tooltipUIPanel != null) { // Initialization of the UI Panel
            tooltipUIPanel.SetActive(false) ;
        }
        tooltipStyle.normal.textColor = tooltipColor ; // Color of the tooltip text
        tooltipStyleShadow.normal.textColor = tooltipShadowColor ; // Color of the tooltip shadow
        tooltipStyle.fontSize = tooltipStyleShadow.fontSize = tooltipSize ; // Size of the tooltip font
        tooltipStyle.fontStyle = tooltipStyleShadow.fontStyle = FontStyle.Bold ; // Style of the tooltip font
        tooltipStyle.font = tooltipStyleShadow.font = tooltipFont ;
        switch(tooltipAlignment) { // Alignment of the tooltip text
            case TooltipAlignment.Center :
                tooltipStyle.alignment = tooltipStyleShadow.alignment = TextAnchor.UpperCenter ;
                break ;
            case TooltipAlignment.Left :
                tooltipStyle.alignment = tooltipStyleShadow.alignment = TextAnchor.UpperLeft ;
                break ;
            case TooltipAlignment.Right :
                tooltipStyle.alignment = tooltipStyleShadow.alignment = TextAnchor.UpperRight ;
                break ;
            default :
                break ;
        }
    }

}

// Update once per frame
void Update () {
    
    if (over && t < 1) { // Fade of the interaction enter color
        foreach(Material material in allMaterials) {
            material.color = Color.Lerp(material.color, interactionColor, t) ;
            if(emissionIntensity > 0f) {
                Color baseEColor = material.GetColor("_EmissionColor") ;
                Color newEColor = new Color (emissionIntensity, emissionIntensity, emissionIntensity) ;
                material.SetColor("_EmissionColor", Color.Lerp(baseEColor, newEColor, t)) ;
            }
        }
        t += interactionSpeed * Time.deltaTime ;
    } else if (!over && t < 1f) { // Fade of the interaction exit color
        foreach(Material material in allMaterials) {
            material.color = Color.Lerp(material.color, baseColor[System.Array.IndexOf(allMaterials, material)], t) ;
            if(emissionIntensity > 0f) {
                Color baseEColor = material.GetColor("_EmissionColor") ;
                Color newEColor = new Color (0f, 0f, 0f) ;
                material.SetColor("_EmissionColor", Color.Lerp(baseEColor, newEColor, t)) ;
            }
        }
        t += interactionSpeed * Time.deltaTime ;
    }
    // Check the interaction exit in Touch/Click mode
    if (useTouchClick && Input.GetMouseButtonDown(0) && over && clickDelayed) {
        if(groupedInteraction) {
            foreach(MouseInteraction script in scripts_child) {
                script.otherGroupedObj = false ;
                script.interaction_exit() ;
                script.clickDelayed = false ;
            }
        } else {
            interaction_exit() ;
            clickDelayed = false ;
        }
    }
    
}

// Called when mouse over this object
void OnMouseEnter () {

    if (!useTouchClick && !useCenterScreen && (Vector3.Distance(Camera.main.transform.position, this.transform.position) < interactionDistance)) {
        if(groupedInteraction) {
            foreach(MouseInteraction script in scripts_child) {
                if(script.transform != this.transform)
                    script.otherGroupedObj = true ;
                script.interaction_enter() ;
            }
        } else {
            interaction_enter() ;
        }
    }

}

// Called when mouse exit this object
void OnMouseExit () {

    if (!useTouchClick && !useCenterScreen) {
        if(groupedInteraction) {
            foreach(MouseInteraction script in scripts_child) {
                script.otherGroupedObj = false ;
                script.interaction_exit() ;
            }
        } else {
            interaction_exit() ;
        }
    }
    
}

// Called when mouse click on this object
void OnMouseDown () {
    
    if (useTouchClick && !useCenterScreen && !over && (Vector3.Distance(Camera.main.transform.position, this.transform.position) < interactionDistance)) {
        if(groupedInteraction) {
            foreach(MouseInteraction script in scripts_child) {
                if(script.transform != this.transform)
                    script.otherGroupedObj = true ;
                script.interaction_enter() ;
            }
        } else {
            interaction_enter() ;
        }
        Invoke("clickDelay", 0.1f) ;
    }
    
}

// Tooltip creation
void OnGUI () {

    if(!otherGroupedObj) {
        // Display of text/tooltip for the Mouse interaction mode
        if (showTooltip && !fixedToTheObject && !useCenterScreen && over) {
            if(textResized) {
                cameraDistance = Vector3.Distance(Camera.main.transform.position, this.transform.position) ;
                tooltipStyle.fontSize = tooltipStyleShadow.fontSize = Mathf.RoundToInt(tooltipSize - (cameraDistance/3)) ;
            }
            GUI.Label(new Rect (Event.current.mousePosition.x + tooltipPosition.x - tooltipShadowPosition.x, Event.current.mousePosition.y + tooltipPosition.y - tooltipShadowPosition.y, 100f, 20f), currentText, tooltipStyleShadow) ;
            GUI.Label(new Rect (Event.current.mousePosition.x + tooltipPosition.x, Event.current.mousePosition.y + tooltipPosition.y, 100f, 20f), currentText, tooltipStyle) ;
            if(tooltipUIPanel != null) {
                tooltipUIPanel.transform.localPosition = new Vector3(Event.current.mousePosition.x + tooltipPosition.x - Screen.width/2f, -Event.current.mousePosition.y + tooltipPosition.y + Screen.height/2f, 0) ;
            }
        // Display of text/tooltip for the Center of the Screen interaction mode
        } else if (showTooltip && !fixedToTheObject && useCenterScreen && lookedByCam && over) {
            if(textResized) {
                cameraDistance = Vector3.Distance(Camera.main.transform.position, this.transform.position) ;
                tooltipStyle.fontSize = tooltipStyleShadow.fontSize = Mathf.RoundToInt(tooltipSize - (cameraDistance/3)) ;
            }
            GUI.Label(new Rect (Screen.width/2f + tooltipPosition.x - tooltipShadowPosition.x, Screen.height/2f + tooltipPosition.y - tooltipShadowPosition.y, 100f, 20f), currentText, tooltipStyleShadow) ;
            GUI.Label(new Rect (Screen.width/2f + tooltipPosition.x, Screen.height/2f + tooltipPosition.y, 100f, 20f), currentText, tooltipStyle) ;
            if(tooltipUIPanel != null) {
                tooltipUIPanel.transform.localPosition = new Vector3(tooltipPosition.x, tooltipPosition.y, 0) ;
            }
        // Display of text/tooltip for the Touch/Click interaction mode
        } else if (showTooltip && fixedToTheObject && over) {
            positionToScreen = Camera.main.WorldToScreenPoint(transform.position) ;
            cameraDistance = Vector3.Distance(Camera.main.transform.position, this.transform.position) ;
            if(textResized)
                tooltipStyle.fontSize = tooltipStyleShadow.fontSize = Mathf.RoundToInt(tooltipSize - (cameraDistance/3)) ;
            GUI.Label(new Rect (positionToScreen.x + tooltipPosition.x - tooltipShadowPosition.x, -positionToScreen.y + Screen.height + tooltipPosition.y / (cameraDistance/10) - tooltipShadowPosition.y, 100f, 20f), currentText, tooltipStyleShadow) ;
            GUI.Label(new Rect (positionToScreen.x + tooltipPosition.x, -positionToScreen.y + Screen.height + tooltipPosition.y / (cameraDistance/10), 100f, 20f), currentText, tooltipStyle) ;
            if(tooltipUIPanel != null) {
                tooltipUIPanel.transform.localPosition = new Vector3(positionToScreen.x + tooltipPosition.x - Screen.width/2f, positionToScreen.y - Screen.height/2f + tooltipPosition.y / (cameraDistance/10), positionToScreen.z) ;
            }
        }
    }
    
}

// Called when camera over this object
void lookedByCam_enter () {

    if (useCenterScreen && !lookedByCam && (Vector3.Distance(Camera.main.transform.position, this.transform.position) < interactionDistance)) {
        if(groupedInteraction) {
            foreach(MouseInteraction script in scripts_child) {
                script.lookedByCam = true ;
                if(script.transform != this.transform)
                    script.otherGroupedObj = true ;
                script.interaction_enter() ;
            }
        } else {
            lookedByCam = true ;
            interaction_enter() ;
        }
    }

}

// Called when camera exit this object
void lookedByCam_exit () {

    if (useCenterScreen && lookedByCam) {
        if(groupedInteraction) {
            foreach(MouseInteraction script in scripts_child) {
                script.lookedByCam = false ;
                script.otherGroupedObj = false ;
                script.interaction_exit() ;
            }
        } else {
            lookedByCam = false ;
            interaction_exit() ;
        }
    }
    
}

// Begin the interaction system (show tooltip and focus color of this object)
void interaction_enter () {

    t = 0f ;
    over = true ;
    currentText = tooltipText ;
    if (mouseCursor != null && !useCenterScreen && !useTouchClick) {
        Cursor.SetCursor (mouseCursor, Vector2.zero, CursorMode.Auto);
    }
    if(tooltipUIPanel != null) {
        Invoke("tooltipDelayOn", 0.05f) ;
    }
    if (interactionAnim != null) {
        if(animationReset) {
            animationComponent[interactionAnim.name].time = 0.0f ;
            animationComponent[interactionAnim.name].speed = 1.0f ;
        }
        if(animationLoop) {
            animationComponent[interactionAnim.name].wrapMode = WrapMode.Loop ;
        } else {
            animationComponent[interactionAnim.name].wrapMode = WrapMode.Once ;
        }
        animationComponent.Play(interactionAnim.name) ;
    }

}

// End the interaction system (hide tooltip and focus color of this object)
void interaction_exit () {

    t = 0f ;
    over = false ;
    currentText = "" ;
    if (mouseCursor != null && !useCenterScreen && !useTouchClick) {
        Cursor.SetCursor (null, Vector2.zero, CursorMode.Auto);
    }
    if(tooltipUIPanel != null) {
        Invoke("tooltipDelayOff", 0.05f) ;
    }
    if (interactionAnim != null) {
        if(animationLoop) {
            animationComponent.Stop () ;
            if(animationReset) {
                animationComponent[interactionAnim.name].time = 0.0f ;
                animationComponent[interactionAnim.name].speed = 0.0f ;
                animationComponent.Play(interactionAnim.name) ;
            }
        }
    }

}

// Delay for the click interaction
void clickDelay () {

    clickDelayed = true ;

}

// Delay for the tooltip display (on)
void tooltipDelayOn () {
    
    tooltipUIPanel.SetActive(true) ;
    
}

// Delay for the tooltip display (off)
void tooltipDelayOff () {
    
    tooltipUIPanel.SetActive(false) ;
    
}

}
/////////////////////////////////////////////////////////////////////////////////////
using UnityEngine;
using System.Collections;
//鼠标交互高亮插件,共三个脚本(MouseInteraction,挂物体上,CameraRaycast 挂摄像头上,MouseInteractionEditor 放Editer文件夹),一个编辑脚本放Editor文件夹,一个挂载在对象上,一个挂载在摄像机上
//鼠标交互高亮脚本,此脚本挂载在摄像头上
public class CameraRaycast : MonoBehaviour {

private Camera cameraCompo ; // Camera component attached to your main camera
private GameObject currentObject ; // Object looked by your main camera

// Use this for initialization
void Start () {

    cameraCompo = GetComponent<Camera>() ;

}

// Update is called once per frame
void Update () {

    RaycastHit hit ;
    Vector3 cameraCenter = cameraCompo.ScreenToWorldPoint(new Vector3(Screen.width / 2f, Screen.height / 2f, cameraCompo.nearClipPlane)); // Calculation fo the center of your main camera

    // Raycast launch for detecting the object looked by your camera
    // Object looked is saved into a variable
    // If another object than that saved is looked by camera, a function is called to simulate a "center exit" (as well as a MouseExit)
    // If no object is looked by camera, a function is called to simulate a "center exit" (as well as a MouseExit)
    if (Physics.Raycast(cameraCenter, this.transform.forward, out hit, 1000)) {
        if(currentObject != hit.collider.gameObject && currentObject != null)
            currentObject.SendMessage("lookedByCam_exit", SendMessageOptions.DontRequireReceiver) ;
        currentObject = hit.collider.transform.gameObject ;
        currentObject.SendMessage("lookedByCam_enter", SendMessageOptions.DontRequireReceiver) ;
    }
    else {
        if(currentObject != null)
            currentObject.SendMessage("lookedByCam_exit", SendMessageOptions.DontRequireReceiver) ;
    }

}

}
////////////////////////////////////////////////////////////////////////////////
using UnityEngine;
using System.Collections;
using UnityEditor;
//鼠标交互高亮插件,共三个脚本(MouseInteraction,挂物体上,CameraRaycast 挂摄像头上,MouseInteractionEditor 放Editer文件夹),一个编辑脚本放Editor文件夹,一个挂载在对象上,一个挂载在摄像机上
//鼠标交互高亮——此脚本放在Editor文件夹
[CustomEditor(typeof(MouseInteraction))]
public class MouseInteractionEditor : Editor {

public enum InteractionMode {Mouse, CenterOfTheScreen, TouchClick}
public InteractionMode interactionMode ;

public override void OnInspectorGUI() {

    MouseInteraction myMouseInteraction = (MouseInteraction)target ;

    if (!myMouseInteraction.useCenterScreen && !myMouseInteraction.useTouchClick) {
        interactionMode = InteractionMode.Mouse ;
    } else if (!myMouseInteraction.useTouchClick) {
        interactionMode = InteractionMode.CenterOfTheScreen ;
    } else {
        interactionMode = InteractionMode.TouchClick ;
    }

    // Settings of the Mouse Interaction script

    EditorGUILayout.Separator() ; // Blank Line (space separator)

    // Interaction Color
    myMouseInteraction.interactionColor = EditorGUILayout.ColorField(new GUIContent("Interaction Color", "Color change of the interacted object."), myMouseInteraction.interactionColor) ;
    // Interaction Speed
    myMouseInteraction.interactionSpeed = EditorGUILayout.FloatField(new GUIContent("Interaction Speed", "Fade speed of the color change (slow -> quick)"), myMouseInteraction.interactionSpeed) ;
    // Emission Intensity
    myMouseInteraction.emissionIntensity = EditorGUILayout.Slider(new GUIContent("Emission Intensity", "Emission intensity (doesn't work with material which has no emissive intensity)"), myMouseInteraction.emissionIntensity, 0.0f, 1.0f) ;

    EditorGUILayout.Separator() ; // Blank Line (space separator)

    // Interaction Mode
    interactionMode = (InteractionMode)EditorGUILayout.EnumPopup(new GUIContent("Interaction Mode", "How the interaction work (mouse over, center of the screen or simple touch/click)"), interactionMode) ;
    switch(interactionMode) {
        case InteractionMode.Mouse :
            myMouseInteraction.useCenterScreen = false ;
            myMouseInteraction.useTouchClick = false ;
            break ;
        case InteractionMode.CenterOfTheScreen :
            myMouseInteraction.useCenterScreen = true ;
            myMouseInteraction.useTouchClick = false ;
            break ;
        case InteractionMode.TouchClick :
            myMouseInteraction.useCenterScreen = false ;
            myMouseInteraction.useTouchClick = true ;
            break ;
        default :
            break ;
    }
    // Mouse Cursor
    if(interactionMode != InteractionMode.Mouse)
        GUI.enabled = false ;
    EditorGUILayout.BeginHorizontal() ;
    EditorGUILayout.PrefixLabel (new GUIContent ("Mouse Cursor", "Cursor sprite when interaction with the object (texture must be a Cursor in import settings)"));
    myMouseInteraction.mouseCursor = (Texture2D)EditorGUILayout.ObjectField(myMouseInteraction.mouseCursor, typeof(Texture2D), false) ;
    EditorGUILayout.EndHorizontal() ;
    GUI.enabled = true ;
    // Interaction distance
    myMouseInteraction.interactionDistance = EditorGUILayout.IntField(new GUIContent("Interaction Distance", "Max distance of the interaction (1000 = far away, 6 = melee range)"), myMouseInteraction.interactionDistance) ;
    // Grouped Interaction
    myMouseInteraction.groupedInteraction = EditorGUILayout.Toggle(new GUIContent("Grouped Interaction", "Interaction with all objects of the same parent."), myMouseInteraction.groupedInteraction) ;
    // Number Of Ascent
    if(!myMouseInteraction.groupedInteraction)
        GUI.enabled = false ;
    myMouseInteraction.numberOfAscent = EditorGUILayout.IntSlider(new GUIContent("Number Of Ascent", "Number of ascent to define the parent for the Grouped Interaction setting."), myMouseInteraction.numberOfAscent, 0, 4) ;
    GUI.enabled = true ;
    // Interaction Animation
    myMouseInteraction.interactionAnim = (AnimationClip)EditorGUILayout.ObjectField(new GUIContent("Interaction Animation", "Animation played when interacted."), myMouseInteraction.interactionAnim, typeof(AnimationClip), false) ;
    if(myMouseInteraction.interactionAnim == null)
        GUI.enabled = false ;
    // Animation Loop
    myMouseInteraction.animationLoop = EditorGUILayout.Toggle(new GUIContent("Animation Loop", "Loop the interacted animation."), myMouseInteraction.animationLoop) ;
    // Animation Reset
    if(!myMouseInteraction.animationLoop)
        GUI.enabled = false ;
    myMouseInteraction.animationReset = EditorGUILayout.Toggle(new GUIContent("Animation Reset", "[Loop animation only] Reset the animation loop when the interaction exit."), myMouseInteraction.animationReset) ;
    GUI.enabled = true ;

    EditorGUILayout.Separator() ; // Blank Line (space separator)

    // Show Tooltip (Beginning of a group list where settings are disabled if you don't want to show tooltip)
    myMouseInteraction.showTooltip = EditorGUILayout.BeginToggleGroup(new GUIContent("Show Tooltip", "Show a text over the interacted object."), myMouseInteraction.showTooltip) ;
        EditorGUI.indentLevel++ ;
        // Tooltip UI Panel
        myMouseInteraction.tooltipUIPanel = (GameObject)EditorGUILayout.ObjectField(new GUIContent("Tooltip UI Panel", "Show a predefined UI Panel over the interacted object."), myMouseInteraction.tooltipUIPanel, typeof(GameObject), true) ;
        // Check out of screen
        /*if(interactionMode != InteractionMode.Mouse || myMouseInteraction.tooltipUIPanel == null) {
            GUI.enabled = false ;
        }
        myMouseInteraction.checkOutOfScreen = EditorGUILayout.Toggle(new GUIContent("Check Out of the Screen", "[Mouse interaction only] Check if the UI Panel is outside the screen, and auto change its anchor (no effect if no UI Panel are defined)"), myMouseInteraction.checkOutOfScreen) ;
        GUI.enabled = true ;*/
        // Fixed to the Object
        myMouseInteraction.fixedToTheObject = EditorGUILayout.Toggle(new GUIContent("Fixed to the Object", "Show the tooltip over the object instead of over the mouse."), myMouseInteraction.fixedToTheObject);
        // Tooltip Position
        myMouseInteraction.tooltipPosition = EditorGUILayout.Vector2Field(new GUIContent("Tooltip Position", "Position of the tooltip showed over the interacted object."), myMouseInteraction.tooltipPosition) ;
        // Tooltip Text
        myMouseInteraction.tooltipText = EditorGUILayout.TextField(new GUIContent("Tooltip Text", "Text to show over the interacted object."), myMouseInteraction.tooltipText) ;
        if(myMouseInteraction.tooltipText == "")
            GUI.enabled = false ;
        EditorGUI.indentLevel++ ;
        // Tooltip Text Color
        myMouseInteraction.tooltipColor = EditorGUILayout.ColorField(new GUIContent("Text Color", "[Requires Tooltip Text] Color of the text showed over the interacted object."), myMouseInteraction.tooltipColor) ;
        // Tooltip Text Size
        myMouseInteraction.tooltipSize = EditorGUILayout.IntField(new GUIContent("Text Size", "[Requires Tooltip Text] Size of the text showed over the interacted object."), myMouseInteraction.tooltipSize) ;
        // Tooltip Text Scaled
        myMouseInteraction.textResized = EditorGUILayout.Toggle(new GUIContent("Text Resized", "Resize the text, relative to the distance between the object and the camera."), myMouseInteraction.textResized);
        // Tooltip Text Font
        myMouseInteraction.tooltipFont = (Font)EditorGUILayout.ObjectField(new GUIContent("Text Font", "[Requires Tooltip Text] Font of the text showed over the interacted object."), myMouseInteraction.tooltipFont, typeof(Font), false) ;
        // Tooltip Alignment
        myMouseInteraction.tooltipAlignment = (MouseInteraction.TooltipAlignment)EditorGUILayout.EnumPopup(new GUIContent("Text Alignment", "Alignment of the text showed over the interacted object."), myMouseInteraction.tooltipAlignment) ;
        // Tooltip Shadow Color
        myMouseInteraction.tooltipShadowColor = EditorGUILayout.ColorField(new GUIContent("Text Shadow Color", "Color of the text shadow showed over the interacted object."), myMouseInteraction.tooltipShadowColor) ;
        // Tooltip Shadow Position  
        myMouseInteraction.tooltipShadowPosition = EditorGUILayout.Vector2Field(new GUIContent("Text Shadow Position", "Position of the text shadow showed over the interacted object."), myMouseInteraction.tooltipShadowPosition) ;
        EditorGUI.indentLevel-- ;
        GUI.enabled = true ;
        EditorGUI.indentLevel-- ;
    EditorGUILayout.EndToggleGroup() ; // End of the group list (of Show Tooltip)

    EditorGUILayout.Separator() ; // Blank Line (space separator)

    // Warning messages
    // Check if the interacted object has a collider
    if(!myMouseInteraction.transform.gameObject.GetComponent<Collider>())
        EditorGUILayout.HelpBox("Don't forget to attach a collider to this object.", MessageType.Warning) ;
    // Advice for the Touch/Click interaction
    if(myMouseInteraction.useTouchClick && !myMouseInteraction.fixedToTheObject && myMouseInteraction.showTooltip)
        EditorGUILayout.HelpBox("In Touch/Click interaction, 'Fixed to the object' setting is recommended for mobile uses.", MessageType.Warning) ;
    // Check if the object has an animation component for the Interaction Animation setting
    if(myMouseInteraction.interactionAnim != null && myMouseInteraction.GetComponent<Animation>() == null)
        EditorGUILayout.HelpBox("There is no Animation Component attached to this object.", MessageType.Error) ;
    // Check if the object has the good number of parent, related to the Number Of Ascent setting
    if(myMouseInteraction.groupedInteraction) {
        bool error_parent = false ;
        Transform current_parent = myMouseInteraction.transform.parent ;
        for(int i = 1 ; i <= myMouseInteraction.numberOfAscent ; i++) {
            if(current_parent == null) {
                error_parent = true ;
                break ;
            } else {
                current_parent = current_parent.parent ;
            }
        }
        if(error_parent)
            EditorGUILayout.HelpBox("Number Of Ascent value is too high, this object doesn't have enough parent.", MessageType.Error) ;
    }
    // Check if the UI Panel has a RectTransform component
    /*if(myMouseInteraction.checkOutOfScreen && myMouseInteraction.tooltipUIPanel != null) {
        if(myMouseInteraction.tooltipUIPanel.GetComponent<RectTransform>() == null)
            EditorGUILayout.HelpBox("Your UI Panel must have a RectTransform component.", MessageType.Error) ;
    }*/


}

}

相关文章

网友评论

      本文标题:鼠标交互高亮插件

      本文链接:https://www.haomeiwen.com/subject/tyfzixtx.html