如何停止Unity游戏对象的移动和/或旋转

时间:2019-11-05 19:22:24

标签: c# unity3d

尽管我没有使用实际的教程,但我正在制作一个基于Unity的滚球教程的小游戏。我加入了一个重生机制,但是如果死后要四处走动,那么在重生之后,着陆后仍然有这种动力。我已经尝试解决此问题,但是由于使用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.
    }
}

2 个答案:

答案 0 :(得分:3)

在重生时调零刚体的速度:

IEnumerator Respawn()
{
    PlayerRB.velocity = Vector3.zero;

    // ... rest of method
}

作为旁注,您可能不需要在每一帧上都运行GetComponent。这是一项昂贵的操作,因此最好不经常执行此操作:

void Start()
{
    PlayerRB = GetComponent<Rigidbody>();
}


void Update()
{
     if (Dead)
    {
        StartCoroutine("Respawn");
    }
}

相反,如果您想在播放器死后禁用与播放器的所有物理交互,则可以在此期间将其设置为运动学的。只需确保取消设置isKinematic,然后再对其施加作用力即可。

IEnumerator Respawn()
{
    PlayerRB.isKinematic = true;

    // ... rest of method

    PlayerRB.isKinematic = false;

    PlayerRB.useGravity = true;
    PlayerRB.AddForce(0, 400, 0); // Does a little hop.
    InRespawn = false; // Tells the game that respawn is finished.
}

答案 1 :(得分:0)

像这样在您的代码中添加一个布尔值

bool isDead=false;

那么当你死的时候就变成现实 将其添加到您的更新中

if(isDead){
rb.velocity=vector3.zero;
}

如果死了,这将阻止您移动对象