У меня есть учебная сцена, и в конце у меня есть измененный куб с текстурой двери на нем. Я установил код для проверки на наличие столкновений и поворота его оси, но после столкновения дверь вращается навсегда. Внутри моего void OnCollisionEnter()
, у меня есть, если заявление:Проверка поворота двери
if (pivot.transform.rotation.eulerAngles.y == 83)
{
pivot.GetComponent<Rigidbody>().freezeRotation = true;
}
, но это не похоже на работу. Может ли кто-нибудь просветить меня по этому поводу? Как я не могу найти ответ.
Вот весь сценарий:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class DoorOpen : MonoBehaviour {
public GameObject pivot;
void Start() {
}
void Update() {
}
void OnCollisionEnter(Collision door)
{
if (door.collider.tag == "Door")
{
StartCoroutine(openDoor());
}
}
IEnumerator openDoor() {
float angle=0;
for(int i=0 ;i<=6;i++){
angle+= i * 10;
pivot.transform.eulerAngles = new Vector3(0f,83f,0f);
yield return new WaitForSeconds(0.4f);
}
}
}
Это может быть полезно для вас, чтобы включить больше функции OnCollisionEnter(), так как проблема, скорее всего, есть, и, возможно, некоторый код, чтобы показать, как OnCollisionEnter() называется в случае, если проблема действительно существует. Мое предположение, хотя оно полностью умозрительно, но не более контекста, заключается в том, что pivot.transform.rotation.eulerAngles.y никогда не является 83, когда эта проверка происходит, и переходит от значения ниже 83 к значению выше 83, и поэтому никогда замораживает поворот –
@KevinWells Ах, я не знал, что eulerAngles не так точно. Должен ли я вместо этого делать что-то вроде '> 77 && <87'? –
Теперь, когда у меня больше контекста, я думаю, что знаю, что происходит. Вы умножаете 83 градуса на Time.deltaTime, что может означать, что он будет вращаться намного больше или меньше 83 градусов. Почему вы делаете это умножение? –