【问题标题】:How do I make Rigidbody movements in a first person shooter in Unity?如何在 Unity 的第一人称射击游戏中进行刚体运动?
【发布时间】:2021-01-14 17:56:39
【问题描述】:

所以我在 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 上下移动,而不是前后移动。

【问题讨论】:

  • 请编辑问题,并将所有代码包含在sn-p中,以提高可读性

标签: c# unity3d 3d game-physics rigid-bodies


【解决方案1】:

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

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    相关资源
    最近更新 更多