Как обнаружить обьект перед персонажем | Unity3D

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

using UnityEngine;
public class PlayerControler : MonoBehaviour {

    public float MoveSpeed = 1.5f;
    private int RotateStage = 0;
    private Vector3 To;

    private void Start(){
        To = transform.position;
    }

    private void Update(){
        if(Input.GetKeyDown(KeyCode.Q)){if(RotateStage <= 2){ RotateStage = RotateStage + 1; Debug.Log("Rotated!"); }else{ RotateStage = RotateStage = 0; Debug.Log("Rotated!"); }}
        if(Input.GetKeyDown(KeyCode.E)){if(RotateStage >= 1){ RotateStage = RotateStage - 1; Debug.Log("Rotated!"); }else{ RotateStage = RotateStage = 3; Debug.Log("Rotated!"); }}
        if(Input.GetKeyDown(KeyCode.Space)){
            if(RotateStage == 0){To.x = To.x + 1;}
            if(RotateStage == 1){To.z = To.z + 1;}
            if(RotateStage == 2){To.x = To.x - 1;}
            if(RotateStage == 3){To.z = To.z - 1;}
        }
    }

    private void FixedUpdate() {transform.position = Vector3.Lerp(transform.position, To, MoveSpeed * Time.deltaTime);}
}

Скрины сцены:вот


Ответы (1 шт):

Автор решения: Gilly

Сделать впереди обьекта триггер и если что то в нем будет(допустим обьект с именем стена), то отключить возможность передвежения. Надеюсь правильно понял

  1. Добавьте на стену RigidBody и колайдер
  2. Сделайте впереди объекта, который передвигается колайдер(в настройках колайдера нажмите на галочку IsTrigger)
  3. Реализуйте следующие в скрипте с управлением игроком

Код

{
   void OnTriggerEnter(Collider other)
   {

     //Если в триггер зашел объект с именем стена
     if(other.gameObject.name == "wall") 
     {
       /*Код, который сделает невозможным дальнейшее передвижение 
       игрока*/
     }
}  }
→ Ссылка