[ Script 기초 ]
Unity Reference - http://docs.unity3d.com/Documentation/ScriptReference/30_search.html?q=MonoBehavior
Component <- Behavior <- MonoBehavior
생성된 Script이름과 클래스이름은 일치해야 함
GameObject에 Script(Component) 삽입하여 사용
Overridable Functions
void Start() : 초기화를 위해 오직 한번만 실행되는 함수
void Update() : 매 프레임마다 실행되는 함수
Start/Update 함수는 C# Script 파일을 만들 때, Default로 주어지는 함수
두 함수 모두 사용하지 않아도 되는 가상 함수임
Debug.Log(".....") :
Unity Console 창에 문자를 출력하는 함수
Debugging 용으로 적절하게 사용할 수 있음
[ Script 심화 ]
Overridable Functions 1 - 함수 호출 순서
void Awake() : GameObject가 Active될 때 무조건 한번 호출됨
void OnEnable() : Script가 활성화될 때 호출(비활성화 되었다 다시 활성화되면 다시 호출될 수 있음)
void Start() : GameObject가 Active이고 Script가 활성화(OnEnable인 상태) 될 때 한번만 호출 (즉, 스크립트가 Disable이면 Start()는 호출 안됨) , 또한 Start()가 한번 호출된 상태이면, 호출되지 않음
void Update() : GameObject를 (파이프 라인상에서)3D 공간상에 배치하기 이전에 수행되는 함수
void FixedUpdate() :
Edit >> project setting >> Time에서 호출되는 Time(Fixed Timestep)을 조절할 수 있음
rigidbody.AddForce() 같은 물리 관련 함수들을 쓸 때 주로 사용
void LateUpdate() :
FixedUpdate나 Update가 처리된 이후에 그 값들을 가지고 처리해야 하는 경우가 있을 때 사용
GameObject를 (파이프 라인상에서)3D 공간상에 배치가 다 끝난 이후(Update이후)에 수행되는 함수
카메라 배치와 관련된 명령에 주로 사용
void OnDestroy() : GameObject가 파괴될 때 호출
Overridable Functions 2 - 기타 사용할 수 있는 가상함수들
OnMouseEnter : Collider가 없으면 작동하지 않음
GUIElement : GameObject >> Create Other >> GUI Texture 같은 것들
OnMosueOver/Exit/Down/Up/Darg
OnLevelWasLoaded : Scene간 이동이 이루어질 때 발생하는 함수
OnDrawGizmosSelected : 객체가 선택될 때만 그려지는 Gizmo
OnDrawGizmos : 객체가 선택되지 않아도 항상 그려지는 Gizmo
OnApplicationPause : 애플리케이션이 멈출때 호출되는 함수
OnApplicaionFocus : 애플리케이션이 포커스를 잃거나 얻었을 때
OnApplicationQuit : 애플리케이션이 끝났을 때
void Reset() : Editor에서 사용할 수 있는 함수로 Script의 "Reset" 명령에서 수행되는 함수
Editor 창에서 GameObject에 Script를 삽입할 때도 호출됨
InVoke : 지정된 시간이 경과된 이후에 설정된 함수를 호출함
InVokeRepeating : 지정된 시간에 호출된 이후 반복적(repeatRate)으로 호출
StartCoroutine :
Overrideable Function 3 - Rendering Execution Order
OnPreCull : culling 하기전 호출되는 함수
OnBecameVisible : 현재 씬 내에서 여러 카메라중에 하나에라도 이 스크립트를 내장한 객체가 비춰질 때 활성화되는 함수
필요이상의 스크립의 함수들 (Update 등)을 사용하고자 할 때 사용하면 좋음
주의 : 개발시 Scene View를 보여주는 카메라(내장 카메라)가 있기 때문에 테스트를 해볼 시에는 Scene 자체에서도 보이지 않게 해야 함
OnBecameInvisible : 위와 반대로 등장할 때 발생하는 함수
OnWillRederObject : 이제 랜더링 될 준비가 다 된 상태, Mesh Renderer나 Skenned Renderer가 있을 경우에만 해당 함수가 유효
카메라마다 한번씩 호출
OnPreRender : 특정 카메라(카메라 마다 호출됨)에 랜더링될 준비가 되었을 때 호출
OnRenderObject : 정규 랜더링 과정이 끝 난 이후에 호출되며, 이 곳에서 GL등의 Graphics 특성에 따른 기능을 이용할 수 있음
OnPostRender : 랜더링 과정이 수행된 이후에 호출
OnRenderImage(Pro Only) : screen Image로 보내기 전에 호출되는 함수
2D 이미지를 기반으로 이미지 프로세싱이 가능한 곳
void OnGUI() : 유니티에서 제공하는 UI(Button 등)를 사용하는 곳
3차원상의 랜더링을 마친 이후에 별도로 UI를 위해 별도로 랜더링을 하기 때문에 GUI 관련 함수들은 여기서 호출해야 함
void OnDisable() : Script가 비활성화될 때 호출
OnDrawGizmos :
yield
yield WaitForSecond
[ Script Execution Order ]
Execution Oder of Event Functions
[ C# 문법 관련 ]
C++과 다른 C#
기본적 특징
메모리 생성 후 직접 해제하지 않아도 됨
메모리 단편화를 신경 쓰지 않아도 됨
이미 삭제된 메모리 접근에 대해 보호
메모리 침범으로 부터 안전
자유로운 자료형 cast 방지
할당된 배열 크기보다 큰 인덱스 접근 불가
null 참조 등에 따른 강력한 예외처리
알아둘 부분
가비지 컬렉션(Garbage Collection)
더 이상 사용되지 않는 메모리는 알아서 해제해 줌
Reference Type과 Value Type
복사되는 메모리와 주소를 참조하는 객체를 명확히 구분
Reference Type :
참조 타입, 인스턴스의 주소 값만 참조
Heap 영역에 메모리 할당
예> class 등으로 생성된 Instance
Value Type
값 타입, 데이터 크기만큼 실제 메모리 복사
Stack 영역에 메모리 할당
예> int, float 등의 기본 타입과 구조체
가비지 컬렉션
GC.Collect()
항당된 메모리들 중에 가비지를 골라서 메모리를 해제
CPU 장시간 점유, GC는 큰 비용이 드는 작업
가비지 컬렉션 시점
메모리를 더 이상 할당 할 수 없을 때
가비지가 어느 정도 쌓이면 스스로 수행
System.GC.Collect() 호출시
[참조 ] - http://www.unitykoreawiki.com/index.php?n=KrMain.UnderstandingAutomaticMemoryManagement
String.Format() 관련
[ C# 활용 ]
C#에서의 Interface 사용법
C#에서 Sigleton 사용법
http://nkslyj.blog.me/150135945385
어디서나 사운드 소스를 불러와서 실행할 수 있도록 하는 싱글톤 스크립트 소스
Unity3D에서 C# Script로 FSM(Finite State Machine) 구현
Script 사용자들이 알아야 할 내용(일반적인 게임 스크립트 구조 / Coroutine / FixedUpdate)
http://www.slideshare.net/sasmaster/unity3d-programming-5725801
[ Unity C# Reference 관련 ]