簡體   English   中英

將Unity 2D代碼轉換為3D

[英]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.

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