c# - 为什么当我将其设置为 90 时,我的 FPS 角色在 Y 轴上变为 0
问题描述
我正在使用 FPS 控制器,由于某种原因,当我点击播放时,当我将其旋转到 90 时,播放器在 y 轴上一直旋转到 0。我很确定它与相机有关,如果这有助于缩小范围.
这是代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
Animator anim;
float RotateX;
float RotateY;
public static bool GamePaused;
[SerializeField]
[Header("Game Objects")]
public GameObject Camera;
[Header("Movement Settings")]
public float WalkSpeed = 5.0f;
[Header("Rotation Settings")]
public float RorationSpeed = 3.0f;
public float MaxYAxis = 60.0f;
public float MinYAxis = -48.0f;
private void Start()
{
anim = GetComponent<Animator>();
}
void Update()
{
Rotation();
Movement();
}
void Rotation()
{
RotateX += Input.GetAxis("Mouse X") * RorationSpeed;
RotateY += Input.GetAxis("Mouse Y") * RorationSpeed;
RotateY = Mathf.Clamp(RotateY, MinYAxis, MaxYAxis);
Camera.transform.localRotation = Quaternion.Euler(-RotateY, 0f, 0f);
transform.rotation = Quaternion.Euler(0f, RotateX, 0f);
}
void Movement()
{
transform.Translate(Vector3.forward * Input.GetAxis("Vertical") * WalkSpeed * Time.deltaTime);
transform.Translate(Vector3.right * Input.GetAxis("Horizontal") * WalkSpeed * Time.deltaTime);
}
}
解决方案
它实际上与您的Rotation
方法有关。游戏Update
一开始会调用该方法,该方法会调用该Rotation
方法。在那里你更新旋转的值,在游戏开始时它将是 0.0 并且输入轴上没有移动,所以一开始没有旋转,最后你用 0.0 值更新你的旋转,重置你在编辑。
您想要做的是旋转RotateY
或RotateX
角度相机或控制器。就像是:
void Rotation()
{
RotateX = Input.GetAxis("Mouse X") * RorationSpeed;
RotateY = Input.GetAxis("Mouse Y") * RorationSpeed;
RotateY = Mathf.Clamp(RotateY, MinYAxis, MaxYAxis);
Camera.transform.Rotate(new Vecto3(-RotateY, 0f, 0f));
transform.Rotate(new Vector3(0f, RotateX, 0f));
}
推荐阅读
- typescript - Typescript 中部分类型的联合不能进行类型缩小
- c# - 默认 Blazor 模板在 Azure 上不起作用
- sql - 在 SELECT 语句中使用 HAVING 和 AS 时无法识别列
- c++ - 链接我的库时 LNK2005 已定义错误
- r - 逗号分隔因变量在线性回归中意味着什么?
- javascript - 如何在一个组件中显示一个或多个细节 - React Native?
- python - 我最近学习了高阶函数。我尝试使用高阶函数编写一些代码,但我被卡住了
- sql - Netezza 错误数据分区已满 - 多次调用存储过程时
- codeigniter - 如何在验证失败时预填充级联下拉列表和附件
- python - fnmatch 只返回我列表中的第一个文件名