所以這是針對 FPS 游戲中的向下瞄準運動。當玩家右擊時,這個協程被啟動,它應該將玩家的右手從它的“空閑”位置移動到它的“瞄準”位置。一旦到達瞄準位置,就會激活碰撞箱并播放影片。
public float ChargeTime;
public Vector3 TargetPosition;
public override IEnumerator Attack(PlayerController player)
{
float elapsedTime = 0f;
Vector3 currentPos = player.RightHand.transform.localPosition;
while (elapsedTime < ChargeTime)
{
elapsedTime = Time.deltaTime;
player.RightHand.transform.localPosition = Vector3.Lerp(currentPos, TargetPosition, (elapsedTime / ChargeTime));
yield return null;
}
player.RightHand.transform.localPosition = TargetPosition;
player.Hitbox.SetActive(true);
player.RightHandAnimator.SetBool("IsHolding", true);
yield return null;
}
我一直在檢查這段代碼,一切都應該按預期作業。Debug.Logs 會告訴我我已經到達了這段代碼一次,我正在正確回圈這個 while() 函式,Lerp 的 t 變數確實從 0 正確增加到 1,并且 hitbox 正確觸發在while() 結束...但手只是拒絕移動。
我已經三倍和四倍地檢查了 RightHand 變數確實參考了正確的物件,并且沒有其他代碼干擾(沒有其他任何東西可以使特定物件移動)。
我不了解 Vector3.Lerp 的作業原理嗎?我錯過了什么?
謝謝!
編輯:“覆寫”是因為這個類派生自“武器”,它有一個虛擬攻擊協程,它被不同型別的武器子類覆寫。
uj5u.com熱心網友回復:
在我看來,Animator您的播放器上有一個影響右手位置的東西 - 至少player.RightHandAnimator讓我想到了這個想法;)
這Animator是在一個框架內執行的最后一件事,一旦它在任何狀態下保持任何關鍵幀,player.RightHand.transform.localPosition它總是會否決您在代碼中所做的任何更改!
您可以同時將其關閉并執行例如
public override IEnumerator Attack(PlayerController player)
{
player.RightHandAnimator.enabled = false;
var rightHand = player.RightHand.transform;
var currentPos = rightHand.localPosition;
for(var elapsedTime = 0f; elapsedTime < ChargeTime; elapsedTime = Time.deltaTime)
{
rightHand.localPosition = Vector3.Lerp(currentPos, TargetPosition, elapsedTime / ChargeTime);
yield return null;
}
rightHand.localPosition = TargetPosition;
player.Hitbox.SetActive(true);
player.RightHandAnimator.enabled = true;
player.RightHandAnimator.SetBool("IsHolding", true);
}
uj5u.com熱心網友回復:
實際發生了什么?手根本不動嗎?你的代碼對我來說看起來不錯。手是否在這一行的回圈結束時移動..?
player.RightHand.transform.localPosition = TargetPosition;
如果不是那么,問題是欄位 TargetPosition 是錯誤的。您可以忽略 lerp 并嘗試讓那條線路正常作業,一旦正常,您的 lerp 也應該可以正常作業。
您可以嘗試將其從簡單的公共 Vector3 更改為 Transform 并將對空白游戲物件的參考拖入其中,并在 lerp 中使用它的 transform.position 欄位(游戲物件將位于您想要手的位置goto) 這對我來說更有意義,但可能不適用于你的游戲。我不知道。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/435345.html
下一篇:在統一問題中展示二叉樹
