Unity3D. Коллайдеры не реагируют на модель

#c# #unity3d

#c# #unity-игровой движок

Вопрос:

Я использую этот код для перемещения и поворота моего объекта, но он проходит сквозь стены. Да, у меня есть коллайдеры на объекте и стенах, но мой объект не сталкивается с этими стенами.

 using UnityEngine;
using System.Collections;

public class player_Control : MonoBehaviour {
    public float upspeed;
    public float downspeed;
    public float rotationSpeed;
    Transform myTrans;
    Vector3 myPos;
    Vector3 myRot;
    float angle;

    void Start() {
        myPos = transform.position;
        myRot = transform.rotation.eulerAngles;
    }
    void FixedUpdate() { 
        angle = transform.eulerAngles.magnitude * Mathf.Deg2Rad;

        if (Input.GetKey(KeyCode.RightArrow)) { // ROTATE RIGHT
            myRot.z -= rotationSpeed;
        }
        if (Input.GetKey(KeyCode.LeftArrow)) { // ROTATE LEFT
            myRot.z  = rotationSpeed;
        }
        if (Input.GetKey(KeyCode.UpArrow)) { // UP
            myPos.y  = (Mathf.Cos(-angle) * upspeed) * Time.deltaTime;
            myPos.x  = (Mathf.Sin(-angle) * upspeed) * Time.deltaTime;
        }
        if (Input.GetKey(KeyCode.DownArrow)) { // DOWN
            myPos.y  = (Mathf.Cos(-angle) * -downspeed) * Time.deltaTime;
            myPos.x  = (Mathf.Sin(-angle) * -downspeed) * Time.deltaTime;
        }
        transform.position = myPos;
        transform.rotation = Quaternion.Euler(myRot);

    }
}
  

Комментарии:

1. В коллайдере ваших объектов установлен флажок isTrigger или нет?

2. Есть ли у вас RigidBody прикрепленный к вашему объекту?

Ответ №1:

Ваша проблема здесь в том, что вы обходите физический движок Unity и напрямую изменяете положение и вращение игроков. Физические проверки Unity основаны на использовании компонента Rigidbody и имеют несколько специфических функций для изменения положения и поворота объектов, чтобы они правильно сталкивались с другими объектами в сцене. Для вашего использования выше я бы рассмотрел следующие две функции для изменения положения и поворота вашего персонажа:

https://docs.unity3d.com/ScriptReference/Rigidbody .MovePosition.html
https://docs.unity3d.com/ScriptReference/Rigidbody.MoveRotation.html

Комментарии:

1. Они не реагируют на повороты, перемещение объекта на x и y

2. @ЯрославСмирнов Не могли бы вы, пожалуйста, опубликовать свой обновленный код