Unity 2D - Почему Rect.Contains не работает в этом примере? - PullRequest
0 голосов
/ 16 сентября 2018

В 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 голосов
/ 16 сентября 2018

хорошо, Rect в Unity - это структура, это тип значения. Это означает, что onScreenRect будет копией значения rt.Rect, а не ссылкой. когда вы помещаете инструкцию в Start (), значение будет скопировано только один раз и не будет обновлено. :) Прошу прощения за мой плохой английский и надеюсь, полезно.

...