Как обнаружить обьект перед персонажем | 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
→ Ссылка
Сделать впереди обьекта триггер и если что то в нем будет(допустим обьект с именем стена), то отключить возможность передвежения. Надеюсь правильно понял
- Добавьте на стену RigidBody и колайдер
- Сделайте впереди объекта, который передвигается колайдер(в настройках колайдера нажмите на галочку IsTrigger)
- Реализуйте следующие в скрипте с управлением игроком
Код
{
void OnTriggerEnter(Collider other)
{
//Если в триггер зашел объект с именем стена
if(other.gameObject.name == "wall")
{
/*Код, который сделает невозможным дальнейшее передвижение
игрока*/
}
} }
