Unity 2D-为什么Rect.Contains在此示例中不起作用?

时间:2018-09-16 16:26:43

标签: unity3d rect

在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!");
    }
  }
}

1 个答案:

答案 0 :(得分:2)

好吧,Unity中的Rect是一个结构,它是一个值类型。这意味着onScreenRect将是rt.Rect的值副本,而不是引用。当您将语句放在Start()中时,该值将仅被复制一次,并且不会被更新。 :)对我的英语不好说,希望对您有所帮助。