๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

    ์œ ๋‹ˆํ‹ฐ Quaternion

    Quaternion & Quaternion.Euler transform.rotation์€ Quaternionํ˜•ํƒœ์ธ (x, y, z, w)์˜ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ๋œ๋‹ค. Quaternion.Euler์— Vector3 ๊ฐ’์„ ๋„ฃ์œผ๋ฉด Quaternion ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. transfomr.rotation = Quaternion.Euler(new Vector3(30,50,20)); transform.rotation = Quaternion.Euler(30,50,20); // ์œ„์™€ ๋™์ผ ๊ฐ๋„ ๋”ํ•˜๊ธฐ 1. Vector3 ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ๋”ํ•œ ๋‹ค์Œ Quaternion์œผ๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜. Quaternion originalRot = transform.rotation; Vector3 originalRotVec3 = originalRot...

    [Win api] CreateWindow

    ๋ณธ๋ฌธ์—์„œ๋Š” ์•„๋ž˜ ํ•˜์ด๋ผ์ดํŠธ ๋ถ€๋ถ„์„ ์„ธ๋ถ€์ ์œผ๋กœ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋‹ค. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { hInst = hInstance; HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) //์œˆ๋„์šฐ์ฐฝ์„ ์ƒ์„ฑ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฌธ์ด๋‹ค. { return FALSE; } CreateWindow๋ฅผ ํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ์œˆ๋„์šฐ ํ•ธ๋“ค์ด ๋งŒ๋“ค์–ด์ง„๋‹ค. ์‹ค์ œ ์œˆ๋„์šฐ์ฐฝ์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. ์ƒ์„ฑํ•œ ์œˆ๋„์šฐ์˜ ํ•ธ๋“ค์„ ๋ฐ˜ํ™˜ํ•ด์คŒ ์‹ค์ œ ์ฝ”๋“œ ; HWND hW..

    [Win api] InvalidateRect vs updatewindow

    1. InvalidateRect ํ™”๋ฉด์„ ๋ฌดํšจํ™”ํ•ด์ฃผ์–ด WM_PAINT ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๋„๋ก ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ invalidateRect๋Š” WM_PAINT๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. InvalidateRect ํ•จ์ˆ˜๋Š” ๋ฌดํšจํ™” ์˜์—ญ๋งŒ์„ ์ง€์ •ํ•ด ๋†“๊ณ  ์ด ์˜์—ญ์„ ์ฒ˜๋ฆฌํ•ด ๋‹ฌ๋ผ๋Š” ์‹ ํ˜ธ๋งŒ์„ ์„ค์ •ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๊ฒƒ์€ WM_PAINT ๋ฉ”์„ธ์ง€์˜ Flag๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‹œ์Šคํ…œ์ด ๋ฉ”์‹œ์ง€ ํ์— ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฉ”์„ธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•ด๋†“์€ ๋’ค ๋ฌดํšจํ™” ์˜์—ญ์„ ์บ์น˜ํ•˜๋ฉด WM_PAINT๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. (๊ฐฑ์‹  ์ž‘์—… ์ง€์—ฐ ์žˆ์Œ) 2. updatewindow ๋ฉ”์‹œ์ง€ ํ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  WM_PAINT๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•œ๋‹ค. (๊ฐฑ์‹  ์ž‘์—… ์ง€์—ฐ ์—†์Œ)

    [Win api] DC์™€ WM_PAINT, ๊ทธ๋ฆฌ๊ณ  BeginPaint() vs GetDC() ๊ด€ํ•œ ๋น„๊ต

    1. DC๋ž€, Device Context - ๊ทธ๋ž˜ํ”ฝ ์ถœ๋ ฅ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์˜ต์…˜์„ ๋ชจ์•„๋†“์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด๋กœ, ์œˆ๋„์šฐ์ฆˆ์—์„œ๋Š” ์ถœ๋ ฅ์žฅ์น˜์— ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ DC๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ณดํ†ต DCํ•ธ๋“ค์„ ์–ป์€ ํ›„ ์ถœ๋ ฅํ•œ๋‹ค.(DCํ•ธ๋“ค์€ ์ถœ๋ ฅ๋Œ€์ƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ตฌ๋ถ„ ๋ฒˆํ˜ธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.) ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ ํ•จ์ˆ˜๋“ค์€ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ DCํ•ธ๋“ค์„ ํ•„์š”๋กœ ํ•œ๋‹ค. - GDI์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค. (GDI๋ž€ ๊ทธ๋ž˜ํ”ฝ ํ•จ์ˆ˜๋“ค์„ ๊ตฌํ˜„ํ•˜๋Š” ์ผ์„ ๋‹ด๋‹นํ•˜๋Š” ์œˆ๋„์šฐ์ฆˆ์˜ ๊ตฌ์„ฑ์š”์†Œ์ด๋‹ค. ๊ทธ๋ž˜ํ”ฝ ์ถœ๋ ฅ์„ ์œ„ํ•˜์—ฌ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์™€ ๊ทธ์— ๊ด€๋ จ๋œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.) - ์ฆ‰, ํฐํŠธ/์ƒ‰์ƒ/๊ตต๊ธฐ/์ถœ๋ ฅ๋ฐฉ๋ฒ•๋“ฑ์ด ๋ชจ๋‘ ์ถœ๋ ฅ์— ํ•„์š”ํ•œ ์ •๋ณด์ด๋ฏ€๋กœ ๊ทธ๋Ÿฌํ•œ ์ •๋ณด๋“ค์ด DC์— ๋‹ค ๋‹ด๊ฒจ ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ด€๋ จ ์ฝ”๋“œ: hdc = GetDC(hWnd); //!..

    #include <conio.h> _getch() ์„ค๋ช…๊ณผ ์ฝ”๋“œ ์˜ˆ์‹œ

    #include ์ฝ˜์†” input output ํ—ค๋”ํŒŒ์ผ์ด๋‹ค. ์ฝ˜์†”์ฐฝ์—์„œ ์ž…์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ํ—ค๋”ํŒŒ์ผ์ด๋‹ค. _getch() _getch() ํ•จ์ˆ˜๋Š” ๋ฌธ์ž 1๊ฐœ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ํ•จ์ˆ˜์ด๋‹ค. Enter๋ฅผ ์น˜์ง€ ์•Š๋”๋ผ๋„ ๋ฌธ์ž๋ฅผ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„ ๋ฐ”๋กœ ๊ทธ ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ข…๋ฃŒ๋œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, cin ์ฒ˜๋Ÿผ ์ž…๋ ฅํ•œ ๋’ค์— ๊ตณ์ด ์—”ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š”์—†์ด ์ž…๋ ฅ ํ™•์ธํ•ด์ค€๋‹ค. ํ‚ค๋ณด๋“œ์—์„œ q๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๊ฒŒ์ž„ ์ข…๋ฃŒํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ #include #include #include using namespace std; int main(){ while(true){ char key = _getch(); if(key=='q'|| key=='Q') break; } cout

    [์œ ๋‹ˆํ‹ฐ] get set ํ”„๋กœํผํ‹ฐ Property(์†์„ฑ)

    c#์—์„œ๋Š” property(์†์„ฑ)์ด๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค. c++์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์€๋‹‰์„ ์œ„ํ•ด getter setter์„ ์“ฐ๋Š”๋ฐ c#์€ get set์œผ๋กœ ์“ฐ๊ณ  ์ด๋Ÿฐ ๋ฐฉ์‹์„ property๋ผ๊ณ  ํ•œ๋‹ค. ํด๋ž˜์Šค์—์„œ ์ •๋ณด ์€๋‹‰์„ ์œ„ํ•˜์—ฌ ํŠน์ • ๋ณ€์ˆ˜๋ฅผ private ์„ ์–ธํ•˜๋ฉด ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ๋Š” access ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—, ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ(๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ’์„ ๋ฐ”๊ฟ”์•ผ ํ•  ๊ฒฝ์šฐ) get,set์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ํ”„๋กœํผํ‹ฐ ์‚ฌ์šฉ๋ฒ• private๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ฅผ ์–ป๊ฑฐ๋‚˜ ์„ธํŒ…ํ•˜๊ธฐ ์œ„ํ•ด get, set ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. get ์ ‘๊ทผ์ž์— ๋Œ€ํ•œ ์ฝ”๋“œ ๋ธ”๋ก์€ ์†์„ฑ์„ ์ฝ์„ ๋•Œ ์‹คํ–‰๋˜๊ณ , set ์ ‘๊ทผ์ž์— ๋Œ€ํ•œ ์ฝ”๋“œ ๋ธ”๋ก์€ ์†์„ฑ์„ ์ƒˆ ๊ฐ’์— ํ• ๋‹นํ•  ๋•Œ ์‹คํ–‰๋œ๋‹ค. set ..

    [์œ ๋‹ˆํ‹ฐ] Debug.Log์™€ Debug.LogFormat ํ™œ์šฉ. ์–ด๋–ค ๊ฒƒ์„ ์จ์•ผํ• ๊นŒ?

    Debug.Log : ํŠน์ง•์€ " " ์•ˆ์—์„œ ๋งํ•˜๊ณ  ์‹ถ์€ ๋ฐ”์™€ ๋ณ€์ˆ˜๋ฅผ ๋ชจ๋‘ + ๋กœ ์—ฐ๊ฒฐ void Start() { int a = 10; Debug.Log("A์˜ ๊ฐ’์€ : " + a); } ์ถœ๋ ฅ| A์˜ ๊ฐ’์€ :10 Debug.LogFormat : ํŠน์ง•์€ " "๋‚ด์—์„œ ๋ฏธ๋ฆฌ ๋ณ€์ˆ˜์˜ {index} ํ‘œ์‹œ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ณ€์ˆ˜๋Š” ์‰ผํ‘œ๋กœ ์—ฐ๊ฒฐ void Start() { for (int i = 0; i

    ์œ ๋‹ˆํ‹ฐ ์ฝ”๋ฃจํ‹ด Coroutine

    *๊ฐœ์ธ ํ•™์Šต์„ ์œ„ํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค.* ์ฝ”๋ฃจํ‹ด(Coroutine) ์ ˆ์ฐจ์  ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ฃผ๊ณ ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Update()๋ฌธ์€ ํ•œ ํ”„๋ ˆ์ž„์— ํ•œ๋ฒˆ์”ฉ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ผ๋ฉด (๊ฒŒ์ž„ ํ”„๋ ˆ์ž„ 1์ดˆ์— 60ํ”„๋ ˆ์ž„์ด ๋‚˜์˜จ๋‹ค๋ฉด 1์ดˆ์— 60๋ฒˆ๋„๋Š” ๊ฒฉ์œผ๋กœ ํ•œ๋ฒˆ ๋„๋Š” ๊ฐ„๊ฒฉ์ด 60๋ถ„์˜ 1์ดˆ, 80fps๋ผ๋ฉด 80๋ฒˆ ํ˜ธ์ถœ) ์ฝ”๋ฃจํ‹ด(Coroutine)์€ ์—…๋ฐ์ดํŠธ๋ฌธ ๋‚ด์˜ ๋ธํƒ€ํƒ€์ž„ ์ ์šฉ ๋Œ€์‹ ์— ํ”„๋ ˆ์ž„๊ณผ ์ƒ๊ด€์—†์ด ๋ณ„๋„์˜ ์„œ๋ธŒ ๋ฃจํ‹ด์—์„œ ์›ํ•˜๋Š” ์ž‘์—…์„ ์›ํ•˜๋Š” ์‹œ๊ฐ„๋งŒํผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ฅผํ…Œ๋ฉด, ์„œ์„œํžˆ ํˆฌ๋ช…ํ•ด์ง€๋Š” ํšจ๊ณผ๋ฅผ ์ฃผ๊ณ ์‹ถ์„ ๋•Œ update๋ฌธ ์•ˆ์—์„œ ๋กœ์ง์„ ๋งŒ๋“ค๋ฉด1์ดˆ๋„ ๋˜์ง€ ์•Š์•„ 60ํ”„๋ ˆ์ž„ ๊ฐ€๊นŒ์ด ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์‹๊ฐ„์— ํˆฌ๋ช…ํ•ด์ง€๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ์ด๋Ÿด๋•Œ๋Š” ์ฝ”๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค. - IEnumerator ..

    ์œ ๋‹ˆํ‹ฐ SetSprite

    Declaration public void SetSprite(int index, Sprite sprite); Parameters index The index of the Sprite being modified. sprite The Sprite being assigned. ์ƒ‰์ธ ์ˆ˜์ •์ค‘์ธ ์Šคํ”„๋ผ์ดํŠธ์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ํ• ๋‹น๋˜๋Š” ์Šคํ”„๋ผ์ดํŠธ. ์ง€์ •๋œ ์ธ๋ฑ์Šค์—์„œ ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์˜ˆ์‹œ: for (int i = 0; i

    ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS, Depth First Search), ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS, Breadth First Search))

    BFS, DFS๋ž€ ๊ทธ๋ž˜ํ”„์˜ ํƒ์ƒ‰ ๊ธฐ๋ฒ•์œผ๋กœ ๋ชฉ์ ์€ ์ž„์˜์˜ ํ•œ ์ •์ ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐ ์žˆ๋‹ค. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ - DFS(Depth-first search) ์ž์‹ ๋…ธ๋“œ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ ์ฆ‰, ์•„์ง ๋ฐฉ๋ฌธ๋˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ(์ž์‹ ๋…ธ๋“œ)๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์€ ํ•œ์ชฝ๋งŒ ์ฃฝ์–ด๋ผ ํŒŒ๋‹ค๊ฐ€ ๋”์ด์ƒ ํŒ” ๊ณณ์ด ์—†์œผ๋ฉด ๋‹ค์‹œ ๋Œ์•„์™€์„œ ๋‹ค๋ฅธ ํ•œ์ชฝ์„ ์ฃฝ์–ด๋ผ ํŒŒ๋Š” ํ˜•์‹์ด๋‹ค. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์€ Stack์„ ํ†ตํ•ด ๊ตฌํ˜„๋œ๋‹ค. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ - BFS(Breadth-first search)=๋ ˆ๋ฒจ ์ˆœํšŒ(level-order traversal) ์ฝ”๋“œ๋งํฌ : BFS ์ฝ”๋“œ (tistory.com) ๊ฐ„์„ ์˜ ๋ชจ๋“  ๊ฐ€์ค‘์น˜๊ฐ€ ๊ฐ™์„ ๋•Œ, ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์‹œ์ž‘ ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€๊นŒ์šด ์ •์ ์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•œ๋‹ค. ๋ฐฉ..