我让我的播放器不断向下移动到屏幕上,当玩家与其他游戏对象互动时,我想要销毁那些游戏对象并希望玩家继续放弃。
但是当玩家击中另一个游戏对象时,游戏对象确实会被破坏,但玩家会停止下降。请帮忙建议我做错了什么。
//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);
}
}
答案 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和horizontalVelocity的值,直到感觉正确。
另请注意,如果您在Update()中移动某些内容,则应该将翻译与Time.deltaTime相乘,否则您的播放器将在更高的fps上移动得更快。 FixedUpdate在固定时间间隔调用,所以你不需要它(这就是为什么它被称为固定更新)。