首页 > 解决方案 > 如何在 Unity 的第一人称射击游戏中进行刚体运动?

问题描述

所以我在 Unity 中制作了一个 FPS 游戏,我曾经使用 transform.translate 进行移动,但是如果移动速度足够快(对角线移动),这允许玩家穿过墙壁,甚至墙壁的碰撞箱有多大都无关紧要是。

这是我的播放器控制器代码:

https://pastebin.com/6g7j8G6v

这是运动代码:

void FixedUpdate()
{
    myBody.MovePosition(transform.position + (transform.forward * 
    Time.deltaTime * speed));
}

void Update()
{

float axisX = Input.GetAxis ("Horizontal");
float axisY = Input.GetAxis ("Vertical");

更多信息:使用此代码,玩家现在可以在非常特定的方向上移动,而不管旋转。此外,W 和 S 上下移动,而不是前后移动。

标签: c#unity3d3dgame-physicsrigid-bodies

解决方案


我建议您查看https://learn.unity.com/tutorial/environment-and-player?projectId=5c51479fedbc2a001fd5bb9f#5c7f8529edbc2a002053b786 unity 官方文档

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

    public float speed;

    private Rigidbody rb;

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

    void FixedUpdate ()
    {
        float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");

        Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

        rb.AddForce (movement * speed);
    }
}

他们有一个非常简单的示例代码来说明如何做到这一点,请记住,这个解决方案仍然需要规范化矢量运动,为此,请执行以下操作:

rb.AddForce (movement.normalized  * speed);

推荐阅读