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

Unity 2D - Why Rect.Contains does Not work in this example?

在 2D 中 space:
我有一个 sprite 并且分配了一个脚本组件
我在 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!");
    }
  }
}

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