人物转向是鼠标控制
时间: 2023-08-30 16:07:01 浏览: 56
鼠标控制 人物八个方向移动
4星 · 用户满意度95%
好的,如果您需要在鼠标控制下实现角色转向的话,可以将脚本进行以下修改:
```csharp
using UnityEngine;
public class ThirdPersonController : MonoBehaviour
{
public float moveSpeed = 5f; // 移动速度
public float rotateSpeed = 5f; // 转向速度
private Animator animator; // 角色动画控制器
private Transform cameraTransform; // 相机Transform组件
private void Start()
{
animator = GetComponent<Animator>();
cameraTransform = transform.GetChild(0); // 假设相机是人物的第一个子节点
}
private void FixedUpdate()
{
// 获取移动输入
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
// 计算移动方向
Vector3 moveDirection = new Vector3(horizontal, 0f, vertical).normalized;
// 计算相机的正前方向
Vector3 cameraForward = Vector3.Scale(cameraTransform.forward, new Vector3(1, 0, 1)).normalized;
// 计算移动方向相对于相机的方向
Vector3 moveRelativeCamera = moveDirection.z * cameraForward + moveDirection.x * cameraTransform.right;
// 如果有移动输入
if (moveRelativeCamera != Vector3.zero)
{
// 获取鼠标位置
Vector3 mousePosition = Input.mousePosition;
mousePosition.z = Camera.main.transform.position.y - transform.position.y;
// 计算目标朝向
Vector3 targetDirection = Camera.main.ScreenToWorldPoint(mousePosition) - transform.position;
targetDirection.y = 0f;
// 插值转向
Quaternion targetRotation = Quaternion.LookRotation(targetDirection);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotateSpeed * Time.deltaTime);
// 设置角色移动速度
Vector3 moveVelocity = moveRelativeCamera * moveSpeed;
transform.position += moveVelocity * Time.deltaTime;
// 更新角色动画状态
animator.SetFloat("Speed", moveVelocity.magnitude);
}
else
{
// 如果没有移动输入,则停止移动
animator.SetFloat("Speed", 0f);
}
}
}
```
在这个版本的脚本中,我们将角色的转向方向从移动方向变更为鼠标指向的方向,通过获取鼠标位置计算出目标朝向,然后通过插值实现平滑转向。同时,如果没有移动输入,则停止移动并播放静止动画。
阅读全文