ํ๋กํผํฐ : ์์ฑ
๋ธ๋ฆฌ๊ฒ์ดํธ : ๋๋ฆฌ์
ํ๋ผ๋ฏธํฐ : ๋งค๊ฐ๋ณ์
์ ๋ค๋ฆญ : ์ผ๋ฐํ
ํ๋ : ๋ณ์
์ ๋ํฐ ์ฝ๋ฉ ๋ฌธ๋ฒ ๊ท์น๋ณ์๋ช ์์๋ณผ ์ ์๊ฒ ์ง๊ธฐ
ํ์ผ ์ด๋ฆ์ ์ธ๋๋ฐ ์ด์ฉํด์ ๋ถ๋ฅ ๋ฐ ์ ๋ ฌ์ ๋ณด๊ธฐ ์ฝ๊ฒ ํ๊ธฐ ex) Sprite_Tree_Pine_Small_2
ํด๋์ค ์ด๋ฆ, ์คํฌ๋ฆฝํธ ์ด๋ฆ์ ๋๋ฌธ์ ์์
๋ฉ์๋๋ ๋๋ฌธ์ ์์
ํด๋์ค ๋ด public, protected ๋ณ์, ํ๋กํผํฐ๋ ์นด๋ฉํ์
ํด๋์ค ๋ด private ๋ณ์๋ _์ธ๋๋ฐ ์์ ์นด๋ฉํ์
๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์นด๋ฉํ์
๋ธ๋ฆฌ๊ฒ์ดํธ ์ด๋ฆ ๋ค์ Callback ๋ถ์ด๊ธฐ
์ด๋ฒคํธ๋ ์ก์ ์์ On ๋ถ์ด๊ธฐ ex) OnDeath
object-Component-Behaviour-MonoBehaviour
object : System.Object๊ฐ ์๋๋ผ UnityEngine.Object์. ์ธ์คํํฐ ๋๋๊ทธ ์นธ์ ์ง์ด๋ฃ์ ์ ์์
Component : ์ปดํฌ๋ํธ, GameObject์ ๋ถ์ ์ ์์. ๋ถ์ด์๋ GameObject์ ์ ๊ทผ ๋ฐ Message/GetComponent ์ต์ ๋ค ์ฌ์ฉ๊ฐ๋ฅ
Behaviour : able/disable ๋ ์ ์๋ ์ปดํฌ๋ํธ
MonoBehaviour : ์ปดํฌ๋ํธ๋ก์จ์ ์คํฌ๋ฆฝํธ๊ฐ ์์ํ๋ ํด๋์ค. Awake(), Start(), Update() ๋ฑ์ด ์๋ํจ
Awake() vs Start()Awake() : ์คํฌ๋ฆฝํธ ์ธ์คํด์ค๊ฐ ๋ก๋๋ ๋ ๋ฐ๋, ์คํฌ๋ฆฝํธ ์ปดํฌ๋ํธ๊ฐ disabled์ฌ๋ ๋ฐ๋, ๊ฒ์์ค๋ธ์ ํธ๊ฐ inactive๋ฉด active๋ ๋ ๋ฐ๋. ์ฌ์ ์๋ ๋ชจ๋ ๊ฒ์์ค๋ธ์ ํธ๊ฐ ์ด๊ธฐํ ๋ ๋ค์ ๋ฐ๋
Start() : ์คํฌ๋ฆฝํธ๊ฐ enabled๋ ํ๋ ์์ ๋ฐ๋, Update()๊ฐ ๋๊ธฐ ์ง์ ์ ๋ฐ๋
UnityEvent vs System.EventSystem.Event๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ์ฒด์ธ์ ์๋ฆฌ๋ฅผ ์ด์ฉํ ๊ฑฐ๊ณ
UnityEvent๋ ๋ฑ๋ก๋ Action๋ค์ ์ฐ์์ผ๋ก ์คํ์ํค๋ ๊ฒ์ด๋ค
UnityEvent๋ ์ธ์คํํฐ์์ ์ฝ๊ฒ ํธ์งํ ์ ์๋ค.
string ๊ด๋ จ ์ ์ฉํ๊ฒ๋ค@ : ํน๋ฌธ ์์ด ๋ฌธ์ ๊ทธ๋๋ก ์ฐ๊ธฐ. ๋ฐฑ์ฌ๋์๊ฐ์๊ฒ๋ค ์ถ๊ฐ ์ ์ฐจ ์์ด ๋ฌธ์๋ก ์ธ ์ ์๊ฒ ํด์ค
ย ย ย ex)(@"C:\documents\files")
$ : ๋ฌธ์์ด ๋ณด๊ฐ. ex)("Hello, {0}! Today is {1}!", name, day)
ย ย ย โ ($"Hello, {name}! Today is {day}!")
public ํ๋ vs ์๋ ๊ตฌํ ํ๋กํผํฐ๋ฆฌํ๋ ์ ์์ ๋ค๋ฅด๊ฒ ๊ตฌ๋
์๋ ๊ตฌํ ํ๋กํผํฐ๋ ์คํ๋ ๋ ๋ด๋ถ์ ์ผ๋ก get๋ฉ์๋ set๋ฉ์๋ ๋ค ๋ง๋ค๊ธฐ ๋๋ฌธ์ public์ ๋นํด ๋๋ฆผ
๊ณต๋ณ์ฑ๊ณผ ๋ฐ๊ณต๋ณ์ฑํ๋ณํ์ด ๋ง์ด ์ฐ์ด๊ฒ ๋๋ฉด์ ์ฌ๋ฌ ์ํฉ์์ ์ด๋ฐ ํ๋ณํ์ ํ์ฉํ๊ณ ์ ๋ฐ ํ๋ณํ์ ๋ง๊ณ ํด์ผํ ๋
์ด๋ฅผ ๊ณต๋ณ์ฑ๊ณผ ๋ฐ๊ณต๋ณ์ฑ์ด๋ผ๋ ํค์๋๋ก ์ ๋ฆฌ, ๋ถ๋ฅํจ
์ด๋ฅผ ์ฝ๋์์ in๊ณผ out ์ ๋ค๋ฆญ ํ์ ์๋ก ์์ํจ
๊ณต๋ณ์ฑ : out, ์์ ๊ณผ ์์์ผ๋ก๋ง ํ๋ณํ ๊ฐ๋ฅ, ์ถ๋ ฅ(๋ฐํํ, get ๋ฑ)์ ์ฌ์ฉ
๋ฐ๊ณต๋ณ์ฑ : in, ์์ ๊ณผ ๋ถ๋ชจ๋ก๋ง ํ๋ณํ ๊ฐ๋ฅ, ์ ๋ ฅ(๋งค๊ฐ๋ณ์, set ๋ฑ)์ ์ฌ์ฉ
๋งค๊ฐ๋ณ์ ํ์ ์ ref vs outref๋ ์ด์ ์ ํด๋น ๋ณ์๊ฐ ์ด๊ธฐํ ๋์์ด์ผ ํ์ง๋ง
out์ ์ด์ ๊ฐ์ด ์๋ ์๋ ๋ฌด์ํ๊ณ ์๊ธฐ๊ฐ ์ด๊ธฐํ์ํด
staticstatic ๋ถ์ ๋ณ์/ํจ์๋ ๊ณง๋ฐ๋ก ํด๋์ค๋ช .static๋ช ํด์ ์ฌ์ฉ๊ฐ๋ฅ
static ๋ณ์๋ ๊ทธ๊ฒ์ด ๋ค์ด์๋ ํด๋์ค๊ฐ ์ฒ์ ์ฌ์ฉ๋ ๋ ๋ง๋ค์ด์ง๊ณ ,
์ดํ ๋์ผ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ฐ๋ก ๋ง๋ค์ด์ ธ๋ ํด๋น static ๋ณ์๋ ๊ฐ ์ธ์คํด์ค๋ง๋ค ์๋๊ฒ ์๋๋ผ ํญ์ ๋์ผํ ๊ฑธ ์ฌ์ฉ
static ๋ฉ์๋๋ ํด๋์ค์ ์ผ๋ฐ ๋ณ์ ์ฌ์ฉ ๋ชปํ๊ณ static ๋ณ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
static ํด๋์ค๋ ์ธ์คํด์คํ x
? ๊ด๋ จ ์ฐ์ฐ์๋ค?: ์ฐ์ฐ์ : ์ผํญ ์ฐ์ฐ์ : ๋ณ์์ ๊ฐ์ ๊ฒฐ์ ํ๋ ๊ฐ๋จํ if๋ฌธ ๊ฐ๊ฒฐํ, (์)?(x):(y) ์ฒ๋ผ ์ฐ๋ฉด if(์){x}else{y}์ ๊ฐ๊ฒ ๋จ
?., ?[] ์ฐ์ฐ์ : null ์กฐ๊ฑด๋ถ ์ฐ์ฐ์ : ์์ ์ค๋ ๊ฐ์ด null์ด๋ฉด null ๋ฐํ, null์ด ์๋๋ฉด ๋ฉค๋ฒ/์์ ๋ฐํ
?? ์ฐ์ฐ์ : null ๋ณํฉ ์ฐ์ฐ์ : a??b ์ผ ๋ a๊ฐ null์ด ์๋๋ฉด a ๋ฐํ, a๊ฐ null์ด๋ฉด b๊ฐ null์ธ์ง ํ์ธํ๊ณ ๋ฐํ
??= ์ฐ์ฐ์ : ?? ์ฐ์ฐ์์ ์ฐ์ฅ์ ์ผ๋กย a๊ฐ null์ผ ์ b์ ๊ฐ์ a์ ๋์
Mathf ํด๋์ค ์ ์ฉํ๊ฒ๋คint/float Abs(int/float value) : value์ ์ ๋๊ฐ์ ๋ฆฌํด
int/float Clamp(int/float value, int/float min, int/float max) : value๊ฐ์ min๊ณผ max ์ฌ์ด๋ก๋ง ํ์ ํจ
float Round(float f) : ๋ฐ์ฌ๋ฆผ
float Lerp(float a, float b, float t) : ์ ํ ๋ณด๊ฐ๋ฒ: a์ b๋ฅผ 0๊ณผ 1์ ์์น๋ก ๋์์ ๋ t์ ์์น(0<=t<=1)์ ํด๋นํ๋ ๊ฐ์ ๋ฆฌํดํจ
float InverseLerp(float a, float b, float value) : Lerp์ ๋ฐ๋๋ก, a์ b๋ฅผ 0๊ณผ 1์ ์์น์ ๋์์ ๋ ์ ๋ ฅ๋ value์ ์์น๋ฅผ ๋ฆฌํดํจ. value๊ฐ a์ b ์ฌ์ด์ ๋ฒ์๋ฅผ ๋์ด๊ฐ๋ฉด a๋ b์ ํด๋นํ๋ 0์ด๋ 1์ ๊ฐ์ ๋ฆฌํดํจ
(Lerp๋ t๋ฅผ ์ ๋ ฅํ๊ณ value๋ฅผ ๋ฐํ, InverseLerp๋ value๋ฅผ ์ ๋ ฅํ๊ณ t๋ฅผ ๋ฐํ)
bool Approximately(float a, float b) : ๋ถ๋์์์ ํ์์ ์ค์ฐจ๋ฅผ ๋ฌด์ํ๊ณ a์ b๊ฐ ๊ฐ์ผ๋ฉด true๋ฅผ ๋ฆฌํด
์ด์ง ํ์ผ ์ ์ถ๋ ฅFile ํด๋์ค์ ์ ์ฉํ ์ ์ ๋ฉ์๋๋ค์ด ๋ง์ผ๋ฏ๋ก File.method()์์ผ๋ก ์ ์ฉํ๊ฒ ์ฐ์
FileStream์ด ํ์ํจ. new FileStream(string path, FileMode fileMode)์ผ๋ก ์ด์. FileMode๋ enumํ
์ ๋ ฅ์ BinaryWriter, ์ถ๋ ฅ์ BinaryReader๊ฐ ํ์ํจ. ๋งค๊ฐ๋ณ์๋ก ํ์ผ์คํธ๋ฆผ์ ๋ฐ๊ณ , ๋์ ํ์ผ์คํธ๋ฆผ์ writer์ผ๋ FileMode.Create, reader์ผ๋ FileMode.Open์ด์ด์ผ ํจ
์ด์ ๊ทธ๋ฅ writer.Write(context) ์์ผ๋ก ์ ์ฅํ๋ฉด ๋๋ค. ๋ชจ๋ ํ์์ ๋ํด ์ค๋ฒ๋ก๋ฉ๋์ด์์ผ๋ฏ๋ก ใฑใ
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ฉ์ผ๋ก ํ ๊ฑฐ๋คํ๊ณ stream.Close() ์์ง๋ง๊ธฐ โ Close()ํ ๊ฑฐ์์ด using๋ฌธ์ ์ฐ๋ฉด ๋ธ๋ก ์์์๋ง ์ฐ๊ณ ๋ฐ๋ก ํด์ ํ๋ค
๋๋ก์ฐ ์ฝ(Draw call) : CPU๊ฐ GPUํํ ๊ทธ๋ ค๋ฌ๋ผ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๊ฒ
์ ํจ์ค ์ฝ(Setpass call) : ํ ์ค์ณ, ์์ด๋ ๋ธ๋ ๋ฉ ๋ฑ ํ์ฒ๋ฆฌ ๊ณผ์
๋ฐฐ์น(Batch) : ๋๋ก์ฐ์ฝ+์ ํจ์ค์ฝ. ๋๋ก์ฐ์ฝ์ ์ด์ฉ ์ ์๊ณ ๋ฐฐ์น๋ฅผ ์ค์ด๋ ค๋ฉด ์ ํจ์ค์ฝ์ ์ ์ฝํด์ผ ํ๋ค.
๋์ผ ๋จธํ ๋ฆฌ์ผ ์ฐ๋๊ฒ๋ค์ ํ๋ฒ์ ์ฝ๋ฐ์ผ๋๊น ์์์ ์ ์ฝํ ์ ์๋ค
์ค๋ธ์ ํธ ์ด๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒtransform.position
ex) transform.position += transform.right * (Time.deltaTime * 5)
Update() ๊ธฐ๋ฐ, ๊ฒ์์ค๋ธ์ ํธ ํฌ์ง์ ์ด๋
Time.deltaTime ๊ณฑํด์ผํจ
RigidBody.MovePosition์ด ๋ ๋ซ๋ (FixedUpdate)
transform.Translate
trasform.Translate(Vector3 translation)
Update() ๊ธฐ๋ฐ, translation์ ๊ฐ๋งํผ ์ด๋
Time.deltaTime ๊ณฑํด์ผํจ
RigidBody.velocity
FixedUpdate() ๊ธฐ๋ฐ, RigidBody.velocity(Vector3 ํ๋กํผํฐ) ๊ฐฑ์
์ ๋ํฐ ๊ณต์ ๋น์ถ์ฒ ๋ฐฉ๋ฒ
RigidBody.AddForce
RigidBody.AddForce(Vector3 force, ForceMode=ForceMode.Force)
FixedUpdate() ๊ธฐ๋ฐ, RigidBody์๊ฒ ๋ฌผ๋ฆฌ์ ์ธ ํ์ ๊ฐํจ
ForceMode๋ 4๊ฐ์ง ๊ฐ enum
Force = ์ง์์ ์ธ ํ, ์ง๋ ๊ณ ๋ ค
Accelaration = ์ง์์ ์ธ ํ, ์ง๋ ๋ฌด์
Impulse = ๋จ๋ฐ์ ์ธ ํ, ์ง๋ ๊ณ ๋ ค (ex)ํญ๋ฐ)
VelocityChange = ๋จ๋ฐ์ ์ธ ํ, ์ง๋ ๋ฌด์
๋ถ๋ฅธ ์ฝ๋ฃจํด์ด ๋๋๋ฉด ๋ฆฌํด๋ฐ์ ๊ณ์ํจ ใทใท
๊ทธ๋ฅ ๊ณต๋ถํ๋ค๊ฐ ์์ฃผ ํท๊ฐ๋ฆฌ๊ฑฐ๋ ๊ธฐ์ตํด๋์๋งํ๊ฑฐ ๋ฉ๋ชจํด๋๋๋ฐ ๋์ถฉ ๋๊ตฐ๊ฐ๋ผ๋ย ์ฝ์ด๋ณด๋ฉด ๋์๋ ์๋์์ง์์๊นํด์ ํจ์ฌ๋ ค๋ด
๋ง์ฝ ํ๋ฆฐ๋ถ๋ถ ์์ผ๋ฉด ์ฐ์ด์ค๋ ์ข๊ณ
๋ฑ ๋ด ์์ค์ด๋ผ ๋์ ๋ง์ด๋จ
์์ฃผ ์ข์.. ๊ณ์ํด
๋ชฐ๋๋๊ฒ ๋ง๋ค. ๊ณ ๋ง์ ใ ใ
์ Rigidbody.velocity ๊ฐ ๊ณต์ ๋น์ถ์ฒ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ? ๋ ์น๋ค ๊ทธ๊ฑธ๋ก ์งฐ๋๋ฐ
๋ฌผ๋ฆฌ ํ์ํ ๋ velocity ์ง์ ์์ ํ๋ฉด ๋ค ๋ฌด์ํด์ ๋น์ถ์ฒ์ผ๊ฑฐ์.
GOAT