Как я могу ограничить движение игрового объекта за черту в единстве - PullRequest
1 голос
/ 26 октября 2019

У меня есть это красное яблоко, которое должно двигаться только внутри линии зеленого яблока. Если он попытается выйти за пределы линии, он остановится на зеленой линии и сможет выйти за пределы. Как я могу это сделать?

Picture for better understand Этот код я использую для перемещения красного яблока.

 Camera mainCamera;
 float zAxis = 0;
 Vector3 clickOffset = Vector3.zero;

 // Use this for initialization
 void Start()
 {

     mainCamera = Camera.main;
     mainCamera.gameObject.AddComponent<Physics2DRaycaster>();

     zAxis = transform.position.z;
 }

 public void OnBeginDrag(PointerEventData eventData)
 {
     clickOffset = transform.position - mainCamera.ScreenToWorldPoint(new Vector3(eventData.position.x, eventData.position.y, zAxis));
 }

 public void OnDrag(PointerEventData eventData)
 {
     //Use Offset To Prevent Sprite from Jumping to where the finger is
     Vector3 tempVec = mainCamera.ScreenToWorldPoint(eventData.position) + clickOffset;
     tempVec.z = zAxis; //Make sure that the z zxis never change
     /*
     Debug.Log(tempVec.x);
     if (tempVec.x < 90)
     {
         tempVec.x = 90;

     }
     if (tempVec.x > 310)
     {
         tempVec.x = 310;

     }
     */
     transform.position = tempVec;
 }

 public void OnEndDrag(PointerEventData eventData)
 {

 }

Ответы [ 3 ]

0 голосов
/ 26 октября 2019

Я рекомендую использовать с этим многоугольный коллайдер (хотя он немного глючит). Затем, когда вы перетаскиваете яблоко, вы не устанавливаете положение, а устанавливаете скорость на основе разницы между мышью и яблоком.

К сожалению, высокоскоростные объекты не всегда правильно разрешаются в Unity,В случае, когда единица не всегда разрешает столкновение должным образом, я рекомендую передавать лучи по разнице от яблока к курсору, если вместо нажатия курсора вы получаете удар, теперь вы можете использовать позицию удара.

Example of raycast

ПРИМЕЧАНИЕ. Убедитесь, что оно не нормализовано, потому что вы хотите, чтобы скорость была больше, если курсор находится дальше от фрукта.

0 голосов
/ 27 октября 2019

Вы можете добавить рендерер сетки на большое зеленое яблоко. Затем в своем скрипте вы можете проверить наличие столкновений и заставить маленькое яблоко реагировать на столкновение так, как вам хочется.

0 голосов
/ 26 октября 2019

Не используйте код для этого, используйте коллайдеры с обеих сторон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...