[ Unity3D 0401]
Scripts 2 (MonoBehavior 심화)
Behavior 상속
Variables
Overrideable Function 1 - 함수 호출 순서상
void OnAwake() : GameObject가 Active될 때 무조건 한번 호출됨
void OnEnable() : Script가 활성화될 때 호출(비활성화 했다 다시 활성화해서 호출될 수도 있음)
void OnStart() : GameObject가 Active이고 Script가 활성화 될 때 한번 호출
void Update() : GameObject를 (파이프 라인상에서)3D 공간상에 배치하기 이전에 수행되는 함수
void FixedUpdate() :
Edit >> project setting >> Time에서 호출되는 Time(Fixed Timestep)을 조절할 수 있음
rigidbody.AddForce() 같은 물리 관련 함수들을 쓸 때 주로 사용
void LateUpdate() :
FixedUpdate나 Update가 처리된 이후에 그 값들을 가지고 처리해야 하는 경우가 있을 때 사용
GameObject를 (파이프 라인상에서)3D 공간상에 배치가 다 끝난 이후(Update이후)에 수행되는 함수
카메라 배치와 관련된 명령에 주로 사용
void OnWillRenderObject() : 이제 랜더링 될 준비가 다 된 상태, Mesh Renderer나 Skenned Renderer가 있을 경우에만 해당 함수가 유효
void OnGUI() :
void OnDisable() : Script가 비활성화될 때 호출
void OnDestroy() : GameObject가 파괴될 때 호출
Overrideable Function 2 - 나머지 사용할 수 있는 가상함수들
OnMouseEnter : Collider가 없으면 작동하지 않음
GUIElement : GameObject >> Create Other >> GUI Texture 같은 것들
OnMosueOver/Exit/Down/Up/Darg
OnLevelWasLoaded : Scene간 이동이 이루어질 때 발생하는 함수
OnDrawGizmosSelected : 객체가 선택될 때만 그려지는 Gizmo
OnDrawGizmos : 객체가 선택되지 않아도 항상 그려지는 Gizmo
OnApplicationPause : 애플리케이션이 멈출때 호출되는 함수
OnApplicaionFocus : 애플리케이션이 포커스를 잃거나 얻었을 때
OnApplicationQuit : 애플리케이션이 끝났을 때
Overrideable Function 3 - Renderging Execution Order
OnPreCull : culling 하기전 호출되는 함수
OnBecameVisible : 현재 씬 내에서 여러 카메라중에 하나에라도 이 스크립트를 내장한 객체가 비춰질 때 활성화되는 함수
필요이상의 스크립의 함수들 (Update 등)을 사용하고자 할 때 사용하면 좋음
주의 : 개발시 Scene View를 보여주는 카메라(내장 카메라)가 있기 때문에 테스트를 해볼 시에는 Scene 자체에서도 보이지 않게 해야 함
OnBecameInvisible : 위와 반대로 등장할 때 발생하는 함수
OnWillRederObject : 이제 랜더링 될 준비가 다 된 상태, Mesh Renderer나 Skenned Renderer가 있을 경우에만 해당 함수가 유효
OnPreRender : 특정 카메라
OnRenderObject : 3D
OnPostRender : 3D Data가 랜더링된 이후
OnRenderImage(Pro Only) : screen Image로 보내기 전에 호출되는 함수
2D 이미지를 기반으로 이미지 프로세싱이 가능한 곳
OnGUI()
OnDrawGizmos :
yield
yield WaitForSecond
실습 : 함수 호출 순서 실습
Layer 및 Tag 생성 방법
Layer 31개 가능
Tag는 만들 수 있는 만큼
[ Inspector에서의 Camera ]
Clear Flags
Clear 영역(객체가 있지 않은 영역)에 대한 설정을 하는 것
Skybox
Solid Color
Background에서 지정된 색깔을 보여줌
Depth Only
Depth에 따른 색깔을 보여줌(가장 낮은 Depth를 가지고 있는 카메라의 Clear Flag를 따름)
UI의 경우 Depth Only가 적당
Don't Clear
Background
Culling Mask
특정한 Layer에 있는 객체들을 Cut off시킴
Layer에 따라 게임 오브젝트들을 안보이게 함
Projection
Field of View
Clipping Planes
Normalized View Port Rect
Viewport의 크기 및 위치를 지정해서 Game View에서 보이도록 함
여러 카메라에서의 결과물을 보여주게 됨
Depth : 카메라의 랜더링 순서라고 보면 됨
Rendering Path
Use Player Settings : Player Settings에서 지정된 방식을 따름
Vertex Lit
Forward
Defferd Lighting
Target Texture : Render Texture를 만드는 데 사용됨
Game View에 출력하는 것이 아니라 Texture를 만드는 것
거울 처리 등에서 사용
[ Camera 설치 ]
기본적으론 Main Camera가 주어지며, 여러 개의 Camera를 설치할 수 있음
GameObject >> Create Other >> Camera
추가되는 기타 Components
Flare Layer : Lens Flare를 표현하기 위한 Layer
Lens Flare : 태양을 바라볼 때, 태양에서 6각형 모양의 빛 이미지가 날라오는 거
Component >> Effects >> Lens Flare
GUILayer : GUIText 등 을 표현하기 위한 Layer
GameObject>>Create Other >> GUIText / GUI Texture
Audio Listener : 한씬에는 한개의 Audio Listener가 있어야 함
두개 이상의 카메라를 설치하는 경우 하나는 삭제해야 함
[ Camera Class ]
Behaviour를 상속
Variables
pixelRect : 스크린에 표현되는 픽셀의 크기(해상도)
Function
WorldToScreenPoint
WorldToViewportPoint
ViewportToWorldPoint
ScreenToWorldPoint
ScreenToViewportPoint
ViewportToScreenPoint
World : 3차원 공간상의 좌표계
Screen : 2D Screen 좌표계
Viewport : Screen 좌표를 normalize(0~1)한 좌표계
ViewportPointToRay : Viewport 좌표를 기반으로 Ray를 리턴
ScreenPointToRay : 스크린 좌표를 기반으로 Ray를 리턴
Class Variables
main : MainCamera를 얻어옴
Scene 관리 및 빌드
Scene 생성
File >> New Scene
Scene 전환
Application.LoadLevel() : Scene을 전환하는 함수
File >> Build Setting ...
빌드하고자 하는 씬들을 포함시켜야 함
실습 : 실습으로 Scene 전환 이해하기
[ Unity3D 0402]
[ 2D Mario Clone - Ch03 ]
Part 7: Controller Code Prep
[25:40] 캐릭터가 여러 Input에 따라 처리해야할 속성들을 열거하고 그 상태에 따라 필요한 변수 생성
walkSpeed / runSpeed / fallSpeed / walkJump / crouchJump / gravity / startPos / moveDirection
<Source>playerControls0701
Part 8: Controller Idle, Walk, Run
[21:05] idle/walk/run상태에 따른 처리
idle 애니메이션 처리
캐릭터 방향 처리(with 애니메이션)
Walk / Run 처리(with 애니메이션)
<Source>playerControls0802
Part 9: Controller Crouch
[08:25] Crouch 처리
<Source>playerControls0901
Part 10: Controller Jump and Fall
[07:35] Crouch Jump 처리
여기까지 Stand Jump / Walk Jump / Run Jump / Crouch Jump 에 대한 처리를 함
[30:46][32:06][34:26][34:24] Jump 종류에 따라 Velocity.x 값을 조정해야 함(isGround 상태가 아닐때)
Jump의 종류에 따라 달려가는 속도의 차이를 보이도록 하고 있음
<Sourece> playerControls1001
Part 11: Controller Limit Jump Height
블락을 캐릭터 위에 만듬(충돌 체크 처리를 위해)
[02:44] Controller.collisionFlags >> CharacterController(Script Reference) >> CollsionFlags
[04:47] Controller.collisionFlags 처리
캐릭터 머리가 블락에 부딪혔는지 검사(CollisionFlags.Above)하고 있는지를 테스트
[06:06][09:49] 충돌 이후 처리
충돌이 일어나면 Controller.Move가 적당한 처리를 하지만, 여기서는 바로 fall이 되도록 하고 있음
<Sourece>playerControls1101
Part 12: Controller Jump Sound and Particle Effects
캐릭터 : 동작에 따른 사운드 및 파티클 생성
[07:09] 사운드 관련 변수 생성 및 PlaySound 구현 >> AudioClip.length(Script Reference)
[08:06] mario_jump / mario_noise_after_jump_on_enemy 사운드 추가
[09:52] PlaySound() 추가 / player에 Component >> Sound Resource 가 들어갔는지 확인
C# 에서의 처리 - Coroutine & Yield
IEnumerator PlaySound( ...) {...}
StartCoroutine(PlaySound(...));
<Source>playerControls1201
[11:35] [13:49] ParticleJump 변수 추가[line24/50] / 파티클 위치 설정[line107]
[15:18][17:42] Prefab_Particle_Smoke 연결 / Particle 생성
<Source>playerControls1202
Part 13: Controller Code Conclusion
지금까지 배운 캐릭터 콘트롤 결론
전체적으로 지금까지 한소스(playerControls)를 볼 수 있음