Unity:取消摄像机Y轴移动并实现跟随

在注册表中找到

在这里插入图片描述
安装完之后这里可以实现摄像机跟随:
在这里插入图片描述
然后下图可以实现摄像机不超过背景范围(有点像碰撞),要注意添加是触发器,这样可以不触发物理效果
在这里插入图片描述

在这里插入图片描述

如果设置的摄像头范围高度和背景图高度一样则可以实现y轴不动

其中,ctrl+鼠标点击可以实现取消多余的线
ctrl+拖动可以实现自动贴合

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的第一人称角色移动、跳跃、加速和摄像机跟随实现的示例代码。 首先,在场景中创建一个空物体作为角色控制器,并将一个第一人称摄像机作为其子对象。为了实现摄像机跟随,我们需要将摄像机的位置设置在角色控制器的前方,然后使用 LookAt 方法让摄像机朝向角色控制器。 然后,我们需要编写脚本来控制角色移动、跳跃、加速和摄像机跟随。以下是示例代码: ```csharp using UnityEngine; public class FirstPersonController : MonoBehaviour { public float moveSpeed = 5.0f; public float jumpForce = 10.0f; public float gravity = 20.0f; public float sprintSpeedMultiplier = 2.0f; public float maxSlopeAngle = 45.0f; public float cameraRotationLimit = 90.0f; private CharacterController controller; private Transform cameraTransform; private Vector3 moveDirection = Vector3.zero; private bool isSprinting = false; private float cameraRotationX = 0.0f; void Start() { controller = GetComponent<CharacterController>(); cameraTransform = transform.GetChild(0); cameraTransform.position = transform.position + transform.forward * 2.0f; cameraTransform.LookAt(transform); } void Update() { // 计算移动方向 float horizontal = Input.GetAxis("Horizontal"); float vertical = Input.GetAxis("Vertical"); Vector3 inputDirection = new Vector3(horizontal, 0.0f, vertical); inputDirection = transform.TransformDirection(inputDirection); inputDirection.Normalize(); // 计算垂直方向的速度 if (controller.isGrounded) { moveDirection.y = 0.0f; if (Input.GetButtonDown("Jump")) { moveDirection.y = jumpForce; } } moveDirection.y -= gravity * Time.deltaTime; // 计算水平方向的速度 float speed = moveSpeed; if (isSprinting) { speed *= sprintSpeedMultiplier; } if (inputDirection.magnitude > 0.0f) { float slopeAngle = Vector3.Angle(Vector3.up, controller.normal); if (slopeAngle <= maxSlopeAngle) { moveDirection.x = inputDirection.x * speed; moveDirection.z = inputDirection.z * speed; } } else { moveDirection.x = 0.0f; moveDirection.z = 0.0f; } // 应用移动速度 controller.Move(moveDirection * Time.deltaTime); // 处理摄像机旋转 float rotationX = Input.GetAxis("Mouse X") * Time.deltaTime * 100.0f; float rotationY = Input.GetAxis("Mouse Y") * Time.deltaTime * 100.0f; transform.Rotate(0.0f, rotationX, 0.0f); cameraRotationX -= rotationY; cameraRotationX = Mathf.Clamp(cameraRotationX, -cameraRotationLimit, cameraRotationLimit); cameraTransform.localRotation = Quaternion.Euler(cameraRotationX, 0.0f, 0.0f); // 处理加速 isSprinting = Input.GetKey(KeyCode.LeftShift); } } ``` 在这个示例中,我们定义了一个 FirstPersonController 类来管理角色移动、跳跃、加速和摄像机跟随。在 Start 方法中,我们获取了 CharacterController 和摄像机的 Transform 组件,并初始化了摄像机的位置和朝向。在 Update 方法中,我们首先计算移动方向,并根据是否在地面上和是否按下跳跃键来计算垂直方向的速度。然后根据水平方向的输入和是否在斜坡上来计算水平方向的速度。最后,我们应用移动速度、处理摄像机旋转和处理加速。 注意,我们限制了摄像机的 Y 轴旋转角度,以避免出现摄像机翻转的问题。同时,我们还限制了角色在斜坡上移动的最大角度,以避免出现卡在斜坡上的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值