您现在的位置是:首页 >技术交流 >unity,如何让人物随着鼠标滑动而转向?网站首页技术交流

unity,如何让人物随着鼠标滑动而转向?

忽然602 2024-06-17 10:43:00
简介unity,如何让人物随着鼠标滑动而转向?

介绍

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引擎实现玩家移动的脚本,主要作用如下:

  1. 定义并初始化变量:
  • speed:玩家移动速度;
  • movement:玩家的移动方向;
  • playerAC:玩家的动画控制器;
  • playerRigidbody:玩家的刚体组件;
  • floorMask:用于射线检测的地板层。
  1. 实现移动和旋转:
  • Move()函数:接收横向和纵向的输入,设置玩家的移动方向向量,然后使用Rigidbody组件移动玩家;
  • turning()函数:使用射线检测地板,获取玩家需要朝向的位置,然后使用Rigidbody组件旋转玩家。
  1. 播放动画:
  • Animating()函数:根据玩家是否在移动来设置iswalking布尔变量,然后将其传递给动画控制器,控制播放相应的动画。
  1. 响应玩家输入:
  • FixedUpdate()函数:固定的物理计算时间间隔内检测玩家的输入,调用Move()函数移动玩家,调用Animating()函数播放相应动画,调用turning()函数旋转玩家。

这段代码实现了基于键盘输入的玩家移动和旋转,并根据玩家是否在移动来播放相应的动画。


风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。