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. 変数を定義して初期化します。
  • 速度: プレイヤーの移動速度。
  • 移動: プレイヤーの移動方向。
  • playerAC: プレーヤーのアニメーション コントローラー。
  • playerRigidbody: プレーヤーの剛体コンポーネント。
  • FloorMask: 光線検出用の床レイヤー。
  1. 移動と回転を実装します。
  • Move() 関数: 水平入力と垂直入力を受け取り、プレーヤーの移動方向ベクトルを設定し、Rigidbody コンポーネントを使用してプレーヤーを移動します。
  • Turning() 関数: レイを使用して床を検出し、プレーヤーが向く必要がある位置を取得し、Rigidbody コンポーネントを使用してプレーヤーを回転します。
  1. アニメーションを再生する:
  • Animating() 関数: プレーヤーが動いているかどうかに応じて iswalking ブール変数を設定し、それをアニメーション コントローラーに渡して、対応するアニメーションを制御します。
  1. プレーヤーの入力に応答する:
  • FixedUpdate() 関数: 固定の物理計算時間間隔内でプレーヤーの入力を検出し、Move() 関数を呼び出してプレーヤーを移動し、Animating() 関数を呼び出して対応するアニメーションを再生し、turning() 関数を呼び出してプレーヤーを回転させます。プレーヤー。

このコードは、キーボード入力に基づいてプレーヤーの移動と回転を実装し、プレーヤーが動いているかどうかに基づいてアニメーションを再生します。


おすすめ

転載: blog.csdn.net/qq_20179331/article/details/130717135