2017-01-31 1 views
0

2D로 스윙 액스를위한 작은 스크립트가 있습니다.유니티 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; 

를 사용하려고 내 경우 명령문

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 
    } 
관련 문제