如何使用新的输入系统创建鼠标外观?



我正尝试着为我的第一人称游戏创造一个流畅的鼠标外观。像这样使用新的输入系统:

public class MouseLook : MonoBehaviour
{
[SerializeField] float sensitivityX = 8f;
[SerializeField] float sensitivityY = 0.5f;
float mouseX, mouseY;
[SerializeField] Transform playerCamera;
[SerializeField] float xClamp = 75f;
float xRotataion = 0f;
private void Update()
{ 
transform.Rotate(Vector3.up, mouseX * Time.fixedDeltaTime);
xRotataion -= mouseY;
xRotataion = Mathf.Clamp(xRotataion, -xClamp, xClamp);
Vector3 targetRotation = transform.eulerAngles;
targetRotation.x = xRotataion;
playerCamera.eulerAngles = targetRotation;
} 
public void ReceiveInput(Vector2 mouseInput) 
{
mouseX = mouseInput.x * sensitivityX;
mouseY = mouseInput.y * sensitivityY;
}
}

这是InputManager类:

Vector2 mouseInput;
private void Awake() 
{ groundMovement.MouseX.performed += ctx => mouseInput.x = ctx.ReadValue<float>();
groundMovement.MouseY.performed += ctx => mouseInput.y = ctx.ReadValue<float>();
}
private void Update()
{
movement.ReceiveInput(horizontalInput);
mouseLook.ReceiveInput(mouseInput); 
}
private void OnEnable()
{
controls.Enable(); 
}
private void OnDestroy()
{
controls.Disable(); 
}

然而,由于某些原因,鼠标移动是不稳定的。所以我想用我之前用过的旧输入系统代码也就是:

[SerializeField][Range(0.0f, 0.5f)] float mouseSmoothTime = 0.03f;
[SerializeField] float mouseSensitivity = 3.5f;
float cameraPitch = 0.0f;
Vector2 currentMouseDelta = Vector2.zero;
Vector2 currentMouseDeltaVelocity = Vector2.zero;
private void Update()
{

Vector2 targetMouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
currentMouseDelta = Vector2.SmoothDamp(currentMouseDelta, targetMouseDelta, ref currentMouseDeltaVelocity, mouseSmoothTime);
cameraPitch -= currentMouseDelta.y * mouseSensitivity;
cameraPitch = Mathf.Clamp(cameraPitch, -90.0f, 90.0f);
playerCamera.localEulerAngles = Vector3.right * cameraPitch;
transform.Rotate(Vector3.up * currentMouseDelta.x * mouseSensitivity);
}

但是我怎样才能为新的输入系统配置这个并且仍然能够使用它呢?

public void ReceiveInput(Vector2 mouseInput) 
{
mouseX = mouseInput.x * sensitivityX;
mouseY = mouseInput.y * sensitivityY;
} 

按如下方式升级。使用下面的方法,你可以像在旧系统中一样设置鼠标增量:

Vector2 targetMouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));

Vector2 targetMouseDelta = Mouse.current.delta.ReadValue()*Time.smoothDeltaTime;

最新更新