c# - 如何在 Unity 的第一人称射击游戏中进行刚体运动?
问题描述
所以我在 Unity 中制作了一个 FPS 游戏,我曾经使用 transform.translate 进行移动,但是如果移动速度足够快(对角线移动),这允许玩家穿过墙壁,甚至墙壁的碰撞箱有多大都无关紧要是。
这是我的播放器控制器代码:
这是运动代码:
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 上下移动,而不是前后移动。
解决方案
我建议您查看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);
推荐阅读
- node.js - 尝试从 Node.js Firebase 函数中读取 Firebase 数据库时无法确定 Firebase 数据库 URL
- android - 如何在没有 ActionBar 的 AndroidX 中设置 BottomNavigationView
- awk - 如何优化这个 awk 脚本?
- sql - 生成 Excel 工作表崩溃
- apache-spark - JSON阅读器中的Spark采样选项被忽略了吗?
- android - 使用 Glide 加载 XML 向量是否明智
- reactjs - 从 React.js 中的状态数组呈现特定值
- android - 返回结果和lateinit:属性执行尚未初始化
- reactjs - 关于功能性 React 最佳实践的建议
- datatable - 如何添加下载到我的应用程序的功能