赞
踩
在Unity中,摄像机控制是一个基本的功能,它允许玩家从第一人称或第三人称视角查看游戏世界,或者自由地漫游场景。以下是一些简单的摄像机控制代码示例:
对于第一人称摄像机控制,通常将摄像机绑定到玩家对象上,并通过输入来控制玩家对象的移动和旋转,从而间接控制摄像机的位置和朝向。
csharp复制代码
using UnityEngine; | |
public class FirstPersonCameraControl : MonoBehaviour | |
{ | |
public float speed = 6.0f; | |
public float rotationSpeed = 100.0f; | |
private void Update() | |
{ | |
float horizontal = Input.GetAxis("Horizontal"); | |
float vertical = Input.GetAxis("Vertical"); | |
Vector3 movement = new Vector3(horizontal, 0.0f, vertical); | |
transform.Translate(movement * speed * Time.deltaTime); | |
float mouseX = Input.GetAxis("Mouse X"); | |
float mouseY = Input.GetAxis("Mouse Y"); | |
transform.Rotate(0f, mouseX * rotationSpeed * Time.deltaTime, 0f); | |
} | |
} |
这段代码将摄像机绑定到玩家对象上,通过Input.GetAxis
获取水平和垂直轴上的输入来控制移动,并通过鼠标X轴输入来控制摄像机的水平旋转。
对于第三人称摄像机控制,摄像机通常与玩家对象保持一定的距离和角度。摄像机的位置和朝向可以基于玩家对象的位置和朝向来计算。
csharp复制代码
using UnityEngine; | |
public class ThirdPersonCameraControl : MonoBehaviour | |
{ | |
public Transform target; // 玩家对象 | |
public Vector3 offset; // 摄像机与玩家对象之间的偏移量 | |
public float rotationSpeed = 100.0f; | |
private void Update() | |
{ | |
// 保持摄像机与玩家对象之间的相对位置 | |
transform.position = target.position + offset; | |
// 摄像机跟随玩家对象的旋转 | |
float mouseX = Input.GetAxis("Mouse X"); | |
Quaternion rotation = Quaternion.AngleAxis(mouseX * rotationSpeed * Time.deltaTime, Vector3.up); | |
transform.rotation = rotation * Quaternion.LookRotation(target.position - transform.position); | |
} | |
} |
这段代码设置了一个目标(通常是玩家对象),并定义了一个偏移量,该偏移量决定了摄像机相对于玩家的位置和朝向。摄像机将跟随玩家对象移动,并可以通过鼠标输入来旋转摄像机以查看周围的环境。
对于场景漫游,你可能想要一个自由移动的摄像机,可以通过键盘或鼠标来控制摄像机的移动和旋转。
csharp复制代码
using UnityEngine; | |
public class FreeCameraControl : MonoBehaviour | |
{ | |
public float moveSpeed = 5.0f; | |
public float rotationSpeed = 100.0f; | |
private void Update() | |
{ | |
float horizontal = Input.GetAxis("Horizontal"); | |
float vertical = Input.GetAxis("Vertical"); | |
Vector3 movement = new Vector3(horizontal, 0.0f, vertical); | |
transform.Translate(movement * moveSpeed * Time.deltaTime); | |
if (Input.GetMouseButtonDown(1)) // 右键按下时开始旋转摄像机 | |
{ | |
float mouseX = Input.GetAxis("Mouse X"); | |
float mouseY = Input.GetAxis("Mouse Y"); | |
transform.Rotate(Vector3.up, mouseX * rotationSpeed * Time.deltaTime); | |
transform.Rotate(Vector3.right, mouseY * rotationSpeed * Time.deltaTime); | |
} | |
} | |
} |
在这个例子中,摄像机可以通过WSAD键移动,并通过鼠标右键旋转。这允许用户自由地探索场景。
记得将这些脚本分别附加到对应的摄像机对象上,并根据需要调整公共变量以匹配你的游戏设置。此外,这些代码示例是基本的实现,可能需要根据你的具体需求进行扩展和优化。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。