프로그래밍⚡️/unity

unity 3D 오브젝트 회전 주기

Kwangkki 2022. 5. 10. 21:49

개발 업무를 맡고나서 UI 만들고 지우는 업무를 맡다가 쉬운 개발 업무를 맡게 되었다.

 

아래 서보모터 3D 오브젝트의 날개부분을 회전시킬 수 있도록 만드는 작업을 맡았다.

 

우선 기본큐브로 형태를 잡아봤다

 

날개의 회전 축이 몸쪽으로 가야하니 날개 오브젝트에 빈오브젝트를 만들어 회전축을 잡아줬다.

 

축을 바꾼 빈오브젝트를 부모 오브젝트로 만들어주면 회전축은 완료

 

스크립트는 아래와 같다.

1. inspector 창에서 컨포넌트 transform 연결할 수 있도록 설정

2. 180도까지만 돌아야하기 때문에 Mathf 함수 중 Clamp를 사용해 최대값을 지정 

2. 에셋 DOTween의 DOLcalRotate를 사용해 오브젝트의 z값이 매개변수 angle을 받도록 설정

 

using UnityEngine;
using DG.Tweening;

public class ServoMoter : MonoBehaviour {
    [SerializeField] private Transform motorWing;
    [SerializeField] private int angle;
    
    void Update(){
    SetWingAngle(angle);
    }

    private void SetWingAngle(int angle) {
        angle = Mathf.Clamp(angle, 0, 180);
        motorWing.transform.DOLocalRotate(new Vector3(0, 0, angle), 0.5f);
    }
}

 

 

생각보다 간단하게 해결한 것 같지만 최대값 지정을 하기 위해 for문으로 돌려보다가 잘 안되어 Clamp 함수를 서치했고 DOLocalRotate를 알기까지 얼마나 많은 시간을 소모한 것인지..

 

여튼 위와 같이 작성한 후 Update로 돌려보니 잘 작동한다.

스크립트를 오브젝트에 넣고 inspector창에 angle 값을 입력하면 값만큼만 잘 움직인다..

 

아주 간단한 업무였지만 스크립트를 작성하는 것은 아직 어려운 일이다 ㅠ