#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. @ЯрославСмирнов Не могли бы вы, пожалуйста, опубликовать свой обновленный код