本方法适用于Cinemachine - FreeLook。
1. 锁定与呼出光标的功能实现
// 锁定光标
private void LockMouse() {
// 将光标锁定在屏幕中间
Cursor.lockState = CursorLockMode.Locked;
// 隐藏光标
Cursor.visible = false;
}
// 呼出光标
private void UnLockMouse() {
// 释放光标
Cursor.lockState = CursorLockMode.Confined;
// 显示光标
Cursor.visible = true;
}
2. Alt键对光标控制
2.1 基本逻辑
private void MouseControl() {
if (Input.GetKeyDown(KeyCode.LeftAlt)) {
// 在游戏中仅使用光标
UseMouseCursorOnly();
} else if (Input.GetKeyUp(KeyCode.LeftAlt)) {
// 在游戏中关闭光标
CloseMouseCursor();
}
}
2.2 《鸣潮》/《原神》中的细节
public void UseMouseCursorOnly() {
UnLockMouse(); // 释放光标
inputControl.Disable(); // 关闭键盘输入 (鸣潮是这样,但原神不是)
// 停止利用鼠标转动镜头
FreeLook_Camera.m_XAxis.m_InputAxisName = "";
FreeLook_Camera.m_YAxis.m_InputAxisName = "";
FreeLook_Camera.m_XAxis.m_InputAxisValue = 0;
FreeLook_Camera.m_YAxis.m_InputAxisValue = 0;
}
public void CloseMouseCursor() {
LockMouse(); // 锁定光标
inputControl.Enable(); // 启动键盘输入
// 重新启动鼠标对镜头的控制
FreeLook_Camera.m_XAxis.m_InputAxisName = "Mouse X";
FreeLook_Camera.m_YAxis.m_InputAxisName = "Mouse Y";
}