在2D空间中:
我有一个精灵,并为其分配了脚本组件
我在Start方法中有以下语句:
“ onScreenRect = rt.rect;”
它将无法正常检测到mouseOver!
现在,如果将此语句移到Update方法,它将。
请解释原因。
public class EvtPub : MonoBehaviour
{
RectTransform rt;
Rect onScreenRect;
void Start()
{
rt = GetComponent<RectTransform>();
// having next statement here, the code will Not work!
onScreenRect = rt.rect;
}
void Update()
{
// having next statement here, the code Will work!
// onScreenRect = rt.rect;
onScreenRect.Set(onScreenRect.x + transform.position.x,
onScreenRect.y + transform.position.y, onScreenRect.width, onScreenRect.height);
if (onScreenRect.Contains(Input.mousePosition))
{
Debug.Log("Mouse over detected!");
}
}
}
答案 0 :(得分:2)
好吧,Unity中的Rect是一个结构,它是一个值类型。这意味着onScreenRect将是rt.Rect的值副本,而不是引用。当您将语句放在Start()中时,该值将仅被复制一次,并且不会被更新。 :)对我的英语不好说,希望对您有所帮助。