[英]Translating a Unity 2D Code into 3D
我有一個用於2D旋轉斧頭的小腳本。 就像這里的一個例子:
我的問題是,我不知道如何將2D代碼轉換為3D。 我的對象附有一個剛體和一個鉸鏈接頭(用於擺動物理)。 的
Rigidbody.angularVelocity
需要獲取一個Vector3而不是一個float值。
我的代碼:
Rigidbody rigid;
float rangeToPush = 0.3f;
float velocity = 120;
private void Start()
{
rigid = GetComponent<Rigidbody>();
rigid.angularVelocity = Vector3.down * velocity;
}
private void Update()
{
if (transform.rotation.z > 0 &&
transform.rotation.z < -rangeToPush &&
rigid.angularVelocity.magnitude > 0 &&
rigid.angularVelocity.magnitude < velocity)
{
rigid.angularVelocity = Vector3.down * velocity;
}
else if (transform.rotation.z < 0 &&
transform.rotation.z > rangeToPush &&
rigid.angularVelocity.magnitude < 0 &&
rigid.angularVelocity.magnitude > -120)
{
rigid.angularVelocity = Vector3.down * -velocity;
}
}
缺少的東西是有價值的
data.Rigid.angularVelocity = ?Vector3?
而不是我的浮點值,顯然我的最后兩個if語句是錯誤的,我有
if( /* the other statements .. && */ data.Rigid.angularVelocity > 0 && data.Rigid.angularVelocity < data.RigidVelocity)
我需要將其轉換為3D。
非常感謝您的幫助!
編輯:我試圖使用
data.Rigid.angularVelocity = Vector3.down * data.RigidVelocity;
對於我的if陳述
Rigid.angularVelocity.magnitude
但這將在有限的時間內搖擺,而不是無盡的。 所以也許我必須在數據腳本中更改一個值,或者我必須使用其他內容代替幅度...我不知道
我終於明白了。 我刪除了HingeJoint並使用此代碼使它不斷擺動:
float speed = 0.4f; // Speed
float amplitude = 70; // How far can it swing?
private void Update()
{
transform.rotation = Quaternion.Euler(new Vector3(0, 0, Mathf.Sin(Time.timeSinceLevelLoad * Mathf.PI * speed) * amplitude)); // Swing
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.