이번 예제는 간단하게 3D Object인 Plane과 Sphere를 사용하였으며
Sphere는 Rigidbody가 적용되어있고 Prefab화 되어있습니다.
Ex_10 스크립트를 Ex_10_Invoke 오브젝트에 적용하였습니다.
Invoke, InvokeRepeating, CancelInvoke란?!
----------------------------------------------------------------------------------------
Invoke
Invoke 함수를 이용하면 일정한 시간 지연 후에 함수의 호출을 예약할 수 있습니다.
이를 통해 시간에 감응하는 유용한 함수 호출 시스템을 구축할 수 있습니다.
Invoke 함수는 두 개의 매개변수가 있습니다.
호출하고 싶은 메소드의 이름에 해당하는 문자열과 초 단위로 표시되는 지연 시간의 길이입니다.
Invoke 함수를 사용할 때에는 매개변수가 없는 void형 타입의 함수를 사용해야 합니다.
Invoke 함수는 함수를 1회 호출할 때 유용합니다
----------------------------------------------------------------------------------------
InvokeRepeating
InvokeRepeating 함수를 이용하면 메소드를 반복 호출할 수 있습니다.
InvokeRepeating 함수는 3개의 매개변수가 존재하는데
첫째 둘째는 Invoke 함수와 동일하고 마지막 3번째 매개변수의 경우는
함수를 첫 호출 후 다음 호출 사이의 대기 시간을 의미합니다.
----------------------------------------------------------------------------------------
CancelInvoke
CancelInvoke 함수는 함수 호출을 중지하기 위해 사용합니다.
모든 InvokeRepeating 함수를 중지시키려면 CancelInvoke()을
특정 함수를 중지시키려면 CancelInvoke()의 괄호 안에 특정 함수의 이름을 적으면 됩니다.
----------------------------------------------------------------------------------------
그렇다면 이 함수를 어떻게 사용하였을지 일단 실행 화면 먼저 보도록 하겠습니다.
좌: Invoke, 우: InvokeRepeating
Invoke 함수와 InvokeRepeating 함수를 동시에 보실 수가 있습니다.
Invoke 함수를 통해 Sphere을 한번 생성하고
InvokeRepeating 함수를 통해 Sphere을 지속적으로 생성하는 모습입니다.
이를 코드로 보면
코드를 보시면
makeSphere_Invoke() 함수의 경우 Z 값을 난수로 두어 Sphere을 생성하고
makeSphere_InvokeRepeating() 함수의 경우도 Z 값을 난수로 두어 Sphere을 생성합니다.
다만 X 값을 다르게 하여 게임 뷰 상에서 보기 좋게 하였습니다.
Start() 함수를 보시면 Invoke 함수와 InvokeRepeating 함수를 보실 수가 있습니다.
Invoke 함수의 경우 makeSphere_Invoke 함수를 2초 뒤에 실행
InvokeRepeating 함수의 경우 makeSphere_InvokeRepeating 함수를
2초 뒤에 실행하고 그 뒤로 1초에 한 번씩 함수를 호출 하라
정도로 보시면 되겠습니다.
그리고 여 기 서 ! Instantiate의 매개변수 중 회전 값 부분을 보시면
transform.rotation과 Quaternion.identity을 보셨을 텐데요!
여기서 Quaternion.identity은 생소하실 수도 있겠습니다.
-------------------------------------------------------------------------------------------
수학에서 X에 Y를 곱했을 때 결과가 X라면 Y를 identity라고 부릅니다.
일반적인 수학에서 identity는 1입니다.
Quaternion은 물체의 회전을 표현하는데 사용되는데
Quaternion X 와 Quaternion Y를 곱했을 때 나오는 값이 X라면 Y는 identity입니다.
어쨌든 간에, 유니티에서 보통 사용하는 목적은 회전을 기초 값으로 초기화시키는 것입니다
ex)
transform.rotation = Quaternion.identity
라고 하면 모든 축의 회전 값이 0으로 설정됩니다.
identity 가 의미하는 회전 값이 0이라서요.
Quaternion의 곱은 두 회전을 의미하는데,
X축으로 30도 와 Y 축으로 30도를 돌리면 결과는 그 두 회전을 합친 Quaternion 이 되지만,
어느 회전이든 identify를 곱하면 곱하기 전의 값과 같으니까요.
https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10403&docId=301537863&qb=UXVhdGVybmlvbi5pZGVudGl0eQ==&enc=utf8§ion=kin&rank=1&search_sort=0&spq=0&pid=Tzx1swpySEsssblc3I0ssssssWC-358601&sid=ug7IJPGEwglMjKhkY0%2BHSg%3D%3D
-> 네이버에 지식인에 멋진 설명이 있어서 가져왔습니댜!
-------------------------------------------------------------------------------------------
아주 기초적인 내용이지만 게임을 제작할 때 기본적으로 사용하게 되는
좋은 함수들이니 잘 알아두면 좋을 것 같습니다!!
위 내용은
https://unity3d.com/kr/learn/tutorials/topics/scripting/invoke?playlist=17117
을 참고하였습니다.
'Unity > 기초 예제' 카테고리의 다른 글
유니티 Joints, Fixed Joint, Spring Joint 간단한 예제 유니티 기초 (0) | 2021.05.31 |
---|---|
유니티 Physics Materials 물리 재질 간단한 예제 유니티 기초 (0) | 2021.05.26 |
유니티 Instantiate 프리팹 복제 Random.Range 난수생성 랜덤값 간단한 예제 유니티 기초 (0) | 2021.05.24 |
유니티 Destroy 오브젝트 제거 간단한 예제 유니티 기초 (0) | 2021.05.20 |
유니티 Trigger을 이용한 오브젝트 공중 부양 간단한 예제 유니티 기초 (0) | 2021.05.12 |