-
On~ 함수
-
OnMouse~
- co-routine 으로 사용할 수 있습니다. (yield 사용 가능.)
-
OnMouseEnter
- 마우스가 처음 오브젝트 위로 올라왔을 때 호출
-
OnMouseOver
- 마우스가 오브젝트 위에 있을 경우 매 프레임마다 호출.
-
OnMouseExit
- 마우스가 처음 오브젝트 밖으로 나갔을 때 호출.
-
OnMouseDown
- 오브젝트 위에서 마우스 버튼을 눌렀을 때 호출.
-
OnMouseUp
- 오브젝트 위에서 마우스 버튼을 땠을 때 호출. 눌렀을 때의 오브젝트와 같은 오브젝트일 때만 호출됨.
-
OnMouseDrag
- 오브젝트 위에서 마우스 버튼을 누른 상태로 있을 때 매 프레임마다 호출.
-
충돌 관련 함수
-
OnTrigger~(other : Collider)
- Trigger 는 Inspector 창에서 Collider 의 Is Trigger 속성이 켜져있을 때 발생합니다.
- Trigger 가 켜져있을 때는 Collision 관련 함수는 호출되지 않습니다.
- Trigger 가 켜져있을 때는 두 오브젝트 사이에 물리 계산이 이루어지지 않습니다.
- 그래서 Trigger 는 단순한 '영역' 으로 이해하는 것이 좋습니다.
- Trigger 는 함수의 파라메터로 Collider 변수가 들어옵니다. 이것은 자신과 접촉한 오브젝트의 Collider 입니다.
-
OnCollision~(collisionInfo : Collision)
- Collision 은 두 오브젝트 중 적어도 하나가 Inspector 창에서 Rigidbody 의 Is Kinematic 속성이 꺼져있을 때 발생합니다.
- 두 오브젝트 모두 Kinematic 속성이 켜져있으면 어느 쪽이 움직여서 겹치더라도 물리 연산이 이루어지지 않기 때문에
- 충돌 함수가 호출되지 않습니다.
- Collision 은 함수의 파라메터로 Collision 변수가 들어옵니다. 이것은 접촉에 대한 여러가지 정보를 담고 있는 클래스입니다.
- 충돌이 일어나려면 두 오브젝트 모두 Collider 를 가져야 하고 둘 중 하나는 Rigidbody 를 가져야 합니다.
- Rigidbody 를 가진 쪽이 움직여서 서로 만날 경우만 이벤트가 일어납니다
- yield 사용 가능
-
~Enter
- 접촉 시작시
-
~Stay
- 접촉 중일 때 매 프레임마다
-
~Exit
- 접촉이 끝났을 때
-
속성
- relativeVelocity - 두 오브젝트의 상대 속도입니다. 충격량이라는 느낌일까요? (읽기 전용)
- rigidbody - 자신과 접촉한 Rigidbody 입니다.
- 만약 상대가 Rigidbody 가 없는 Collider 라면 이 값은 null 입니다. (읽기 전용)
- collider - 자신과 접촉한 Collider 입니다. (읽기 전용)
- transform - 자신과 접촉한 오브젝트의 Transform 정보입니다. (읽기 전용)
- gameObject - 자신과 접촉한 오브젝트입니다. (읽기 전용)
- contacts - 물리 엔진에서 연산한 접촉 포인트 정보입니다. ContactPoint 의 배열입니다.
- OnControllerColliderHit(hit:ControllerColliderHit)
- OnJointBreak(breakForce:float)
- OnParticleCollision(other:GameObject)
- OnBecameVisible / OnBecameInvisible
- OnLevelWasLoaded(level:int)
- OnEnable/OnDisable
- OnGUI
- OnApplicationPause(pause:bool)
- OnApplicationQuit
- OnDrawGizmos
- OnDrawGizmosSelected
- OnPreCull
- OnPreRender
- OnPostRender
- OnWillRenderObject
- OnRenderObject(queueIndex:int)
- OnRenderImage(sourcce:RenderTexture, destination:RenderTexture)
- OnPlayerConnected(player:NetworkPlayer)
- OnServerInitialized
- OnConnectedToServer
- OnPlayerDisconnected(player:NetworkPlayer)
- OnDisconnectedFromServer(mode:NetworkDisconnection)
- OnFailedToConnect(error:NetworkConnectionError)
- OnFailedToConnectToMasterServer(error:NetworkConnectionError)
- OnMasterServerEvent(msEvent:MasterServerEvent)
- OnNetworkInstantiate(info:NetworkMessageInfo)
- OnSerializeNetworkView(stream:BitStream, info:NetworkMessageInfo)
- Rendering
- Network
-
On이 붙지 않는 함수
-
Update
-
매 프레임마다 호출
- 스크립트가 켜져 있을 때만 호출
- 지나간 시간 : Time.deltaTime
-
LateUpdate
-
매 프레임마다 호출
- 스크립트가 켜져 있을 때만 호출
- 모든 Update 호출 후에 호출됨
-
FixedUpdate
- Rigidbody를 다룰 때 Update 대신에 사용
- 고정 프레임(50fps)으로 다른 스레드에서 동작
- function FixedUpdate()
{
rigidbody.AddForce(Vector3.up);
}
-
Awake
- 스크립트 객체가 로딩될 때 호출
- 게임이 시작하기 전에 변수나 게임 상태를 초기화하기 위해 사용
- 스크립트 객체의 라이프타임 동안 단 한번만 호출
-
모든 오브젝트가 초기화된 후 호출
- 다른 오브젝트에 메시지를 날리거나 GameObject.FindWithTag 같은 함수를 안전하게 사용 가능
- Awake 함수에서 스크립트를 레퍼런싱한 후, Start 함수에서 필요한 정보를 넘겨받거나 넘겨줄 수 있음
-
언제나 Start 함수 전에 호출
- 스크립트의 초기화 순서를 정할 수 있게 함
- coroutine 으로 동작할 수 없음
-
Start
- Update 함수가 처음 호출될 때 Update 함수 직전에 호출
- 스크립트가 동작하는 라이프타임 동안 단 한번만 호출
-
Awake 함수와의 차이
-
Start 함수는 스크립트가 켜져있을 때만 호출
- 정말로 필요할 때까지 초기화 코드 실행을 연기할 수 있음
-
Awake 함수는 언제나 Start 함수가 호출되기 전에 호출
- 스크립트의 초기화 순서를 정할 수 있음
- 모든 스크립트 객체의 Awake 함수가 호출된 후에 호출
-
Reset
- 기본값으로 리셋
- 유저가 Inspector의 context menu 에서 Reset 버튼을 눌렀을 때나, 게임 오브젝트에 스크립트를 처음 붙였을 때 호출됩니다. 이 함수는 에디터 모드에서만 호출
- Inspector에 초기 값을 설정할 때 가장 자주 사용하는 함수
-
순서도
-
'A, B, C 라는 게임 오브젝트가 있고, A, B 에 스크립트가 하나씩 붙어있습니다. B는 스크립트가 비활성화 되어 있습니다.'
- 조건
- 1. 게임이 로딩되면 우선 A, B, C 모든 게임 오브젝트가 초기화 됩니다.
- 2. 이후 A, B 에 붙어있는 스크립트의 Awake 함수가 호출됩니다.
- (이 상황에서도 이미 A, B, C 게임 오브젝트와 구성 컴포넌트는 모두 메모리에 들어있는 상태이므로 null 체크
- 이런 거 없이 안심하고 데이터 전달 등을 할 수 있습니다.)
- 3. 이후 A 의 Update 함수가 호출되려고 합니다. B 는 스크립트가 비활성화 상태이기 때문에 동작하지 않습니다.
- 4. A 의 Update 함수가 호출되려고 하는데, 이번이 첫번째 호출이네요! 우선 Start 가 호출됩니다.
- 5. A 의 Start 가 호출되었으니 Update 가 호출됩니다. 앞으로 매 프레임마다 호출되겠네요.
- 6. A 의 LateUpdate 도 호출됩니다. 역시 앞으로 매 프레임마다 호출됩니다.
- - 여기서 B의 스크립트를 활성화시켰습니다.
- 7. B 의 Update 함수도 호출되기 시작합니다. 제일 처음 Update 호출될 때 역시 Start 가 우선 한 번 호출됩니다.
- 8. A, B 의 Update 함수가 모두 호출된 후 A, B 의 LateUpdate 가 호출됩니다.
- - 여기서 C에 스크립트 컴포넌트를 붙였습니다.
- 9. C 에 스크립트가 붙자 C의 Awake 가 호출됩니다.
- 10. A, B, C 의 Update 차례. C의 경우 처음 Update 호출이라서 그전에 Start 함수가 우선 호출됩니다.
- 11. A, B, C 의 LateUpdate 차례. A, B, C 의 모든 Update가 끝나면 호출되기 시작합니다.
-
MonoBehaviour
-
클래스 정의
- 모든 스크립트가 상속받는 기본 클래스
-
MonoBehaviour -> Behaviour -> Component
- 상속받은 클래스 스크립트는 Component로 등록 가능
-
Behaviour 클래스는 enable/disable 가능
- 이 때문에 스크립트 컴포넌트를 켜고 끌 수 있음