์ง€์‹c# ํ‚ค์›Œ๋“œ ๋ฒˆ์—ญ

ํ”„๋กœํผํ‹ฐ : ์†์„ฑ

๋ธ๋ฆฌ๊ฒŒ์ดํŠธ : ๋Œ€๋ฆฌ์ž

ํŒŒ๋ผ๋ฏธํ„ฐ : ๋งค๊ฐœ๋ณ€์ˆ˜

์ œ๋„ค๋ฆญ : ์ผ๋ฐ˜ํ™”

ํ•„๋“œ : ๋ณ€์ˆ˜

์œ ๋‹ˆํ‹ฐ ์ฝ”๋”ฉ ๋ฌธ๋ฒ• ๊ทœ์น™
  1. ๋ณ€์ˆ˜๋ช… ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ์ง“๊ธฐ

  2. ํŒŒ์ผ ์ด๋ฆ„์€ ์–ธ๋”๋ฐ” ์ด์šฉํ•ด์„œ ๋ถ„๋ฅ˜ ๋ฐ ์ •๋ ฌ์‹œ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ex) Sprite_Tree_Pine_Small_2

  3. ํด๋ž˜์Šค ์ด๋ฆ„, ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž ์‹œ์ž‘

  4. ๋ฉ”์„œ๋“œ๋Š” ๋Œ€๋ฌธ์ž ์‹œ์ž‘

  5. ํด๋ž˜์Šค ๋‚ด public, protected ๋ณ€์ˆ˜, ํ”„๋กœํผํ‹ฐ๋Š” ์นด๋ฉœํ˜•์‹

  6. ํด๋ž˜์Šค ๋‚ด private ๋ณ€์ˆ˜๋Š” _์–ธ๋”๋ฐ” ์‹œ์ž‘ ์นด๋ฉœํ˜•์‹

  7. ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ์นด๋ฉœํ˜•์‹

  8. ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์ด๋ฆ„ ๋’ค์—” Callback ๋ถ™์ด๊ธฐ

  9. ์ด๋ฒคํŠธ๋‚˜ ์•ก์…˜ ์•ž์—” On ๋ถ™์ด๊ธฐ ex) OnDeath

MonoBehaviour ์ƒ์† ๋ผ์ธ

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.Event

System.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 out

ref๋Š” ์ด์ „์— ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™” ๋˜์—ˆ์–ด์•ผ ํ•˜์ง€๋งŒ

out์€ ์ด์ „ ๊ฐ’์ด ์žˆ๋“  ์—†๋“  ๋ฌด์‹œํ•˜๊ณ  ์ž๊ธฐ๊ฐ€ ์ดˆ๊ธฐํ™”์‹œํ‚ด

static

static ๋ถ™์€ ๋ณ€์ˆ˜/ํ•จ์ˆ˜๋Š” ๊ณง๋ฐ”๋กœ ํด๋ž˜์Šค๋ช….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()์‹์œผ๋กœ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ž

  1. FileStream์ด ํ•„์š”ํ•จ. new FileStream(string path, FileMode fileMode)์œผ๋กœ ์—ด์ž. FileMode๋Š” enumํ˜•

  2. ์ž…๋ ฅ์— BinaryWriter, ์ถœ๋ ฅ์— BinaryReader๊ฐ€ ํ•„์š”ํ•จ. ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํŒŒ์ผ์ŠคํŠธ๋ฆผ์„ ๋ฐ›๊ณ , ๋Œ€์ƒ ํŒŒ์ผ์ŠคํŠธ๋ฆผ์€ writer์ผ๋• FileMode.Create, reader์ผ๋• FileMode.Open์ด์–ด์•ผ ํ•จ

  3. ์ด์ œ ๊ทธ๋ƒฅ writer.Write(context) ์‹์œผ๋กœ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค. ๋ชจ๋“  ํ˜•์‹์— ๋Œ€ํ•ด ์˜ค๋ฒ„๋กœ๋”ฉ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ใ„ฑใ…Š

  4. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์šฉ์œผ๋กœ ํ• ๊ฑฐ๋‹คํ•˜๊ณ  stream.Close() ์žŠ์ง€๋ง๊ธฐ โ†’ Close()ํ• ๊ฑฐ์—†์ด using๋ฌธ์„ ์“ฐ๋ฉด ๋ธ”๋ก ์•ˆ์—์„œ๋งŒ ์“ฐ๊ณ  ๋ฐ”๋กœ ํ•ด์ œํ•œ๋‹ค

๋ฐฐ์น˜(Batch)

๋“œ๋กœ์šฐ ์ฝœ(Draw call) : CPU๊ฐ€ GPUํ•œํ…Œ ๊ทธ๋ ค๋‹ฌ๋ผ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ

์…‹ํŒจ์Šค ์ฝœ(Setpass call) : ํ…์Šค์ณ, ์‰์ด๋” ๋ธ”๋ Œ๋”ฉ ๋“ฑ ํ›„์ฒ˜๋ฆฌ ๊ณผ์ •

๋ฐฐ์น˜(Batch) : ๋“œ๋กœ์šฐ์ฝœ+์…‹ํŒจ์Šค์ฝœ. ๋“œ๋กœ์šฐ์ฝœ์€ ์–ด์ฉ” ์ˆ˜ ์—†๊ณ  ๋ฐฐ์น˜๋ฅผ ์ค„์ด๋ ค๋ฉด ์…‹ํŒจ์Šค์ฝœ์„ ์ ˆ์•ฝํ•ด์•ผ ํ•œ๋‹ค.

๋™์ผ ๋จธํ…Œ๋ฆฌ์–ผ ์“ฐ๋Š”๊ฒƒ๋“ค์€ ํ•œ๋ฒˆ์— ์ฝœ๋ฐ›์œผ๋‹ˆ๊นŒ ์ž์›์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค

์˜ค๋ธŒ์ ํŠธ ์ด๋™ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•
  1. transform.position

ex) transform.position += transform.right * (Time.deltaTime * 5)

Update() ๊ธฐ๋ฐ˜, ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ ํฌ์ง€์…˜ ์ด๋™

Time.deltaTime ๊ณฑํ•ด์•ผํ•จ

RigidBody.MovePosition์ด ๋” ๋‚ซ๋Œ€ (FixedUpdate)


  1. transform.Translate

trasform.Translate(Vector3 translation)

Update() ๊ธฐ๋ฐ˜, translation์˜ ๊ฐ’๋งŒํผ ์ด๋™

Time.deltaTime ๊ณฑํ•ด์•ผํ•จ


  1. RigidBody.velocity

FixedUpdate() ๊ธฐ๋ฐ˜, RigidBody.velocity(Vector3 ํ”„๋กœํผํ‹ฐ) ๊ฐฑ์‹ 

์œ ๋‹ˆํ‹ฐ ๊ณต์‹ ๋น„์ถ”์ฒœ ๋ฐฉ๋ฒ•


  1. RigidBody.AddForce

RigidBody.AddForce(Vector3 force, ForceMode=ForceMode.Force)

FixedUpdate() ๊ธฐ๋ฐ˜, RigidBody์—๊ฒŒ ๋ฌผ๋ฆฌ์ ์ธ ํž˜์„ ๊ฐ€ํ•จ

ForceMode๋Š” 4๊ฐ€์ง€ ๊ฐ’ enum

  1. Force = ์ง€์†์ ์ธ ํž˜, ์งˆ๋Ÿ‰ ๊ณ ๋ ค

  2. Accelaration = ์ง€์†์ ์ธ ํž˜, ์งˆ๋Ÿ‰ ๋ฌด์‹œ

  3. Impulse = ๋‹จ๋ฐœ์ ์ธ ํž˜, ์งˆ๋Ÿ‰ ๊ณ ๋ ค (ex)ํญ๋ฐœ)

  4. VelocityChange = ๋‹จ๋ฐœ์ ์ธ ํž˜, ์งˆ๋Ÿ‰ ๋ฌด์‹œ

yield StartCoroutine

๋ถ€๋ฅธ ์ฝ”๋ฃจํ‹ด์ด ๋๋‚˜๋ฉด ๋ฆฌํ„ด๋ฐ›์•„ ๊ณ„์†ํ•จ ใ„ทใ„ท










๊ทธ๋ƒฅ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ์ž์ฃผ ํ—ท๊ฐˆ๋ฆฌ๊ฑฐ๋‚˜ ๊ธฐ์–ตํ•ด๋†“์„๋งŒํ•œ๊ฑฐ ๋ฉ”๋ชจํ•ด๋†“๋Š”๋ฐ ๋Œ€์ถฉ ๋ˆ„๊ตฐ๊ฐ€๋ผ๋„ย ์ฝ์–ด๋ณด๋ฉด ๋„์›€๋ ์ˆ˜๋„์žˆ์ง€์•Š์„๊นŒํ•ด์„œ ํ•จ์˜ฌ๋ ค๋ด„

๋งŒ์•ฝ ํ‹€๋ฆฐ๋ถ€๋ถ„ ์žˆ์œผ๋ฉด ์ฐ์–ด์ค˜๋„ ์ข‹๊ณ