考慮到物件旋轉,如何設定影片時間。游戲物件在 Z 軸上的旋轉范圍從 0 到 32,8。影片有 0,25 秒。
所以我必須做這樣的事情:當游戲物件處于 0% Z = 0; 影片時間 = 0。當游戲物件打開 50% Z = 16,4; 影片時間 = 0,125 所以也是 50%。
這就是我所擁有的,但它不起作用:
if(this.gameObject.transform.rotation.z <= 0)
{
animator.SetTrigger("Start");
animator.speed = 1;
animator.SetFloat("Time", 0);
}
else if(this.gameObject.transform.rotation.z > 0 && this.gameObject.transform.rotation.z <= 8.2f)
{
animator.SetFloat("Time", 0.0625f);
}
else if (this.gameObject.transform.rotation.z > 8.2f && this.gameObject.transform.rotation.z <= 16.4f)
{
animator.SetFloat("Time", 0.125f);
}
else if (this.gameObject.transform.rotation.z > 16.4f && this.gameObject.transform.rotation.z <= 24.6f)
{
animator.SetFloat("Time", 0.1875f);
}
else if (this.gameObject.transform.rotation.z > 24.6f && this.gameObject.transform.rotation.z <= 32.8f)
{
animator.SetFloat("Time", 0.25f);
}
知道如何解決嗎?
uj5u.com熱心網友回復:
首先你不想經歷transform.rotation.z
!
transform.rotation
回傳一個Quaternion
(另見維基百科四元數) ,它不是三個而是四個分量x
,并且它們都在范圍內移動到!y
z
w
-1
1
使用eulerAngles
也不是很可靠。
所以我會
根據您的用例 - 假設您的物件僅圍繞 Z 旋轉,您可以例如簡單地使用
Vector3.up
(世界向上)和transform.up
(您的物件向上)之間的角度 => 圍繞 Z 旋轉然后,無需使用某些步驟,只需將您的角度范圍映射
0 to 32,8
到時間范圍0 to 0.25
參見例如https://forum.unity.com/threads/re-map-a-number-from-one-range-to-another.119437
所以它可能看起來像
const float maxAngle = 38.5f;
const float maxTime = 0.25f;
var angle = Vector3.Angle(Vector3.up, transform.up);
// [optional] make sure angle is valid
angle = Mathf.Clamp(angle, 0, maxAngle);
var time = angle / maxAngle * (maxTime);
animator.SetFloat("Time", time);
uj5u.com熱心網友回復:
是的,謝謝伙計:DI像你一樣做了一些小的改動并且它有效:
public Animator anim;
private void Start()
{
anim.speed = 0;
}
private void Update()
{
float angleZ = Mathf.Round(transform.eulerAngles.z * 100)/100;
float maxAngle = 32.8f;
float percentage = angleZ / maxAngle;
anim.Play("Packa1", 0, percentage);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/519999.html
標籤:C#unity3d
上一篇:為什么我的角色在Unity中穿墻