2017-01-31 8 views
0

2DでスイングするAxのための小さなスクリプトがあります。ただ、ここではこの1例のように:ユニティ2Dコードを3Dに変換する

Dark Souls Swinging Axe

私の問題は、私は3Dに2Dコードを変換する方法がわからないこと、です。私のオブジェクトにはRigidbodyとHinge Joint(スイング物理学用)が付属しています。

Rigidbody.angularVelocity 

は、float値の代わりにVector3を取得する必要があります。

マイコード:

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? 
代わりに私のfloat値の

と私の二文があれば間違っている、私が持っている最後の

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 

が、これは限られた時間のためのつもりスイング、無限ではないため。だから多分データスクリプトの値を変更しなければならないか、大きさの代わりに何か他のものを使う必要があります...私は知らない

+0

私はちょうどアニメーションでそれをアニメーションやスクリプトとAnimationCurveで動くでしょう。.. – mgear

+0

はい、私はちょうどそれをアニメーション化について考えました。しかし、私はスクリプティングでうまくいくので、私は尋ねました。 – Garzec

+0

フラットプレーンx/yまたはy/zを選んでその方法を実装し、左上軸を無視します。または2次元のものを保持し、それを表示せずに3Dオブジェクトに変換をパイプします(おそらく非効率的です) – namar0x0309

答えて

2

私はついにそれを手に入れました。私は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 
    } 
関連する問題