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() 中时,该值只会被复制一次并且不会更新。 :)抱歉我的英语不好,希望对你有帮助。
在 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() 中时,该值只会被复制一次并且不会更新。 :)抱歉我的英语不好,希望对你有帮助。