我想在我的游戏中制作一些升降平台,所以如果平台发生故障,角色就无法完成它。我已经为它编写了一个脚本,但出于某种原因,它提升了#34;没有按预期工作。它不会回到它的起始位置,但它会稍微低一点。由于某种原因,它不会顺利地进入它应该的地方,只是"传送"那里完成了。我将Time.deltaTime与const相乘会有所帮助,但它是一样的。
这是我的代码,任何帮助将不胜感激:
public class LiftingPlatform : MonoBehaviour {
private Transform lift;
private bool isCanBeLifted;
private float timeToLift;
public float timeNeededToLift = 5f;
private Vector3 startPos;
private Vector3 downPos;
private Vector3 shouldPos;
private bool isDown;
public GameObject[] collidingWalls;
// Use this for initialization
void Start () {
lift = transform;
isCanBeLifted = true;
timeToLift = 0f;
isDown = false;
startPos = transform.position;
downPos = new Vector3(startPos.x, startPos.y - 5f, startPos.z);
}
// Update is called once per frame
void Update () {
timeToLift += Time.deltaTime;
if (timeToLift >= timeNeededToLift) {
if (isCanBeLifted) {
if (isDown) {
shouldPos = Vector3.Lerp(startPos, downPos, Time.deltaTime * 10);
lift.position = new Vector3(shouldPos.x, shouldPos.y, shouldPos.z);
isDown = true;
}
else if (!isDown) {
shouldPos = Vector3.Lerp(downPos, new Vector3(startPos.x, startPos.y, startPos.z), Time.deltaTime * 10);
lift.position = new Vector3(shouldPos.x, shouldPos.y, shouldPos.z);
isDown = false;
}
}
timeToLift = 0;
}
if (!isDown) {
for (int i = 0; i < collidingWalls.Length; i++) {
collidingWalls[i].SetActive(true);
}
}
else if (isDown) {
for (int i = 0; i < collidingWalls.Length; i++) {
collidingWalls[i].SetActive(false);
}
}
}
void OnTriggerEnter(Collider collider) {
if (collider.tag == "Player" || collider.tag == "Enemy") {
isCanBeLifted = false;
}
}
void OnTriggerExit(Collider collider) {
if (collider.tag == "Player" || collider.tag == "Enemy") {
isCanBeLifted = true;
}
}
}
这些升降平台是另一个平台物体的孩子。
答案 0 :(得分:1)
看起来你每帧都在更新对象的位置。您只检查通过的总时间是否大于提升所需的时间,然后将位置更新为取决于增量时间的值(使用Vector3.Lerp
功能)。
我要做的是在更新步骤中,如果timeToLift
大于timeNeededToLift
,则从前者中减去后者并反转isDown
的值。然后,在Vector3.Lerp
中,制作第三个参数(timeToLift / timeNeededToLift)
而不是(Time.deltaTime * 10)
。你可以尝试一下,看看它是否有效吗?
Vector3.Lerp
的第三个参数是&#34;混合因子&#34;在两个向量之间,0是第一个向量,1是第二个,其间是0.5。如果总时间大于提升所需的时间,但增量时间不大于1,它将使用小于1的混合因子得到平台的位置,从而产生一个没有提升的平台完全移动。