일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 장고
- 도과 테스트
- 파이썬 패키지 설치
- Achievement unity
- 도전과제 unity
- 스팀 도과 Reset
- 연산자
- 스팀 도전과제 Reset
- 회원가입
- 인덱싱
- error
- nodejs
- 오프라인 환경
- Python
- Steam Achievement Reset
- 파이썬
- JavaScript
- sqlite3
- #데브런 #노코드 #노코드게임제작 #데브런와디즈 #ai게임제작
- 모듈
- django
- 테이블 생성
- header
- 상속
- 슬라이싱
- Unity
- 데브런 #노코드게임제작 #데브런와디즈 #AI게임제작
- 튜플 단일 요소
- HTML
- 파이썬 웹 개발
- Today
- Total
개발성문
탱크(Tank)로 실험한 회전, euler, Mathf.Clamp 본문
위의 동영상은 탱크 모양의 오브젝트를 만들어서 포탑 부분 과 포신 부분의 회전하도록 하여
포탄 발사를 구현해 본 것입니다.
이번 포스팅에서는 포탑, 포신을 회전 한 것에 대해 정리해 보려고 합니다.
지난 포스팅에서 사인과 코사인, Radian에 관련해 원 운동을 공부했었는데요.
그때 잠시 설명 했었던 60분법, 영어로는 Degree 라는 명칭이었죠.
Degree는 Unity Inspector 창의 Transform Rotation 에서 사용한다는 설명도 했었죠.
여기서 다루어 보게 될 eulerAngles(오일러 각)은 Transform의 Rotation 의 x, y, z의 각도 값 3개로 표시되고,
이를 이용에 회전을 더하게 됩니다.
이번에 다루지는 않겠지만 이 eulerAngles(오일러 각)과 함께 Quaternion(쿼터니언) 이라는 것이 Unity에서 일반적으로
회전에 사용합니다.
소스를 보도록 하죠.
turret.transform.Rotate(Vector3.up * rot * rotTurret); //포탑 회전 gun.transform.Rotate(Vector3.right * rot * rotGun); //포신 회전 Vector3 ang = gun.transform.eulerAngles; if (ang.x > 180) ang.x -= 360; ang.x = Mathf.Clamp(ang.x, -60, 5); gun.transform.eulerAngles = ang;
포탑과 포신의 회전은 Rotate에서 회전축을 기준으로 얼마만큼의 속도록 어떤 키값을 받아 회전하는지 정해주면 됩니다.
문제는 eulerAngles(오일러 각)이네요.
eulerAngles(오일러 각)에서의 회전은 x, y, z 축을 중심으로 하는데, z 는 z 축, x 와 y 는 y 축을 중심으로 순서대로
회전 합니다.
소스에서 보면 gun.transform.eulerAngles로 eulerAngles의 x, y, z 값을 Vector3 의 변수에 할당 합니다.
할당된 값에서 포신의 회전 축 ang 의 x 축의 값을 변경합니다.
여기서 주의 할 점이있는데,
eulerAngles(오일러 각)은 각 축에 해당하는 값을 개별적으로 설정하지는 않습니다.
각각 설정한 경우에 의도하지 않은 회전과 결과를 일으킬 수 있기 때문입니다.
때문에 위 소스에서 처럼 Vector3 의 ang 변수에 할당한 값으로 한번에 모든 값을 설정해야 합니다.
또 각도가 360도를 넘어버리면 값의 계산이 실패하기 때문에 값을 증가시키지 않는다고 합니다.
이 부분은 제가 더 공부를 해야 하겠습니다.
위 소스에 Mathf.Clamp() 는 매개변수로 (현재값, 최대값, 최소값) 이 3개를 가집니다.
현제값이 최대값 보다 크면 최대값을 출력해주고, 최소값 보다 작으면 최소값을 출력합니다.
지정한 범위 내의 값만 되돌려 주는 역할을 합니다.
eulerAngles 와 Quaternion 은 별도로 자세히 다뤄 볼 생각이지만 아직은 이해가 힘든 부분이 많이 있네요.
이번 포스팅은 여기서 마치도록 하겠습니다.
'공부 좀 하자 > Unity' 카테고리의 다른 글
Unity 터치 포인트 좌표에 바운스 볼 생성 (3) - Camera.ScreenPointToRay, Screen, Viewport, World (0) | 2018.04.05 |
---|---|
Unity 터치 포인트 좌표에 바운스 볼 생성 (2) - Touch (0) | 2018.04.04 |
Unity 또 하나의 충돌체크 Debug.DrawRay, Physics.Raycast 에 대해 (0) | 2018.04.02 |
Unity 스카이 박스(Sky Box) 에 대하여 (0) | 2018.03.30 |
Unity 터레인 엔진(Terrain Engine) 사용 (0) | 2018.03.30 |