unity3d如何通过input类捕获鼠标移动并同步到相机视角转动视角上,以及wsad键移动,就像第一人称游戏一样,请提供完整代码
时间: 2025-02-10 09:15:12 浏览: 42
在Unity3D中,为了实现类似第一人称游戏的鼠标控制和键盘移动,你可以创建一个`InputManager`脚本来处理输入事件,并将它们映射到相机的Transform。以下是一个简单的示例代码:
首先,在Assets新建一个C#脚本文件(例如MouseCamController),然后粘贴以下代码:
```csharp
using UnityEngine;
using System.Collections;
public class MouseCamController : MonoBehaviour
{
public Transform cameraRig; // 存储相机的Transform
private Vector3 mouseLook = Vector3.zero; // 记录鼠标偏移量
void Update()
{
// 捕获鼠标移动并同步到相机视角
float mouseX = Input.GetAxis("Mouse X") * Camera.main.sensitivity; // 环绕视图
float mouseY = Input.GetAxis("Mouse Y") * Camera.main.sensitivity; // 俯仰视图
mouseLook.x += mouseX;
mouseLook.y += mouseY;
// 限制最大旋转角度
mouseLook = new Vector3 Mathf.Clamp(mouseLook.x, -85f, 85f), Mathf.Clamp(mouseLook.y, -60f, 60f), 0f);
// 将鼠标视角转换为正交模式,适合于FPS游戏
Quaternion rotation = Quaternion.Euler(mouseLook);
cameraRig.rotation = Quaternion.Lerp(cameraRig.rotation, rotation, Time.deltaTime * 40f); // 速度调整
// W, A, S, D 键移动
float speed = 5f; // 移动速度
if (Input.GetKey(KeyCode.W))
transform.Translate(Vector3.forward * speed * Time.deltaTime);
if (Input.GetKey(KeyCode.S))
transform.Translate(-Vector3.forward * speed * Time.deltaTime);
if (Input.GetKey(KeyCode.A))
transform.Translate(-Vector3.right * speed * Time.deltaTime);
if (Input.GetKey(KeyCode.D))
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
}
```
在场景中添加一个空物体(GameObject),并将其作为`cameraRig`组件挂载到你想让玩家移动的相机上。记得在Unity编辑器的Inspector面板中启用"Camera"组件,然后给`mouseX`和`mouseY`设置适当的灵敏度。
现在,当你运行这个游戏时,玩家可以使用鼠标控制视角,WSAD键来移动角色。
阅读全文
相关推荐
















