【发布时间】:2015-04-12 19:04:29
【问题描述】:
我有一个让玩家打开和关闭门的脚本,但是当我按下按钮关闭门时,它会关闭然后再次打开。我怀疑这是因为 lerp 没有停止或其他原因。我怎样才能解决这个问题?怎么了? 谢谢!
Door Script:
using UnityEngine;
using System.Collections;
public class DoorHandler : MonoBehaviour {
public bool isOpen = false;
public float maxOpenDistance = 10f, doorCloseTime = 3f;
void Update () {
if (Input.GetKeyDown (KeyCode.F)) {
if (Vector3.Distance (GameObject.FindGameObjectWithTag ("Player").transform.position, this.gameObject.transform.position) <= maxOpenDistance) {
isOpen = !isOpen;
}
if (isOpen)
gameObject.transform.rotation = Quaternion.Lerp (Quaternion.Euler (transform.rotation.x, 0, transform.rotation.z),
Quaternion.Euler (transform.rotation.x, 90, transform.rotation.z), doorCloseTime);
} else {
gameObject.transform.rotation = Quaternion.Lerp (Quaternion.Euler (transform.rotation.x, 90, transform.rotation.z),
Quaternion.Euler (transform.rotation.x, 0, transform.rotation.z), doorCloseTime);
}
}
}
【问题讨论】:
-
我对统一不太熟悉,但我想这是由于游戏循环无法识别按键并按住键的差异,所以这意味着你不断改变它的开放状态,我敢肯定团结有一些发现这一点的方法..
-
@Sayse 你是对的,unity 有一种处理方式,但是在提供的代码中它已经以正确的方式使用,因为 Input.GetKeyDown() 仅适用于自密钥以来的第一次更新被按下
-
旋转是否真的很慢,还是门跳开和关上?
标签: c# unity3d rotation logic quaternions