我想区分两个文本元素。如果鼠标悬停在此元素之一上,则应更改文本和位置。我阅读了有关IPointerEnterHandler
的文档,但是不明白如何在一个脚本中使用canvas元素来检测IPointerEnterHandler
的事件。
非常感谢您的帮助。
我的脚本:
public class TextController : MonoBehaviour, IPointerEnterHandler
{
public Text text1;
public Text text2;
public void OnPointerEnter(PointerEventData eventData)
{
if (EnteringText1) // don t know exact if statement
{
text1.text = "i m entering text1";
text1.transform.position = new Vector3(100f, 100f, 0f);
}
else if (EnteringText2) // don t know exact if statement
{
text2.text = "i m entering text2";
text2.transform.position = new Vector3(100f, 100f, 0f);
}
}
}
我在Unity中的场景
答案 0 :(得分:1)
您可以使用EventData.pointerCurrentRaycast.gameObject
来获取发生事件的GameObject的名称。由于您的Text
游戏对象分别命名为text1
和text2
,因此只需将它们与eventData.pointerCurrentRaycast.gameObject.name
进行比较。
public Text text1;
public Text text2;
public void OnPointerEnter(PointerEventData eventData)
{
GameObject obj = eventData.pointerCurrentRaycast.gameObject;
if (obj.name == "text1")
{
text1.text = "i m entering text1";
text1.transform.position = new Vector3(100f, 100f, 0f);
}
else if (obj.name == "text2")
{
text2.text = "i m entering text2";
text2.transform.position = new Vector3(100f, 100f, 0f);
}
}
如果您只想比较Text
组件中的值,然后像上面一样获得GameObject之后,请使用GetComponent<Text>()
从中检索Text
,检查是否为null
,然后使用Text.text
public void OnPointerEnter(PointerEventData eventData)
{
GameObject obj = eventData.pointerCurrentRaycast.gameObject;
Text text = obj.GetComponent<Text>();
if (text != null)
{
if (text.text == "EnteringText1")
{
text.text = "i m entering text1";
text.transform.position = new Vector3(100f, 100f, 0f);
}
else if (text.text == "EnteringText2")
{
text.text = "i m entering text2";
text.transform.position = new Vector3(100f, 100f, 0f);
}
}
}
注意:
上面的脚本必须附加到两个Text
组件的父对象上,才能检测其子对象上的事件。在您的情况下,此父对象被命名为“画布”。
答案 1 :(得分:0)
与Unity的原则保持一致,最简单的方法是将脚本分为两部分,即使事件向上传播,您也可以在较低的级别对其进行拦截
答案 2 :(得分:0)
只需编写脚本并命名为EnterableText
之类的脚本即可。将此脚本放在包含GameObject
组件的Text
上。脚本本身应类似于:
[RequiresComponent(typeof(Text))]
public sealed class EnterableText : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
private static readonly Vector3 hoveredPosition = new Vector3(100f, 100f, 0f);
public string defaultText;
public string hoveredText;
private Vector3 initialPosition;
private Text textComponent;
private void Awake()
{
initialPosition = transform.position;
textComponent = GetComponent<Text>();
textComponent.text = defaultText;
}
public void OnPointerEnter(PointerEventData eventData)
{
transform.position = new Vector3(100f, 100f, 0f);
textComponent.text = hoveredText;
}
public void OnPointerExit(PointerEventData eventData)
{
transform.position = initialPosition;
textComponent.text = defaultText;
}
}
此外,您可以将悬停文本的位置放在变量中,以便能够在运行时轻松调整它。