【发布时间】:2019-11-07 23:57:44
【问题描述】:
我正在制作一个基于 Unity 的 Roll-A-Ball 教程的小游戏,尽管我没有使用过实际的教程。我加入了重生机制,但如果你在死时四处移动,那么在你重生后,你着陆后仍然有这种动力。我试图解决这个问题,但我不确定如何解决,因为我在使用 Unity 方面还是很陌生。我有一个视频显示:https://drive.google.com/open?id=1752bPBDVOe2emN_hmnlPaD4uaJQITpsP
这是处理重生的 C# 脚本:
public class PlayerBehavior : MonoBehaviour
{
Rigidbody PlayerRB;
public bool Dead;
private int timer;
public GameObject Particles;
public bool InRespawn;
void Update()
{
PlayerRB = GetComponent<Rigidbody>();
if (Dead)
{
StartCoroutine("Respawn");
}
}
IEnumerator Respawn()
{
InRespawn = true; //Used to prevent movement during respawn.
PlayerRB.useGravity = false;
transform.position = new Vector3(0, 4, 0);
transform.rotation = new Quaternion(-80, 0, 0, 0); // Resets position.
Dead = false;
Instantiate(Particles, transform); // Adds respawn particle effect.
yield return new WaitForSeconds(2);
Destroy(this.gameObject.transform.GetChild(0).gameObject);
PlayerRB.useGravity = true;
PlayerRB.AddForce(0, 400, 0); // Does a little hop.
InRespawn = false; // Tells the game that respawn is finished.
}
}
【问题讨论】:
-
这意味着如果
dead变量在你死时为真 -
将刚体的速度设置为空向量。
-
而不是使用
Update来轮询状态,您应该实现这个更多的事件驱动并在将Dead设置为true 的任何地方启动协程 -
@derHugo 我曾想过这样做,但我正计划制作陷阱和其他可能导致玩家重生的东西。我认为让他们更改变量会比启动协程更好,但老实说,我不知道哪个更好。
-
好吧……你还是启动了一个协程;)