Debugging - kuimoani/defold GitHub Wiki

Debugging

이 맀뉴얼은 Defold에 μžˆλŠ” 디버깅 κΈ°λŠ₯에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

Defoldμ—μ„œ κ²Œμž„μ„ λ””λ²„κ·Έν•˜λŠ” κ°€μž₯ κ°„λ‹¨ν•œ 방법은 좜λ ₯ 디버깅(print debugging)을 μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 κΈ°μˆ μ€ κ·Έλƒ₯ print()λ‚˜ pprint() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ λ³€μˆ˜μ˜ 값을 μ‚΄νŽ΄λ³΄κ³  μ‹€ν–‰ 흐름을 μΆ”μ ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. λ§Œμ•½ μŠ€ν¬λ¦½νŠΈκ°€ μ—†λŠ” κ²Œμž„ μ˜€λΈŒμ νŠΈκ°€ μ΄μƒν•˜κ²Œ λ™μž‘ν•œλ‹€λ©΄, 디버깅 μš©λ„μ˜ 슀크립트λ₯Ό μΆ”κ°€ν•˜λ©΄ λ©λ‹ˆλ‹€.

좜λ ₯ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ Editor의 Console 창에 값이 좜λ ₯λ©λ‹ˆλ‹€. λ˜ν•œ draw_text λ©”μ„Έμ§€λ₯Ό @render μ†ŒμΌ“μœΌλ‘œ λ³΄λ‚΄μ„œ 화면에 ν…μŠ€νŠΈλ₯Ό 그릴 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

msg.post("@render:", "draw_text", {text = "My value: " .. my_val, position = vmath.vector3(200, 200, 0)})

물리 μ›€μ§μž„μ„ κ³„μ‚°ν•˜λŠ”λ° λ¬Έμ œκ°€ 생겼닀면, 화면에 μ„ (line)을 κ·Έλ €μ„œ 계산을 μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 것이 도움이 λ˜κΈ°λ„ ν•©λ‹ˆλ‹€. 이 방법은 draw_line λ©”μ„Έμ§€λ₯Ό @render μ†ŒμΌ“μœΌλ‘œ λ³΄λ‚΄μ„œ 그릴 수 μžˆμŠ΅λ‹ˆλ‹€.

msg.post("@render:", "draw_line", {start_point = my_start, end_point = my_end, color = my_color})

LuaλŠ” λͺ‡λͺ‡ μƒν™©μ—μ„œ μœ μš©ν•œ 디버깅 라이브러리λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 특히 Lua ν™˜κ²½μ˜ λ‚΄λΆ€λ₯Ό 쑰사해야 ν•˜λŠ” 경우 ν•„μš”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 더 λ§Žμ€ μ •λ³΄λŠ” http://www.lua.org/pil/contents.html#23 λ₯Ό μ°Έκ³  λ°”λžλ‹ˆλ‹€.

Debugging Lua scripts with ZeroBrane

Defold 엔진은 Lua IDE ZeroBrane Studio λΌλŠ” 무료 μ˜€ν”ˆμ†ŒμŠ€λ₯Ό 톡해 Lua 슀크립트λ₯Ό λ””λ²„κΉ…ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯을 λ‚΄μž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 디버깅 κΈ°λŠ₯을 μœ„ν•΄μ„œλŠ” ZeroBrane Studioλ₯Ό μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 ν”„λ‘œκ·Έλž¨μ€ OSX와 Windowsμ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•©λ‹ˆλ‹€.

http://studio.zerobrane.com μ—μ„œ "ZeroBrane Studio"λ₯Ό λ‹€μš΄λ‘œλ“œ ν•˜μ„Έμš”.

ZeroBrane configuration

ZeroBrane이 ν”„λ‘œμ νŠΈμ˜ νŒŒμΌλ“€μ„ 찾으렀면, Defold ν”„λ‘œμ νŠΈ λ””λ ‰ν† λ¦¬μ˜ μœ„μΉ˜λ₯Ό μ•Œλ €μ€˜μ•Ό ν•©λ‹ˆλ‹€. κ°„λ‹¨ν•œ λ°©λ²•μœΌλ‘œλŠ” Defold projectμ—μ„œ Show in Finder/Explorer λ©”λ‰΄λ‘œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. "game.project" μ—μ„œ 마우슀 였λ₯Έμͺ½ 클릭
  2. OSXμ—μ„œ Show in Finder 선택, Windowsμ—μ„œ Show in Explorer 선택

OS X: Show in Finder

Windows: Show in Explorer

To set up ZeroBrane

ZeroBrane을 μ„€μ •ν•˜κΈ° μœ„ν•΄ Project β–Έ Project Directory β–Έ Choose…​ λ₯Ό μ„ νƒν•˜μ„Έμš”.

Auto completion

μ΄λ ‡κ²Œ ν˜„μž¬ Defold ν”„λ‘œμ νŠΈ 디렉토리와 μΌμΉ˜ν•˜κ²Œ μ„€μ •ν•˜λ©΄, ZeroBraneμ—μ„œ Defold ν”„λ‘œμ νŠΈμ˜ 디렉토리 트리 ꡬ쑰가 보이게 되며 이 νŒŒμΌλ“€μ„ μ—΄κ±°λ‚˜ λ‹€λ£° 수 있게 λ©λ‹ˆλ‹€.

μΆ”μ²œν•˜λŠ” λ‹€λ₯Έ ꡬ성 방법은 μ•„λž˜ λ¬Έμ„œμ—μ„œ μžμ„Ένžˆ μ„€λͺ…ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

Starting the debugging server

디버깅 μ„Έμ…˜μ„ μ‹œμž‘ν•˜κΈ° 전에, ZeroBrane에 λ‚΄μž₯된 디버깅 μ„œλ²„κ°€ μ‹€ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 이 λ©”λ‰΄λŠ” Project λ©”λ‰΄μ—μ„œ 찾을 수 있으며 menu:Project β–Έ Start Debugger Serverλ₯Ό μ„ νƒν•˜λ©΄ λ©λ‹ˆλ‹€.

Auto completion

Connecting your application to the debugger

디버깅은 Defold μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 생λͺ…μ£ΌκΈ°μ˜ μ–΄λŠ μ§€μ μ—μ„œλ“  μ‹œμž‘ν•  수 μžˆμ§€λ§Œ, Lua μŠ€ν¬λ¦½νŠΈμ—μ„œ μš°μ„ μ μœΌλ‘œ μ‹œμž‘λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 디버깅 μ„Έμ…˜μ„ μ‹œμž‘ν•˜κΈ° μœ„ν•œ Lua μ½”λ“œλŠ” μ•„λž˜μ²˜λŸΌ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

local dbg = require "builtins.scripts.mobdebug"
dbg.start()

μœ„ μ½”λ“œλ₯Ό μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— μΆ”κ°€ν•΄μ„œ, ZeroBrane의 디버깅 μ„œλ²„μ™€ μ—°κ²°(κΈ°λ³Έκ°’μœΌλ‘œ "localhost"둜 연결됨)되고 λ‹€μŒ ꡬ문이 μ‹€ν–‰λ˜κΈ° 전에 쀑지(pause) λ©λ‹ˆλ‹€.

dbg.start()κ°€ ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œ κ²Œμž„μ΄ μ’…λ£Œλ˜μ–΄ 버린닀면, ZeroBrane이 문제λ₯Ό κ°μ§€ν•˜μ—¬ κ²Œμž„μœΌλ‘œ μ’…λ£Œ μ»€λ§¨λ“œ(exit command)λ₯Ό μ „μ†‘ν–ˆκΈ° λ•Œλ¬ΈμΌ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λͺ‡ κ°€μ§€ 이유둜 인해, ZeroBrane은 디버깅 μ„Έμ…˜μ„ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ νŒŒμΌμ„ μ—΄μ–΄μ•Ό ν•  ν•„μš”λ„ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ ZeroBraneμ—μ„œ "Can’t start debugging without an opened file or with the current file not being saved (untitled.lua)."(λ²ˆμ—­: μ—΄λ¦° νŒŒμΌμ΄λ‚˜ ν˜„μž¬ 파일이 μ €μž₯λ˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œ 디버깅을 μ‹œμž‘ν•  수 μ—†μŠ΅λ‹ˆλ‹€.) μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ dbg.start() κ°€ μΆ”κ°€λœ ν•΄λ‹Ή νŒŒμΌμ„ μ—΄μ–΄ 이 μ—λŸ¬λ₯Ό μˆ˜μ •ν•˜μ‹­μ‹œμ˜€.

디버깅은 디버깅이 μ‹œμž‘λœ μœ„μΉ˜μ—μ„œλ§Œ lua μ»¨ν…μŠ€νŠΈλ₯Ό ν™œμ„±ν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€. game.projectμ—μ„œ "shared_state"λ₯Ό ν™œμ„±ν™” ν•˜λ©΄ 디버깅이 μ‹œμž‘λœ μœ„μΉ˜μ™€ 상관없이 λͺ¨λ“  μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 디버깅 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Debugging session started in "/branches/1610/1159/Main/". (디버깅 μ„Έμ…˜μ΄ "/branches/1610/1159/Main/" μ—μ„œ μ‹œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.)

λΌλŠ” λ©”μ„Έμ§€κ°€ λ‚˜νƒ€λ‚˜λ©΄ 이제 ZeroBraneμ—μ„œ 디버깅 κΈ°λŠ₯을 μ‚¬μš©ν•  수 있게 λ˜μ–΄ 쀑단점(breakpoint)λ₯Ό μΆ”κ°€ μ‚­μ œν•΄μ„œ λ‹¨κ³„λ³„λ‘œ 검사할 수 μžˆμŠ΅λ‹ˆλ‹€.

Auto completion

μ—°κ²° μ‹œλ„κ°€ μ‹€νŒ¨ν–ˆλ‹€λ©΄(디버깅 μ„œλ²„λ₯Ό μ‹€ν–‰ν•˜μ§€ μ•Šμ•˜κ±°λ‚˜ ν•΄μ„œ), μ—°κ²° μ‹œλ„ 후에 μ •μƒμ μœΌλ‘œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 계속 μ‹€ν–‰ν•©λ‹ˆλ‹€.

Remote debugging

디버기깅은 일반 λ„€νŠΈμ›Œν¬ 컀λ„₯μ…˜ (TCP)μ—μ„œ λ°œμƒν•˜λ―€λ‘œ μ›κ²©μœΌλ‘œ 디버깅이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 즉 λͺ¨λ°”일 μž₯μΉ˜κ°€ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 디버그 ν•˜λŠ”κ²ƒλ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.

디버깅을 μ‹œμž‘ν•˜κΈ° μœ„ν•΄μ„  기본적으둜 start() λ₯Ό ν˜ΈμΆœν•΄ localhost둜 연결을 μ‹œλ„ν•  수 μžˆμ§€λ§Œ μ•„λž˜μ²˜λŸΌ ZeroBrane의 디버깅 μ„œλ²„μ— μ ‘μ†ν•˜κΈ° μœ„ν•΄ νŠΉμ • μ£Όμ†Œλ₯Ό 직접 μˆ˜μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

local dbg = require "builtins.scripts.mobdebug"
dbg.start("192.168.5.101")

λ˜ν•œ 이 κΈ°λŠ₯은 8172 포트λ₯Ό 톡해 TCP μ—°κ²°λ˜λ―€λ‘œ λ°©ν™”λ²½ λ“±μ˜ μ†Œν”„νŠΈμ›¨μ–΄κ°€ 원격 μž₯μΉ˜μ™€μ˜ 연결을 막고 μžˆμ§€ μ•Šμ€μ§€ μ²΄ν¬ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 디버깅 μ„œλ²„μ— μ—°κ²°ν•˜λ €κ³  μ‹œλ„ν•  λ•Œ 쀑단될 수 μžˆμŠ΅λ‹ˆλ‹€.

Other recommended ZeroBrane setting

디버깅 ν•˜λŠ” λ™μ•ˆ ZeroBrane이 μžλ™μœΌλ‘œ Lua 슀크립트 νŒŒμΌμ„ 열도둝 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 이 κΈ°λŠ₯은 μˆ˜λ™μœΌλ‘œ νŒŒμΌμ„ μ—΄μ§€ μ•Šμ•„λ„ λ‹€λ₯Έ μ†ŒμŠ€ 파일의 ν•¨μˆ˜ 정보λ₯Ό λ‹¨κ³„μ μœΌλ‘œ μ—΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

μš°μ„  μ—λ””ν„°μ˜ configuration νŒŒμΌμ„ μ—΄μ–΄μ„œ μ‚¬μš©μžμš© λ²„μ „μœΌλ‘œ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  1. Edit β–Έ Preferences β–Έ Settings: User 메뉴 선택
  2. configuration νŒŒμΌμ— μ•„λž˜ ν•­λͺ©μ„ 좔가함
    - λ””λ²„κΉ…ν•˜λŠ” λ™μ•ˆ μš”κ΅¬λ˜λŠ” νŒŒμΌμ„ μžλ™μœΌλ‘œ μ—Ό
    editor.autoactivate = true
    
  3. ZeroBrane을 μž¬μ‹œμž‘

Other recommended settings

Hot reloading

DefoldλŠ” λ¦¬μ†ŒμŠ€λ“€μ„ ν•«λ¦¬λ‘œλ“œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ²Œμž„μ„ κ°œλ°œμ€‘μΌ λ•Œ 이 κΈ°λŠ₯은 νŠΉμ • μž‘μ—…μ„ λŒ€λ‹¨νžˆ λΉ λ₯΄κ²Œ ν•  수 있게 도움을 μ€λ‹ˆλ‹€. κ²Œμž„μ΄ 라이브 μƒνƒœλ‘œ 싀행쀑인 λ™μ•ˆμ—λ„ 슀크립트λ₯Ό λ³€κ²½ ν•  수 있게 ν•΄ μ€λ‹ˆλ‹€. 일반적인 μ‚¬μš© μ‚¬λ‘€λ‘œλŠ” κ²Œμž„ν”Œλ ˆμ΄ λ§€κ°œλ³€μˆ˜λ“€μ„ μ‘°μ •ν•˜κ±°λ‚˜ κ²Œμž„ 싀행쀑에 디버깅을 μˆ˜ν–‰ν•˜λŠ” 사둀 등이 μžˆμŠ΅λ‹ˆλ‹€.

λ³€κ²½λœ λ¦¬μ†ŒμŠ€λ₯Ό λ¦¬λ‘œλ“œν•˜λ €λ©΄, Edit β–Έ Reload Resource 메뉴λ₯Ό μ„ νƒν•˜κ±°λ‚˜ ν•΄λ‹Ή 단좕킀λ₯Ό λˆ„λ₯΄λ©΄ λ©λ‹ˆλ‹€.

Reloading resources

λͺ¨λ“  슀크립트 μ»΄ν¬λ„ŒνŠΈλŠ” on_reload() ν•¨μˆ˜λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λ©΄ μŠ€ν¬λ¦½νŠΈκ°€ μ—λ””ν„°μ—μ„œ κ²Œμž„μœΌλ‘œ λ¦¬λ‘œλ“œ 될 λ•Œ μ–Έμ œλ“ μ§€ 호좜 λ©λ‹ˆλ‹€.

function on_reload(self)
    -- ν˜„μž¬ 속도 좜λ ₯
	print(self.velocity)

    -- 속도λ₯Ό 0으둜 μ„€μ •
    self.velocity = vmath.vector3()
end

Visual profiler

Defold 엔진은 ν”„λ‘œνŒŒμΌλ§ 정보λ₯Ό κ²Œμž„ 싀행쀑에 ν‘œμ‹œν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 이 κΈ°λŠ₯은 λ””λ²„κΉ…μ΄λ‚˜ μ΅œμ ν™”λ₯Ό ν•  λ•Œ 큰 도움이 λ©λ‹ˆλ‹€.

function on_reload(self)
    -- ν•«λ¦¬λ‘œλ“œ 될 λ•Œ ν”„λ‘œνŒŒμΌλŸ¬λ₯Ό μΌ¬
	msg.post("@system:", "toggle_profile")
end

ν”„λ‘œνŒŒμΌλŸ¬λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 싀행쀑일 λ•Œ μ‹€μ‹œκ°„ 정보λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

Visual profiler

Web profiler

κ²Œμž„μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ, μžμ„Έν•œ ν”„λ‘œνŒŒμΌλ§ 정보λ₯Ό μ œκ³΅ν•˜λŠ” μ›ΉκΈ°λ°˜ ν”„λ‘œνŒŒμΌλŸ¬μ—λ„ 접속 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 κΈ°λŠ₯은 데이터 지점듀을 μƒ˜ν”Œλ§ν•˜μ—¬ 더 μžμ„Ένžˆ 뢄석할 수 있게 ν•΄ μ€λ‹ˆλ‹€.

ν”„λ‘œνŒŒμΌλŸ¬μ— μ ‘μ†ν•˜κΈ° μœ„ν•΄μ„œλŠ”:

  1. λŒ€μƒ μž₯치(target device)μ—μ„œ κ²Œμž„μ„ μ‹œμž‘ν•¨
  2. μ›ΉλΈŒλΌμš°μ €λ₯Ό μ—΄μ–΄ http://<μž₯치의 IP address>:8002 둜 접속함

κ²Œμž„μ΄ λ°μŠ€ν¬νƒ‘ μ»΄ν“¨ν„°μ—μ„œ 싀행쀑이라면, http://localhost:8002 μ£Όμ†Œλ‘œ ν”„λ‘œνŒŒμΌλŸ¬μ— 접속 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€μƒ μž₯치의 IP μ£Όμ†ŒλŠ” Project β–Έ Target λ©”λ‰΄μ—μ„œλ„ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

Web profiler

이 ν”„λ‘œνŒŒμΌλŸ¬λŠ” 4개의 μ„Ήμ…˜μœΌλ‘œ λ‚˜λˆ„μ–΄μ Έ 있으며 ν˜„μž¬ μƒ˜ν”Œ λ°μ΄ν„°μ˜ 4κ°€μ§€ 뷰둜 각각 λ‹€λ₯΄κ²Œ λ³΄μ—¬μ€λ‹ˆλ‹€. μƒ˜ν”Œ 데이터λ₯Ό μ—…λ°μ΄νŠΈ ν•˜λ €λ©΄, 상단에 Capture λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ λ©λ‹ˆλ‹€.

Frames overview

ν”„λ ˆμž„ μ˜€λ²„λ·°λŠ” ν˜„μž¬ μƒ˜ν”Œλ§λœ 20 ν”„λ ˆμž„μ„ λ‚˜λž€νžˆ ν‘œμ‹œν•©λ‹ˆλ‹€. 각 λ°”(bar)의 λ†’μ΄λŠ” ν”„λ ˆμž„μ— μ†Œμš”λœ μ‹œκ°„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ™Όμͺ½μ˜ μˆ«μžλŠ” ν˜„μž¬ μƒ˜ν”Œ λ°μ΄ν„°μ˜ ν•œ ν”„λ ˆμž„μ—μ„œ 보낸 μ΅œλŒ€ μ‹œκ°„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

Frames overview

μ•„λž˜μ˜ ν”„λ ˆμž„ μ˜€λ²„λ·°λŠ” ν”„λ ˆμž„ 데이터λ₯Ό μžμ„Έν•˜κ²Œ λ³΄μ—¬μ€λ‹ˆλ‹€. μ˜€λ²„λ·°μ˜ ν”„λ ˆμž„ λ°”λ₯Ό ν΄λ¦­ν•΄μ„œ λ°μ΄ν„°λ·°μ—μ„œ νŠΉμ • ν”„λ ˆμž„μ˜ 데이터λ₯Ό λ‚˜νƒ€λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 클릭된 ν”„λ ˆμž„ λ°μ΄ν„°μ˜ ν”„λ ˆμž„ νƒ€μž„μ°¨νŠΈ(timechart)도 νŽ˜μ΄μ§€ ν•˜λ‹¨μ— λ³΄μ—¬μ€λ‹ˆλ‹€.

Frame data

ν”„λ ˆμž„ 데이터 λ·°λŠ” ν˜„μž¬ μ„ νƒλœ ν”„λ ˆμž„μ„ μžμ„Ένžˆ μ„ΈλΆ„ν™”ν•œ λ°μ΄ν„°μ˜ ν…Œμ΄λΈ”μž…λ‹ˆλ‹€. 이 λ·°μ—μ„œ 각 μ—”μ§„ μŠ€μ½”ν”„(scope)κ°€ μ–Όλ§ˆλ‚˜ λ§Žμ€ λ°€λ¦¬μ΄ˆ(milliseconds)λ₯Ό μ†Œλͺ¨ν–ˆλŠ”μ§€λ₯Ό μ•Œ 수 있으며(μ™Όμͺ½) μŠ€μ½”ν”„ 내에 μžˆλŠ” μƒ˜ν”Œ 지점(sample points)도 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€(κ°€μš΄λ°). 였λ₯ΈνŽΈμ—” μΉ΄μš΄ν„°(counter) ν…Œμ΄λΈ”μ΄ μžˆλŠ”λ°, μƒ˜ν”Œ λ°μ΄ν„°μ˜ 각 ν”„λ ˆμž„λ§ˆλ‹€ μš”μ²­λœ λ“œλ‘œμš° 콜(draw calls) 수λ₯Ό μΆ”μ ν•˜κΈ°κ°€ μ‰½μŠ΅λ‹ˆλ‹€.

Frame data

μƒ˜ν”Œ 포인트 λ˜λŠ” μΉ΄μš΄ν„°μ™€ κ΄€λ ¨λœ μ²΄ν¬λ°•μŠ€λ₯Ό ν΄λ¦­ν•˜λ©΄ 데이터λ₯Ό μ•„λž˜ ν”Œλ‘―μ— μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Frames plot

ν”„λ ˆμž„ ν”Œλ‘― λ·°λŠ” X μΆ•μ—λŠ” ν”„λ ˆμž„ 수, Y μΆ•μ—λŠ” μ‹œκ°„(λ°€λ¦¬μ΄ˆ)으둜 된 ν”„λ ˆμž„ 데이터 ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  μƒ˜ν”Œλ§λœ ν”„λ ˆμž„μ˜ ν”Œλ‘―μ„ λ³΄μ—¬μ€λ‹ˆλ‹€. 각 μ„ νƒλœ 데이터 ν¬μΈνŠΈλŠ” ν”„λ ˆμž„ 데이터 ν…Œμ΄λΈ”μ— μ§€μ •λœ νŠΉμ • μƒ‰μƒμœΌλ‘œ κ·Έλ €μ§‘λ‹ˆλ‹€.

Frames plot

Frame time chart

ν”„λ ˆμž„ νƒ€μž„ μ°¨νŠΈλŠ” μ„ νƒλœ ν”„λ ˆμž„ λ™μ•ˆ 엔진이 μ†Œλͺ¨ν•œ μ‹œκ°„μ„ μ•„μ£Ό μ‰½κ²Œ 쑰사할 수 있게 μ‹œκ°μ μœΌλ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

Frame timechart

(일뢀 κ·Έλž˜ν”½ 에셋은 Kenneyκ°€ μ œμž‘ν–ˆμŠ΅λ‹ˆλ‹€ : http://kenney.nl/assets)

⚠️ **GitHub.com Fallback** ⚠️