介绍
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()函数旋转玩家。
这段代码实现了基于键盘输入的玩家移动和旋转,并根据玩家是否在移动来播放相应的动画。