簡體   English   中英

獲取 Unity Blend Tree 以根據玩家旋轉(鼠標位置)進行更新

[英]Get Unity Blend Tree to update based on player rotation (mouse position)


我正在為自上而下的游戲中的角色制作動畫。 當播放器向前移動到頂部時,我讓動畫工作,但是,每當我用鼠標旋轉播放器(瞄准)時,向前動畫現在是左/右等。我正在使用 Unity3d 和 C#與混合樹動畫。

混合樹 混合樹 1 多變的

我使用的代碼很簡單:

animator.SetFloat("VelX", playerInput.Horizontal);
animator.SetFloat("VelY", playerInput.Vertical);

每當我向鼠標位置移動時,我都無法弄清楚如何播放前向動畫。

我的解決方案:

var heading = Input.mousePosition - this.transform.position;
var distance = heading.magnitude;
var dir = heading / distance;
animator.SetFloat("VelX", playerInput.Horizontal * Mathf.Cos(dir));
animator.SetFloat("VelY", playerInput.Vertical * Mathf.Sin(dir));

任何幫助,將不勝感激。

您可能已經想到了這一點,但我遇到了同樣的問題,我剛剛找到了一種方法來做到這一點。 希望它可以幫助其他人。

 Vector3 inputVector = (Vector3.forward * Input.GetAxis("Vertical")) + (Vector3.right * Input.GetAxis("Horizontal"));

 Vector3 animationVector = _playerModel.transform.InverseTransformDirection(inputVector);

 var VelocityX = animationVector.x;
 var VelocityZ = animationVector.z;
 
 this._playerAnimator.SetFloat("x", VelocityX);
 this._playerAnimator.SetFloat("z", VelocityZ);

我的情況我在父空對象上有我的運動腳本。 這個對象旋轉子玩家模型,這是一個動畫。 如果您這樣做,那么您將需要像我一樣引用播放器模型。 否則,如果您使用父對象,則可以進行轉換。

我在我的父對象上使用角色控制器而不是剛體,但它可能以任何一種方式工作。

根據我的理解,關鍵部分是“InverseTransformDirection”,它采用我的物理世界水平和垂直向量,然后根據我的播放器模型的旋轉來轉換它們。 然后,這使得運動相對於玩家旋轉而不是世界旋轉,當我移動鼠標進行旋轉和移動時,我可以向后移動或正確掃射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM