介绍
unity,如何让人物随着鼠标滑动而转向?
方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class PlayerMovement : MonoBehaviour
{
public float speed = 6f; // 玩家移动速度
private Vector3 movement; // 玩家的移动方向
private Animator playerAC; // 玩家的动画控制器
private Rigidbody playerRigidbody; // 玩家的刚体组件
LayerMask floorMask;
// 初始化
void Start()
{
// 获取动画控制器和刚体组件
playerAC = GetComponent<Animator>();
playerRigidbody = GetComponent<Rigidbody>();
floorMask = LayerMask.GetMask("floor");
}
// 固定时问见新
void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
// 移动 横向 和纵向
Move(h, v);
// 检测是否在移动,播放相应动画
Animating(h, v);
turning();
}
// 检测是否在移动,播放相应动画
void Animating(float h, float v)
{
// 只有h不等于0或者v不等于0才应该是移动
bool walking = h != 0f || v != 0f;
playerAC.SetBool("iswalking", walking);
}
// 移动
void Move(float h, float v)
{
// 设置移动的方向向量
movement.Set(h, 0f, v);
movement = movement.normalized * speed * Time.deltaTime;
// 使用Rigidbody组件移动玩家
playerRigidbody.MovePosition(transform.position + movement);
}
void turning()
{
Ray cameraRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit cameraHit;
if (Physics.Raycast(cameraRay, out cameraHit, 100f, floorMask))
{
Vector3 playerToMouse = cameraHit.point - transform.position;
playerToMouse.y = 0f;
Quaternion newQuaternion = Quaternion.LookRotation(playerToMouse);
playerRigidbody.MoveRotation(newQuaternion);
}
}
}
这段代码是一个基于Unity引擎实现玩家移动的脚本,主要作用如下:
- 定义并初始化变量:
- speed:玩家移动速度;
- movement:玩家的移动方向;
- playerAC:玩家的动画控制器;
- playerRigidbody:玩家的刚体组件;
- floorMask:用于射线检测的地板层。
- 实现移动和旋转:
- Move()函数:接收横向和纵向的输入,设置玩家的移动方向向量,然后使用Rigidbody组件移动玩家;
- turning()函数:使用射线检测地板,获取玩家需要朝向的位置,然后使用Rigidbody组件旋转玩家。
- 播放动画:
- Animating()函数:根据玩家是否在移动来设置iswalking布尔变量,然后将其传递给动画控制器,控制播放相应的动画。
- 响应玩家输入:
- FixedUpdate()函数:固定的物理计算时间间隔内检测玩家的输入,调用Move()函数移动玩家,调用Animating()函数播放相应动画,调用turning()函数旋转玩家。
这段代码实现了基于键盘输入的玩家移动和旋转,并根据玩家是否在移动来播放相应的动画。