[150714 박성국] 유니티 monobehaviour 이해하기
TRANSCRIPT
: MonoBehaviour {
Mono정의
• Mono 는 .Net 프레임워크 (framework) 의오픈소스개발플랫폼으로서 , 크로스 -플랫폼 (cross-platform)
어플리케이션의개발을지원한다 . C# 과 CLI(Common Language Infrastructure) 에기반을두고있다 .
Unity 와 Mono
• 유니티 (Unity) 스크립팅시스템 (scripting system) 의기반이다 .
• .Net 에기반하지만다른여러프로그래밍언어들을지원하는 .NET 과달리 C#, Boo, Javascript 만을지원한다 .
3
Mono 의구성요소
• C# 컴파일러 (compiler): Mono 의 C# 컴파일러는 C# 1.0, 2.0, 3.0, 4.0, 5.0 (ECMA) 을지원한다 .
• Mono 런타임 (Runtime): ECMA 표준 CLI 를구현한런타임으로서 JIT(Just-in-Time) 컴파일러 , AOT(Ahead-
of-Time) 컴파일러 , 라이브러리로더 (library loader), 가비지컬렉터 (garbage collector), 스레딩시스템
(threading system), 상호운용성 (interoperability) 기능을제공한다 .
• 이외에도 Mono 는 .Net 과호환되는 Base Class Library 는물론 Mono 만의 Mono Class Library 를제공한다 .
Scripting LangaugeScripting Language
• 스크립팅언어 (scripting language) 또는스크립트언어 (script language), 또는확장언어 (extension language)
는하나이상의어플리케이션에서스크립트 (script) 를지원하는프로그래밍의부분집합 (subset)이다 .
Script
• 스크립트 (Scripts) 는흔히어플리케이션의코어코드 (core code) 와는별개의언어로서최종사용자에의해
작성되거나최소한으로수정되는 (least modified) 프로그램이다 . 스크립트는대개소스코드 (source code) 나
바이트코드 (bytecode) 로부터해석되며 , 이는어플리케이션이기계어 (native machine code) 나중간언어
(intermediate) 로컴파일 (compiled) 되는것과구분된다 .
4
Summary
• 스크립팅언어 (scripting language) 인지아닌지를결정하는것은언어그자체가아니라그언어가사용되는
환경이다 . C 인터프리터 (interpreter) 를스크립팅언어로사용할수도있고 , JavaScript 를기계어단위로
컴파일하고실행파일로사용할수도있는것이다 . 즉 , 스크립팅언어는언어가놓인환경에따라정의된다 .
: Behaviour {
Unity 의클래스 : ScriptScript as a class
• 하나의스크립트 (script) 는 Unity 에서하나의클래스 (class)이다 .
• 클래스란속성 (properties), 동작 (actions) 들을클래스의이름으로묶은데이터타입 (data type)이다 .
• Unity 에서하나의스크립트는각각속성 (properties) 또는변수 (variables), 그리고명령 (instructions) 또는
기능 (functions) 을가지며사용자는원하는순간에해당스크립트를호출할수있는것이다 .Behaviour
• 모든스크립트는또한 Behaviour Component이다 .
• Behaviour 는활성화 (enable) 하고비활성화 (disable) 할수있는 Component이다 .
• 간단히말해 , Behaviour 는껐다켰다할수있는동작 (behavior)이며 , 이는캐릭터의동작이될수도있고 ,
환경이될수도있고 , 게임내흐름을제어하는프로그램자체가될수도있다 .
6
Component
• Component 는 GameObject 에부착되는 (attached) 모든것들이상속받는기반클래스이다 .
• 즉 , Component 는 GameObject 가가질수있는요소 (component) 라고볼수있으며 , 하나의스크립트는
Behaviour 이면서 Component 이기때문에는 GameObject 에부착되어그동작을정의할수있는것이다 .
: MonoBehaviour {
MonoBehaviour정의
• Unity 의모든스크립트 (script) 가상속받는클래스 .
• 미리만들어둔 (built-in) Behavior 클래스이자스크립트명령 (scripting instruction) 들의집합 .
8
목적
• 사용자가 Unity 엔진의작동방식을이해하지못하더라도코드를작성할수있도록이미만들어진 (built-in)
Behaviour 클래스 , 즉 , 사용자가쉽게호출할수있는스크립트명령 (scripting instruction) 들의집합을
제공하는것 .
Callback
• 스크립트는게임내내 Unity 엔진에의해호출 (invoke) 되는 callback 함수들을갖게된다 .
MonoBehaviour 상속구조 9
MonoBehaviour 의메소드Reset
• Reset 은스크립트의프로퍼티 (property) 를초기화하기위해호출되며 , 스크립트가오브젝트 (object) 에
최초로부착 (attached) 되었을때와 Reset 커맨드 (command) 가사용된경우에호출된다 .
Awake
• 씬 (scene) 이시작하면호출된다 . 씬내부의각객체 (object) 당한번호출된다 .
• 활성화 / 비활성화와관계없이스크립트의인스턴스내에서단한번호출된다 .
• 언제나모든 Start 함수이전에호출되며 , prefab 이인스턴스된직후에호출된다 .
• 씬이시작할때 GameObject 가비활성화상태이면 Awake 는호출되지않는다 . 즉 , GameObject 가
활성화되어있을때나부착한스크립트가별도로호출되어야만해당스크립트의 Awake 가호출된다 .
10
OnEnable
• 객체 (Object) 가활성화되어있을때만호출되며 , Object 가활성화된직후 , 즉 , MonoBehaviour 의인스턴스
직후호출된다 .
• Coroutine 으로호출될수없다 .
MonoBehaviour 의메소드Start
• 스크립트의인스턴스에걸쳐단한번만호출된다 .
• 스크립트가활성화되어있을때에만호출된다 .
Update
• MonoBehaviour 가활성화된경우매프레임 (every frame) 마다호출된다 .
11
FixedUpdate
• MonoBehaviour 가활성화된경우매고정프레임레이트프레임 (every fixed framerate frame) 마다호출된다 .
• Rigidbody 를다루는경우 Update 대신쓰인다 .
MonoBehaviour 의메소드LastUpdate
• Update 이후에호출되며 , 호출순서상다른 Update 에비해나중에호출되어야할작업들이추가된다 .
12
OnGUI
• GUI 이벤트에따라호출되는함수 .
• GUI 이벤트가발생할때마다호출되기때문에 1 프레임당여러번호출될수있다 .
Script Lifecycle Flowchart 13
Script Lifecycle Flowchart 14
Script Lifecycle Flowchart 15
Script Lifecycle Flowchart 16
Script Lifecycle Flowchart 17
Script Lifecycle Flowchart 18