玩家在与gameObject联系时停止移动

时间:2014-07-11 12:16:20

标签: c# unity3d

我让我的播放器不断向下移动到屏幕上,当玩家与其他游戏对象互动时,我想要销毁那些游戏对象并希望玩家继续放弃。

但是当玩家击中另一个游戏对象时,游戏对象确实会被破坏,但玩家会停止下降。请帮忙建议我做错了什么。

//Script attached to player:

//x-axis movement speed
    public float playerMoveSpeed = 0.2f;
    //how much force to act against the gravity
    public float upForce = 9.0f;
    //horizontal control
    private float move;

    // Update is called once per frame
    void Update()
    {
        //player left right x-axis movement control
        move = Input.GetAxis("Horizontal") * playerMoveSpeed;
        transform.Translate(move, 0, 0);
    }

    void FixedUpdate()
    {
        //to fight against the gravity pull, slow it down
        rigidbody.AddForce(Vector3.up * upForce);
    }


//Script attached to gameObject to be destroyed on contact with player

void OnCollisionEnter(Collision col)
    {
        //as long as collide with player, kill object
        if (col.gameObject.tag == "Player")
        {
            Destroy(gameObject);
        }
    }

1 个答案:

答案 0 :(得分:0)

第一个应该解决你的问题,第二个可能会让你的生活更轻松:)

1。)将对象标记为“触发器”,以便不发生真正的碰撞。这样你的玩家就应该摔倒并保持速度。您还需要使用OnTriggerEnter而不是OnCollisionEnter

2。)如果你真的不需要“力量”,但只是想要不断移动玩家,你可以关闭引力并手动设置rigidbody.velocity(我假设在这里2d):

void FixedUpdate()
{
    horizontalVelocity = Input.GetAxis("Horizontal") * playerMoveSpeed;

    rigidbody.velocity = new Vector3(horizontalVelocity, verticalVelocity, 0.0f);
}

只需使用verticalVelocity和horizo​​ntalVelocity的值,直到感觉正确。

另请注意,如果您在Update()中移动某些内容,则应该将翻译与Time.deltaTime相乘,否则您的播放器将在更高的fps上移动得更快。 FixedUpdate在固定时间间隔调用,所以你不需要它(这就是为什么它被称为固定更新)。