Godot: [TRACKER] ๋‹ค์Œ ๊ณ„ํš๋œ ํ˜ธํ™˜์„ฑ ์†์ƒ์—์„œ ์ด๋ฆ„ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ฉ”์„œ๋“œ, ์†์„ฑ ๋ฐ ์‹ ํ˜ธ

์— ๋งŒ๋“  2018๋…„ 02์›” 20์ผ  ยท  366์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: godotengine/godot

์ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ์— ๊ธฐํšŒ๊ฐ€ ์žˆ์„ ๋•Œ ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ณ ์ž ํ•˜๋Š” ์–ด์ƒ‰ํ•˜๊ฒŒ ๋ช…๋ช…๋˜๊ฑฐ๋‚˜ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ, ์†์„ฑ ๋ฐ ์‹ ํ˜ธ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ด์ „ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฌ๋ฏ€๋กœ ๊ฐ€๋ณ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋น„์ถ”์ฒœ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฅธ ํ›„: ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์œผ๋กœ ํ‘œ์‹œ๋จ - ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋จ - ์ „์ฒด ๋ถ€ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ(์˜ˆ: 3.1.x)์— ๋Œ€ํ•ด ์ ์–ด๋„ ํ•˜๋‚˜์˜ ์ „์ฒด ๋ถ€ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ์— ๋Œ€ํ•ด ๋‹ค์Œ ๋ถ€ ๋˜๋Š” ์ฃผ ๋ฒ„์ „ ๋ฒ”ํ”„์—์„œ ์ œ๊ฑฐ๋จ
  • ๋˜๋Š” ์ฃผ์š” ํ˜ธํ™˜์„ฑ ์ค‘๋‹จ ๋ฆด๋ฆฌ์Šค ๋‚ด์—์„œ(์˜ˆ: 3.0์ด 2.1๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ์‚ฌ์šฉ ์ค‘๋‹จ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์„ ํ˜ธ๋˜์–ด์•ผ ํ•จ).

๋ฉ”์„œ๋“œ, ์†์„ฑ ๋ฐ ์‹ ํ˜ธ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด #4397์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

A :tada: @akien-mga ๋˜๋Š” @Calinou๊ฐ€ ์ถ”๊ฐ€ํ•œ ๋ฐ˜์‘์€ ๋Œ“๊ธ€์˜ ์ œ์•ˆ์ด ์ด ๊ฒŒ์‹œ๋ฌผ์— ํ†ตํ•ฉ


ํด๋ž˜์Šค

  • [ ] OS* ๋Š” Platform* ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -403253127
  • [ ] Label : TextLabel https://github.com/godotengine/godot/issues/16863#issuecomment -502517425๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๊ณ ๋ ค
  • [ ] PHashTranslation ๋Š” CompressedTranslation ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํ—ค๋”์™€ ์ผ์น˜).
  • [ ] ResourceFormat* : ResourceFormatLoader , ResourceFormatSaver ๋ฐ ImageFormatLoader ๋ฅผ ์ƒ์†ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ๊ฒ€ํ† ํ•˜์—ฌ ๋™์ผํ•œ ๋ช…๋ช… ๊ทœ์น™(ํด๋ž˜์Šค ๋ฐ ํŒŒ์ผ ์ด๋ฆ„ ๋ชจ๋‘)์„ ๋”ฐ๋ฅด๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • [x] ShortCut ๋Š” Shortcut ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -685236980 #41926
  • [ ] TCP_Server ๋ฐ IP_Unix ์ด๋ฆ„์„ TCPServer ๋ฐ IPUnix #37700์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] Viewport ๋Š” ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ๋ณต์žกํ•˜๋ฉฐ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -631789777

ํ–‰๋™ ์–‘์‹

  • [ ] @GDScript (๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ์œ„์น˜): instance ๋™์‚ฌ/๋™์ž‘์œผ๋กœ ์‚ฌ์šฉ๋  ๋•Œ instantiate https://github.com/godotengine/godot/issues/ 16863#์ด์Šˆ ๋Œ“๊ธ€ -367061984
  • [x] @GDscript : decimals ๋Š” step_decimals ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. #21425
  • [ ] @GDscript : stepify ๋Š” ๋ฒกํ„ฐ์™€์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด snapped ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -655258916
  • [ ] AcceptDialog ๋ฐ ConfirmationDialog : get_ok ๋ฐ get_cancel ๋Š” get_ok_button ๋ฐ get_cancel_button ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค( WindowDialog.get_close_button ์ผ์น˜ https://github.com/godotengine/godot/issues/16863#issuecomment -421071469
  • [ ] AnimatedSprite2D ๋ฐ AnimatedSprite3D : stop ๋Š” pause ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/31168
  • [ ] Animation : track_remove_key_at_position ๋Š” track_remove_key_at_time ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] AnimationPlayer : play_backwards ์ œ๊ฑฐ ๊ฐ€๋Šฅ https://github.com/godotengine/godot/issues/16863#issuecomment -490298187
  • [ ] Area : set_audio_bus ๋ฐ get_audio_bus ์ด๋ฆ„์„ set_audio_bus_name ๋ฐ get_audio_bus_name ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ด€๋ จ ์†์„ฑ ๋ฐ ํ•ด๋‹น Area2D ์™€ ์ผ์น˜์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] Array (์ผ๋ถ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ PackedArrays์—๋„ ์ ์šฉ๋จ) https://github.com/godotengine/godot/issues/16863#issuecomment -441376010:

    • ๋ชจํ˜ธํ•จ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด remove ์„ remove_at (์ƒ‰์ธ๋ณ„๋กœ ์ œ๊ฑฐ)์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • ๋ชจํ˜ธํ•จ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด erase ์„ remove_value (๊ฐ’๋ณ„๋กœ ์ œ๊ฑฐ)์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • invert ์„ reverse ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ณด๋‹ค ํ™•๋ฆฝ๋œ ์ด๋ฆ„ ์ง€์ •

    • duplicate ์„ clone ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ณด๋‹ค ํ™•์‹คํ•œ ์ด๋ฆ„ ์ง€์ • ์‚ฌ์šฉ

    • empty ์„ is_empty ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐฐ์—ด์„ ๋น„์šฐ๋Š” ์ž‘์—…์ด ์•„๋‹ˆ๋ผ ๋ถ€์šธ ๊ฒ€์‚ฌ์ž„์„ ๋ถ„๋ช…ํžˆ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • [ ] Camera : set_znear ๋ฐ set_zfar ๋Š” near ๋ฐ far ์†์„ฑ๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค https://github.com/ godotengine/godot/issues/16863#issuecomment -412810788
  • [ ] Control : ์†์„ฑ ์ด๋ฆ„๊ณผ ํ•ด๋‹น setter/getter ์ด๋ฆ„ ๊ฐ„์˜ ๋ถˆ์ผ์น˜ https://github.com/godotengine/godot/issues/16863#issuecomment -381420942
  • [ ] CollisionShape : make_convex_from_brothers ๋Š” make_convex_from_siblings ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -493794313
  • [ ] EditorInterface : get_editor_viewport ์ˆ˜ get_editor_main_screen https://github.com/godotengine/godot/issues/16863#issuecomment -634258502 + 2๊ฐœ์˜ ๋‹ค์Œ ๋Œ“๊ธ€
  • [x] GridMap : set_cell_item (3 int s) Vector3i #39958 ๋ฒ„์ „์œผ๋กœ ๋Œ€์ฒด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] InputMap : load_from_globals ๋Š” load_from_project_settings ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -426457888
  • [ ] ItemList : unselect ์™€ unselect_all ๋Š” deselect ์™€ deselect_all ์ด์–ด์•ผ ํ•˜๋ฉฐ, ์œ ์‚ฌํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„ ๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. FileDialog ์—๋„ deselect_items ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ #28558 ์กฐํ™”์‹œํ‚ค์‹ญ์‹œ์˜ค.
  • [ ] JSON : print ๋Š” https://github.com/godotengine/godot/issues/16863#issuecomment -557657413 + ๋‹ค์Œ 6๊ฐœ์˜ ๋Œ“๊ธ€๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] KinematicBody ๋ฐ KinematicBody2D : API๊ฐ€ ์œ ๊ธฐ์ ์œผ๋กœ ์„ฑ์žฅํ•˜๊ณ  ์ƒ๋‹นํžˆ ๋ณต์žกํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ฉ”์†Œ๋“œ ์ธ์ˆ˜์˜ ๋ฆฌํŒฉํ„ฐ๋ง/์žฌ์ •๋ ฌ์€ ํ™˜์˜๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: #16757 #19648 ์ฐธ์กฐ).
  • [ ] MainLoop : _iteration ๋Š” _physics_process , _idle ๋Š” _process ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋น„ ๊ฐ€์ƒ ๋ฉ”์„œ๋“œ๋Š” ๋…ธ์ถœ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ input_text ๋Š” ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. #30096
  • [ ] Mesh : surface_get_material -> get_surface_material ๋ฐ surface_set_material -> set_surface_material https://github.com/godotengine/godot/ ๋ฌธ์ œ/16863#issuecomment -652067884
  • [x] Node : get_index ๋ฐ get_position_in_parent ๋Š” ๋™์˜์–ด์ด๋ฏ€๋กœ ํ•˜๋‚˜๋Š” ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. #21802 #37556
  • [ ] Node : is_a_parent_of ๋Š” is_ancestor_of ๋˜๋Š” is_descendant_of ๋กœ ๋Œ€์ฒด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment - 564532042
  • [x] Node : set_as_toplevel ๊ฐ€ set_as_top_level ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ ๋™์ž‘์„ ์กฐ์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment - 498428024 https://github.com/godotengine/godot/issues/24154 #42451
  • [ ] Node2D ๋ฐ Node3D : ๊ฐœ์ฒด-๋กœ์ปฌ ๋ฒˆ์—ญ ์ฝ”๋“œ์™€ ๋ถˆ์ผ์น˜ https://github.com/godotengine/godot/issues/16863#issuecomment -530519327
  • [ ] OptionButton : get_selected_id ๋Š” #21837 ์ดํ›„์— ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • [ ] OS : Engine ์‹ฑ๊ธ€ํ†ค์—์„œ๋Š” can_draw ๊ฐ€ ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • [ ] OS : execute ๋Š” ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ถ„ํ• ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์ฐจ๋‹จํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋น„์ฐจ๋‹จ์ž…๋‹ˆ๋‹ค.
    ์˜ˆ: ์ด๋ฆ„: execute / exec_process (์ฐจ๋‹จ) ๋ฐ spawn_process (๋น„์ฐจ๋‹จ) #19302
  • [x] ๋ฌผ๋ฆฌํ•™(๋‹ค์–‘ํ•œ ํด๋ž˜์Šค): add_force ๋ฐ apply_impulse ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜ ์ˆœ์„œ์˜ ์กฐํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -416791048 #37350
  • [ ] Quat : set ๋ฉ”์†Œ๋“œ ํ์ง€ ๊ณ ๋ ค https://github.com/godotengine/godot/issues/16863#issuecomment -515892880
  • [] Rect2 : ๋ฐ”๊พธ๊ธฐ clip ์— intersection ์™€ ์ผ๊ด€์„ฑ AABB . https://github.com/godotengine/godot/issues/16863#issuecomment -655299536
  • [ ] RichTextLabel : set_use_bbcode ๋ฐ set_bbcode ์ด๋ฆ„์„ set_use_fixed_bbcode ๋ฐ set_fixed_bbcode ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. bbcode๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ์˜ํ•ด ์ˆ˜์ •๋˜๋ฉด ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. #19118
  • [ ] Skeleton : set_bone_global_pose ๋Š” set_bone_skeleton_pose ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ฒŒํ„ฐ์—์„œ๋„ ๋™์ผ). get_bone_transform ๋„ ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. #19551
  • [ ] Sprite , Sprite3D : set_region ๋ฐ is_region ์ด๋ฆ„์„ set_region_enabled ๋ฐ is_region_enabled https:// github.com/godotengine/godot/issues/16863#issuecomment -380225780
  • [ ] String : ord_at ๋ถˆ๋ถ„๋ช…ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ, unicode_at ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ์ œ์•ˆ #15519
  • [ ] String: right ๋™์ž‘์ด ์ง๊ด€์ ์ด์ง€ ์•Š๊ณ  ๋Œ€๋ถ€๋ถ„ substr https://github.com/godotengine/godot/issues/16863#issuecomment -419635744์™€ ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค.
  • [ ] String : http_escape ๋ฅผ uri_encode , http_unescape ๋ฅผ uri_decode https://github.com/godotengine/godot/issues /16863#์ด์Šˆ ๋Œ“๊ธ€ -503491938
  • [ ] Texture2D : get_data ๋Š” get_image ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -652064475
  • [x] TileMap : set_y_sort_mode ๋ฐ is_y_sort_mode_enabled ๋Š” set_y_sort_enabled ๋ฐ is_y_sort_enabled ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค https://github.com/godotengine/ Godot/issues/16863#issuecomment -380250110 #38635
  • [ ] TileMap : ์†์„ฑ ์ด๋ฆ„๊ณผ ํ•ด๋‹น setter/getter ์ด๋ฆ„ ๊ฐ„์˜ ๋ถˆ์ผ์น˜ https://github.com/godotengine/godot/issues/16863#issuecomment -382545668
  • [ ] TileMap : set_cell (2 int s) ๋ฐ set_cellv ( Vector2 )๋Š” Vector2i ๋ฒ„์ „์œผ๋กœ ๋Œ€์ฒด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] Tree : get_selected ๋Š” get_active https://github.com/godotengine/godot/issues/16863#issuecomment -425712040๊ณผ ๊ฐ™์ด ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [x] Tween : ๋งŽ์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์ด์œ  ์—†์ด bool ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ void ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -420286639 #36844
  • [x] UndoRedo : is_commiting_action ์— ์˜คํƒ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. "์ปค๋ฐ‹"ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] VisualServer : sync ๋ฐ draw ๋ฐ”์ธ๋”ฉ์€ ๊ธฐ์กด force_sync ๋ฐ force_draw #15892๋ฅผ ์œ„ํ•ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] Vector2 : tangent ๋Š” ๋ชจํ˜ธํ•˜๊ฑฐ๋‚˜ ๋ถ€์ •ํ™•ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ perpendicular ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -618294043 https //github.com/godotengine/godot/pull/39685
  • [ ] XRPositionalTracker : get_type -> get_tracker_type ๋ฐ get_name -> get_tracker_name https://github.com/godotengine/godot/ Issues/16863#issuecomment -571283702 https://github.com/godotengine/godot/issues/15763#issuecomment -568908661 #36382 https://github.com/godotengine/godot/issues/16863#issuecomment -494

์†์„ฑ

์‹ ํ˜ธ

  • [ ] CanvasItem : hide ์ด๋ฆ„์„ hidden ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] Tabs : tab_close ๋ฐ tab_hover ์ฒ ์ž๋Š” tab_closed ๋ฐ tab_hovered ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • [ ] Tree : item_activated (๋ ˆ์ด๋ธ” ๋”๋ธ” ํด๋ฆญ) ๋ฐ item_double_clicked (์•„์ด์ฝ˜ ๋”๋ธ” ํด๋ฆญ), ์ด๋ฆ„์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ์ œ๋Œ€๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. #16839
  • [ ] XRController : button_release ์ฒ ์ž๋Š” button_released ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ button_pressed )

์—ด๊ฑฐ

์ƒ์ˆ˜

  • [ ] ์ „์—ญ ๋ฒ”์œ„: PROPERTY_USAGE_STORE_IF_NONZERO ๋ฐ PROPERTY_USAGE_STORE_IF_NONONE ๋„ GDNative์—์„œ ์™„์ „ํžˆ ์‚ญ์ œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ๋งˆ ์•„์ดํ…œ

  • [ ] ItemList , LineEdit , RichTextLabel , TextEdit ๋ฐ Tree : font_color_selected ์ด๋ฆ„์„ font_selected_color ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. _color ์†์„ฑ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. #30018

์‚ฌ๋ฌผ

  • [x] CapsuleShape ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ˜์ง์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. #36488

์Œ์˜ ์–ธ์–ด

  • [ ] WORLD_MATRIX ๋Š” ์‹ค์ œ๋กœ ๋ชจ๋ธ ๋ทฐ ํ–‰๋ ฌ์ด๋ฉฐ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. @reduz ๊ทธ๊ฒƒ์„ ๋Œ€์ฒดํ•˜๋Š” ์ œ์•ˆ (๊ทธ๋ฆฌ๊ณ  CAMERA_MATRIX ๋„๋ฉด ํ–‰๋ ฌ ์ธ) ๋“ฑ ์‹ค์ œ ๋ชจ๋ธ ๋ทฐ ๋งคํŠธ๋ฆญ์Šค์— ์˜ํ•ด, CANVAS_MATRIX ๋ฐ ITEM_MATRIX .

ํ”„๋กœ์ ํŠธ ์„ค์ •

  • [ ] display/window/size/test_width ๋ฐ test_height ์ด๋ฆ„์„ window_width ๋ฐ window_height ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ width ๋ฐ height ์„ค์ •์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ render_width ๋ฐ render_height ์ž…๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/16863#issuecomment -412308210

ํŒŒ์ผ ํ˜•์‹

breaks compat enhancement core tracker

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜์—๊ฒŒ ๋„ˆ๋ฌด ์ง€๋ฃจํ•˜์ง€๋งŒ ๋™์‚ฌ๋กœ ์‚ฌ์šฉ๋˜๋Š” instance ๋ฅผ instantiate ๋กœ ์ˆ˜์ •ํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ Godspeed.

๋ชจ๋“  366 ๋Œ“๊ธ€

๋‚˜์—๊ฒŒ ๋„ˆ๋ฌด ์ง€๋ฃจํ•˜์ง€๋งŒ ๋™์‚ฌ๋กœ ์‚ฌ์šฉ๋˜๋Š” instance ๋ฅผ instantiate ๋กœ ์ˆ˜์ •ํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ Godspeed.

16116

Sprite.set_region(val) -> Sprite.set_region_enabled(val)
Sprite.is_region() -> Sprite.is_region_enabled()

TileMap.set_y_sort_mode(val) -> TileMap.set_y_sort_enabled(val)
TileMap.is_y_sort_mode_enabled() -> TileMap.is_y_sort_enabled()

rect_min_size
Control.set_custom_minimum_size(๊ฐ’) -> Control.set_rect_min_size(๊ฐ’)
Control.get_custom_minimum_size() -> Control.get_rect_min_size

Control ํด๋ž˜์Šค์—๋Š” get/set์ด ๋ชจ๋‘ ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ๋” ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์•Œ ๋•Œ๋งˆ๋‹ค ๋„ํฌ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค.

TileMap ํด๋ž˜์Šค์—๋Š” ํ•ด๋‹น ์†์„ฑ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” getter ๋ฐ setter ๋ฉ”์„œ๋“œ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋‚˜๋Š” ๊ทธ ํด๋ž˜์Šค์— ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ getter์™€ setter์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋“ค์€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์ด๋ฆ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์†์„ฑ์—๋„ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

Animation.track_remove_key_at_position์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Animation.track_remove_key_at_time

ํ–‰๋™ ์–‘์‹

  • OS : execute ๋Š” ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ถ„ํ• ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์ฐจ๋‹จ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋น„์ฐจ๋‹จ์ž…๋‹ˆ๋‹ค.
    ์˜ˆ: ์ด๋ฆ„: execute / exec_process (์ฐจ๋‹จ) ๋ฐ spawn_process (๋น„์ฐจ๋‹จ) #19302

LineEdit์—๋Š” "text_changed"์— ๋Œ€ํ•œ new_text ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์ง€๋งŒ TextEdit์—๋Š” ์—†์Šต๋‹ˆ๋‹ค.

https://github.com/godotengine/godot/blob/master/scene/gui/text_edit.cpp#L6104
https://github.com/godotengine/godot/blob/master/scene/gui/line_edit.cpp#L1466

VBoxContainer/HBoxContainer/GridContainer๊ฐ€ ๊ฐ„๋‹จํ•œ VBox/HBox/Grid๋กœ ์ด๋ฆ„์ด ๋ฐ”๋€Œ์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค...

๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์— pos->position ์ฒ˜๋Ÿผ ๋„ˆ๋ฌด ์งง์•„์„œ ๋‹ค์‹œ ์ด๋ฆ„์ด ๋ฐ”๋€๋‹ˆ๋‹ค. :D

๊ทธ๋“ค์€ ์กฐ๊ธˆ ๊ธธ๋‹ค ๋‹น์‹ ์ด ์˜ณ๋‹ค.

๋‚˜๋Š” Godot๊ฐ€ ํ˜„์žฌ ๊ทธ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์— ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ช…๋ช… ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ ธ์Šต๋‹ˆ๋‹ค.

๋•Œ๋กœ๋Š” [action][object]() ํ˜•์‹๊ณผ ๊ฐ™์€ C# ๋˜๋Š” Java์™€ ๊ฐ™์€ ์–ธ์–ด์˜ API์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  • Mesh.GetBlendShapeName()
  • AnimationPlayer.GetCurrentAnimation()
  • Button.GetButtonIcon()

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด [prefix][action][object]() ์˜ ๋‹ค๋ฅธ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  • Mesh.SurfaceGetFormat()
  • AnimationTreePlayer.NodeGetInputCount()
  • CollisionObject.ShapeOwnerGetOwner()

๊ทธ๊ฒƒ๋“ค์€ ๋งŽ์€ ๊ฒƒ ์ค‘ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋ฏธ๋ž˜์— ํ˜ธํ™˜์„ฑ์„ ๊นจ๋Š” ์ „๋ฉด์ ์ธ ๋ณ€๊ฒฝ์„ ํ•  ์—ฌ์œ ๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ•˜๋‚˜์˜ ์ž˜ ์ •์˜๋œ ๋ช…๋ช… ๊ทœ์น™์„ ๋”ฐ๋ฅด๋„๋ก ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด [prefix][action][object]() ์˜ ๋‹ค๋ฅธ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  • Mesh.SurfaceGetFormat()
  • AnimationTreePlayer.NodeGetInputCount()
  • CollisionObject.ShapeOwnerGetOwner()

๋‚˜๋Š” ๋ชจ๋“  ์‚ฌ์šฉ๋ฒ•์„ ๋‹ค์‹œ ํ™•์ธํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋ณธ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ์ด ์Šคํƒ€์ผ์˜ ์ด๋ฆ„ ์ง€์ •์€ ๋‹ค์†Œ ์–ด์ƒ‰ํ•˜์ง€๋งŒ ํŠน์ • ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด shape_owner_get ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

doc/classes/CollisionObject.xml
101:            <method name="shape_owner_get_owner" qualifiers="const">
110:            <method name="shape_owner_get_shape" qualifiers="const">
121:            <method name="shape_owner_get_shape_count" qualifiers="const">
130:            <method name="shape_owner_get_shape_index" qualifiers="const">
141:            <method name="shape_owner_get_transform" qualifiers="const">

"์ ‘๋‘์‚ฌ"๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ get ๋’ค์˜ ๋ถ€๋ถ„์€ ์‹ค์ œ๋กœ ํ•ด๋‹น ์ ‘๋‘์‚ฌ์—์„œ ์–ป๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด shape_owner_get_shape_index(owner_id, shape_id) ๋Š” ๊ฐœ๋…์ ์œผ๋กœ get_shape_owner(owner_id)->get_shape_index(shape_id) ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์Šคํฌ๋ฆฝํŒ… API์— ๋…ธ์ถœ๋œ ShapeOwner ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ด "๋ฐ”๋กœ ๊ฐ€๊ธฐ"์ž…๋‹ˆ๋‹ค.

surface_get ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๋™์ผํ•œ ์ด์•ผ๊ธฐ:

doc/classes/ArrayMesh.xml
88:             <method name="surface_get_array_index_len" qualifiers="const">
97:             <method name="surface_get_array_len" qualifiers="const">
106:            <method name="surface_get_arrays" qualifiers="const">
114:            <method name="surface_get_blend_shape_arrays" qualifiers="const">
122:            <method name="surface_get_format" qualifiers="const">
131:            <method name="surface_get_material" qualifiers="const">
140:            <method name="surface_get_name" qualifiers="const">
148:            <method name="surface_get_primitive_type" qualifiers="const">

doc/classes/VisualServer.xml
2363:           <method name="mesh_surface_get_aabb" qualifiers="const">
2374:           <method name="mesh_surface_get_array" qualifiers="const">
2385:           <method name="mesh_surface_get_array_index_len" qualifiers="const">
2396:           <method name="mesh_surface_get_array_len" qualifiers="const">
2407:           <method name="mesh_surface_get_arrays" qualifiers="const">
2418:           <method name="mesh_surface_get_blend_shape_arrays" qualifiers="const">
2429:           <method name="mesh_surface_get_format" qualifiers="const">
2440:           <method name="mesh_surface_get_index_array" qualifiers="const">
2451:           <method name="mesh_surface_get_material" qualifiers="const">
2462:           <method name="mesh_surface_get_primitive_type" qualifiers="const">
2473:           <method name="mesh_surface_get_skeleton_aabb" qualifiers="const">

๋˜๋Š” ATP์˜ *node_get ๋ฉ”์„œ๋“œ:

doc/classes/AnimationTreePlayer.xml
35:             <method name="animation_node_get_animation" qualifiers="const">
44:             <method name="animation_node_get_master_animation" qualifiers="const">
53:             <method name="animation_node_get_position" qualifiers="const">
109:            <method name="blend2_node_get_amount" qualifiers="const">
146:            <method name="blend3_node_get_amount" qualifiers="const">
172:            <method name="blend4_node_get_amount" qualifiers="const">
225:            <method name="mix_node_get_amount" qualifiers="const">
255:            <method name="node_get_input_count" qualifiers="const">
264:            <method name="node_get_input_source" qualifiers="const">
275:            <method name="node_get_position" qualifiers="const">
284:            <method name="node_get_type" qualifiers="const">
315:            <method name="oneshot_node_get_autorestart_delay" qualifiers="const">
324:            <method name="oneshot_node_get_autorestart_random_delay" qualifiers="const">
333:            <method name="oneshot_node_get_fadein_time" qualifiers="const">
342:            <method name="oneshot_node_get_fadeout_time" qualifiers="const">
478:            <method name="timescale_node_get_scale" qualifiers="const">
523:            <method name="transition_node_get_current" qualifiers="const">
532:            <method name="transition_node_get_input_count" qualifiers="const">
541:            <method name="transition_node_get_xfade_time" qualifiers="const">

์ง€๊ธˆ๊นŒ์ง€ ์ œ๊ณต๋œ ๋Œ€๋ถ€๋ถ„์˜ ์ œ์•ˆ์œผ๋กœ OP๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

VBoxContainer/HBoxContainer/GridContainer์˜ ์ด๋ฆ„์„ ๋‹จ์ˆœ VBox/HBox/Grid๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. Godot์—์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ๊ฒƒ์— ๋ช…ํ™•ํ•œ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Grid ๋Š” ๊ทธ๊ฒƒ์ด ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. VBox ๋ฐ HBox ์ƒ์ž๊ฐ€ ์ •์˜์ƒ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ์ฃผ์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Container ์™€ ๋™์ผํ•˜์ง€ ์•Š์€ BoxContainer ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ œ ์ƒ๊ฐ์—๋Š” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ณด์ฆ๋ฉ๋‹ˆ๋‹ค.

LineEdit์—๋Š” "text_changed"์— ๋Œ€ํ•œ new_text ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์ง€๋งŒ TextEdit์—๋Š” ์—†์Šต๋‹ˆ๋‹ค.

TextEdit์— new_text ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์œ ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. LineEdit์—์„œ๋Š” ๋ณ€๊ฒฝ๋œ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ LineEdit์˜ ์ „์ฒด ํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ LineEdit์˜ text_changed ์—๋Š” ์—†์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒˆ ๋ฌธ์ž๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์—ฌ๋Ÿฌ ์ค„ TextEdit์˜ ์ „์ฒด ํ…์ŠคํŠธ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ž…๋ ฅ ์‹œ LineEdit์˜ ์ „์ฒด ํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

@akien-mga

๋ชจ๋“  ์‚ฌ์šฉ๋ฒ•์„ ๋‹ค์‹œ ํ™•์ธํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์ด ์Šคํƒ€์ผ์˜ ์ด๋ฆ„ ์ง€์ • ๋ฐฉ์‹์€ ๋‹ค์†Œ ์–ด์ƒ‰ํ•˜์ง€๋งŒ ํŠน์ • ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์ž์ฒด ๋ช…๋ช… ๊ทœ์น™์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹Godot ์™ธ๋ถ€์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ, ๋•Œ๋กœ๋Š” BlendShape ์™€ ๊ฐ™์€ ๋™์ผํ•œ ๋‹จ์–ด๊ฐ€ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ช…๋ช… ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š” ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๋ชจ๋‘ GetPrefix* ๋ฐ SetPrefix* ์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์ด์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์˜๊ฒฌ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ•์ด #16757์—์„œ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ์ˆ˜ ์ˆœ์„œ๊ฐ€ ๋” ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ 3.0๊ณผ 3.1 ์‚ฌ์ด์˜ API ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค(#19648).

#9128์„ ๋‹ค์‹œ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. 3D์˜ translation ๋Œ€ 2D์˜ position ๋Š” ์ด์ƒํ•œ ๋น„์œ ์‚ฌ์ž…๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์€ 3.0 ์ด์ „์— ๋‚˜์ด๋ฅผ ๋จน์—ˆ์ง€๋งŒ 3.0์ด ๋‚˜๊ฐ„ ํ›„ ํ์‡„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

OS.execute ๋Š” posix_spawn ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ œ์–ด ๋…ธ๋“œ์— ๋Œ€ํ•ด "์—ฌ๋ฐฑ"์˜ ์ด๋ฆ„์„ "์˜คํ”„์…‹"์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๋ฐฑ์€ ์˜ค๋ฅธ์ชฝ์—์„œ ์Œ์ˆ˜์ด๋ฏ€๋กœ ํŠนํžˆ StyleBox์™€ ๋น„๊ตํ•  ๋•Œ ์‚ฌ๋žŒ๋“ค์„ ์˜ค๋„ํ•ฉ๋‹ˆ๋‹ค.

@groud ์˜คํ”„์…‹์ด ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์—ฌ๋ฐฑ์€ ์ฒ˜์Œ ๋„์ž…๋  ๋•Œ ์˜ค๋ฅธ์ชฝ์— ๋ถ€์ •์ ์ธ ๋ฐฉํ–ฅ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅธ ๋‹จ์–ด๋กœ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@groud ์˜คํ”„์…‹์ด ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์—ฌ๋ฐฑ์€ ์ข‹์€ ์šฉ์–ด์˜€์Šต๋‹ˆ๋‹ค(์ฒ˜์Œ ๋„์ž…ํ–ˆ์„ ๋•Œ ์Œ์ˆ˜๊ฐ€

์Œ, ๋งˆ์ง„์€ ์ด์ œ ์Œ์ˆ˜์ด๋ฏ€๋กœ ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”„์…‹์€ ์ผ๋ฐ˜์ ์ด์ง€๋งŒ ๋” ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ œ์–ด ๋…ธ๋“œ์˜ ์ปจํ…์ŠคํŠธ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ด๋ผ๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ๋‚˜๋Š” ๋” ๋‚˜์€ ์ œ์•ˆ์— ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ ์ด๋ฆ„ ๋ณ€๊ฒฝ์ด ์ด๋ฏธ ์ œ์•ˆ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์•„์ด๋””์–ด๋ฅผ ์—ฌ๊ธฐ์— ์‚ญ์ œํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๊ธฐ ๋ฅผ ์ฐธ์กฐ

์ƒ์ž/ํ๋ธŒ์˜ ํฌ๊ธฐ ์ด๋ฆ„์ด ์ผ๊ด€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ถฉ๋Œ์— ๋Œ€ํ•œ BoxShape๋Š” ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
CubeMesh๋Š” x, y ๋ฐ z๊ฐ€ ๊ฐ๊ฐ ํฌ๊ธฐ์˜ ์ ˆ๋ฐ˜์ธ ํฌ๊ธฐ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
CSGBox์—๋Š” CubeMesh์˜ x, y, z ํฌ๊ธฐ์™€ ๊ฐ™์ด ์ •์˜๋œ Width, Height ๋ฐ Depth ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๊ธฐ ์†์„ฑ ์™ธ์— "Cube"๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  "Box"๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. CubeMesh์˜ x, y ๋ฐ z๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ๋”ฐ๋ผ์„œ ์ƒ์ž์ด๊ธฐ๋„ ํ•˜๋ฏ€๋กœ ๋ชจ๋“  ๊ฒƒ์— "Box"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ ์šด์˜ ์ฒด์ œ๊ฐ€ ์•„๋‹Œ HTML5 ๋ฐ UWP๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ OS ์ด๋ฆ„์„ Platform(PlatformWindows, PlatformUnix,...)์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.
OS/๋””์Šคํ”Œ๋ ˆ์ด ๋ถ„ํ• ์—๋„ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด #20228๋ถ€ํ„ฐ Label.clip_text ๋Š” ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Button.clip_text๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Camera2D์—๋Š” ํ˜„์žฌ offset (์ผ๋ฐ˜ ์˜คํ”„์…‹ ๋ฐ V์™€ H๋กœ ๋ถ„ํ• ๋œ ๊ฒƒ)๋ผ๋Š” ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์†์„ฑ์ด ์žˆ์œผ๋ฉฐ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ •๋ง ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

ํ–‰๋™ ์–‘์‹

- Dictionary : erase_checked ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ด ๋ฉ”์„œ๋“œ๋Š” ์Šคํฌ๋ฆฝํŠธ์— ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ).
- Dictionary : erase ๋Š” bool ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์–ด ์ง€์ •๋œ ํ‚ค๊ฐ€ ์žˆ๋Š” ์Œ์ด ์ œ๊ฑฐ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( erase_checked ๊ตฌํ˜„ ์ฐธ์กฐ).

20945

@neikeq ์ด๊ฒƒ์€ ์ด์ œ IMO์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Dictionary.erase ์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ void ์—์„œ bool ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@akien-mga ํ•˜์ง€๋งŒ GDNative API ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@akien-mga ์•ž์œผ๋กœ ํ˜ธํ™˜์„ฑ์ด ๊นจ์ง€์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์ž ์žฌ์ ์œผ๋กœ 3.1 ์Šคํฌ๋ฆฝํŠธ๊ฐ€ 3.0๊ณผ ๊ฐ™์€ ์ด์ „ ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ @neikeq, 3.1 ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด๋ฏธ 3.0์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ( class_name , ์ƒˆ๋กœ์šด ์„ ํƒ์  ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋˜๋Š” ์ƒˆ๋กœ์šด ์†์„ฑ / ๋ฉ”์†Œ๋“œ, ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ๋“ฑ๊ณผ API ๋ณ€๊ฒฝ์˜ ํ†ค). ์šฐ๋ฆฌ๋Š” ์ด์ „ ๋ฒ„์ „์ด ์•„๋‹Œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ๋งŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•Œ ๊ฒ ์–ด์š”! ๊ทธ๋ ‡๋‹ค๋ฉด ์ง€๊ธˆ ๋ณ€๊ฒฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชฉ๋ก์— ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด LineEdit ๋ฐ TextEdit ์ œ์–ด ๋…ธ๋“œ๋Š” ์„œ๋กœ ์ผ๊ด€์„ฑ ์žˆ๋Š” API๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์‹ค์ œ๋กœ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ (๋Œ€๋ถ€๋ถ„) ์ƒํ˜ธ ๊ตํ™˜ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ํ•œ ๋…ธ๋“œ๋ฅผ ๋ณด๊ณ  ์žˆ์œผ๋ฉด ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋Œ€ํ•ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์งˆ ์ •๋„๋กœ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด ์—‰๋ง์ง„์ฐฝ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

@eska014 ๋˜ํ•œ scons ์˜ต์…˜์€ ์ด๋ฏธ platform ์ž…๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์„ค์ • display/window/size/test_width ๋ฐ test_height ์ด๋ฆ„์„ window_width ๋ฐ window_height ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ width ๋ฐ height ์„ค์ •์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ render_width ๋ฐ render_height ์ž…๋‹ˆ๋‹ค.

์นด๋ฉ”๋ผ์˜ ๊ทผ๊ฑฐ๋ฆฌ ๋ฐ ์›๊ฑฐ๋ฆฌ ์†์„ฑ์€ setter/getter์™€ ์ด๋ฆ„์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค(์˜ˆ: set_znear/set_zfar). ์ด๊ฒƒ์€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

znear ๋ฐ zfar ๊ฐ€ ํ˜ผ๋™๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์„ธ๊ณ„ ๊ณต๊ฐ„์˜ Z ์ถ•๊ณผ ์•„๋ฌด ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ํด๋ฆฌํ•‘ ํ‰๋ฉด์„ ์ œ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— clip_near ๋ฐ clip_far ๋˜๋Š” near ๋ฐ far ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฆฌ์†Œ์Šค ํ™•์žฅ์„ ์—†์• ๊ฑฐ๋‚˜ ์ง„์ง€ํ•˜๊ฒŒ ๋…ผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (RES_BASE_EXTENSION)

gdscript_function.cpp ์™€ gdscript_functions.cpp ๋Š” ์ด๋ฆ„์ด ๋งค์šฐ ๋น„์Šทํ•˜์—ฌ ๊ณ„์† ํ˜ผ๋™๋ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? @vnen

https://github.com/godotengine/godot/pull/21425 ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ "decimals"์˜ ์ด๋ฆ„์„ "step_decimals"๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  "decimals"๋ฅผ ๋ณ„์นญ์œผ๋กœ ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณ‘ํ•ฉ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋‹ค์Œ ํ˜ธํ™˜์„ฑ ์†์ƒ์—์„œ "์†Œ์ˆ˜์ "์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฆ„๋งŒ ๋ฐ”๊พธ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@mysticfall ์ œ ์ƒ๊ฐ์—๋Š” ๋ถˆํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์— "get"์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋•Œ๋•Œ๋กœ ๋‹น์‹ ์€ ์†์„ฑ์ด get๊ณผ set์„ ๋ชจ๋‘ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•˜์ง€๋งŒ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. C#์—์„œ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งˆ์น˜ ํ•„๋“œ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ฝ๊ณ  ํ• ๋‹นํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 var thing = CollisionObject.ShapeOwner;
 CollisionObject.ShapeOwner = thing;

๊ทธ๋Ÿฌ๋‚˜ GDScript์—์„œ ์†์„ฑ์€ ์‚ฌ๋ฌผ(?)์ด ์•„๋‹™๋‹ˆ๋‹ค. get์ด๋ผ๋Š” ๋‹จ์–ด ์—†์ด ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์†Œ๋“œ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ set-ness๋ณด๋‹ค ์•”์‹œ์  get-ness๊ฐ€ ๋” ์ข‹์Šต๋‹ˆ๋‹ค. GDScript์—๋Š” ์†์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ๋” ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. setget ํ•˜์—ฌ GDScript ๋‚ด๋ถ€์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ฐพ์•˜์ง€๋งŒ C++๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์ผ๊ด€์„ฑ์ด ์—†๋Š” ์œ„์น˜์— "get"์ด ์žˆ๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ, ์ œ ์ƒ๊ฐ์— ์ด์ƒ์ ์ธ ์†”๋ฃจ์…˜ ์€ ํ˜„์žฌ GDScript ์†์„ฑ "get"์„ ์ œ๊ฑฐํ•˜๊ณ  "set"์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .

@aaronfranke GDScript์—๋Š” ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—”์ง„ ํด๋ž˜์Šค๊ฐ€ getter ๋ฐ setter(๋˜๋Š” getter๋งŒ)๋ฅผ ์ •์˜ํ•˜๊ณ  ์†์„ฑ์œผ๋กœ GDScript์— ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, 1) ์ด๋ฆ„์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  2) getter์™€ setter๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ์—์„œ get ๋ฐ set ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์— ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Mesh.SurfaceFormat() ๋Š” "ํ˜•์‹์„ ๊ฐ€์ ธ์˜ค๋Š”" ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ "ํ‘œ๋ฉด ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š”" ๋ฉ”์„œ๋“œ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋“ค ์ค‘ ๋Œ€๋ถ€๋ถ„(์ „๋ถ€๋Š” ์•„๋‹์ง€๋ผ๋„)์„ ๋ฌด์‹œํ•˜๊ณ  ์†์„ฑ์œผ๋กœ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ gdscript_function.cpp ๋ฐ gdscript_functions.cpp ๋Œ€ํ•ด ๊ทธ๋‹ค์ง€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” GDScriptFunction ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” GDScript ํ•จ์ˆ˜์˜ ์ •์˜๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์–ด๋Š ๊ฒƒ์ด ์–ด๋Š ๊ฒƒ์ธ์ง€ ํ•ญ์ƒ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์•„๋‹ˆ๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ, GDScript์—๋Š” ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. C# ์†์„ฑ์€ GDScript๊ฐ€ ์†์„ฑ์„ ๊ฐ€์ ธ์˜ค๋Š” ClassDB์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

RigidBody ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๊ด€๋ จ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

  • RigidBody.add_force(force, position) ~ add_force(position, force)
  • PhysicsDirectBodyState.add_force(force, position) ~ add_force(position, force)
  • PhysicsServer.body_add_force(force, position) ~ add_force(position, force)

ํด๋ž˜์Šค ๋ฐ ๋ฉ”์†Œ๋“œ ๋ชฉ๋ก

@TGRCdev add_force ๋ฅผ (์œ„์น˜, ํž˜)์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค apply_impulse ๋ฅผ (ํž˜, ์œ„์น˜)๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ํ›จ์”ฌ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ํž˜์˜ ์œ„์น˜๋Š” ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ๋์— ๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ํž˜๊ณผ ์ถฉ๋™์—๋Š” ํž˜ ๋ฒกํ„ฐ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@aaronfrank ํŽ˜์–ด ํฌ์ธํŠธ. ์ด ๊ฒฝ์šฐ ํ•„์š”ํ•œ ์Šค์™‘ ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • RigidBody.apply_impulse(position, impulse) ~ apply_impulse(impulse, position)
  • RigidBody2D.add_force(position, force) ~ add_force(force, position)
  • RigidBody2D.apply_impulse(position, impulse) ~ apply_impulse(impulse, position)
  • PhysicsDirectBodyState.apply_impulse(position, impulse) ~ apply_impulse(impulse, position)
  • Physics2DDirectBodyState.add_force(position, force) ~ add_force(force, position)
  • Physics2DDirectBodyState.apply_impulse(position, impulse) ~ apply_impulse(impulse, position)
  • PhysicsServer.body_apply_impulse(position, impulse) ~ body_apply_impulse(impulse, position)
  • Physics2DServer.body_add_force(position, force) ~ body_add_force(force, position)
  • Physics2DServer.body_apply_impulse(position, impulse) ~ body_apply_impulse(impulse, position)

@aaronfranke Get- ๋˜๋Š” Set- ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ C#์—์„œ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์ผ์ข…์˜ '์ž๋ฐ”์ฃผ์˜'๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ๋Š” shape_owner_get_shape ๋˜๋Š” node_get_input_count ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด '๋„๋ฉ”์ธ ์ ‘๋‘์‚ฌ'๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Get- ๋˜๋Š” Set- ์—†์ด ์ ์ ˆํ•œ C# ์†์„ฑ์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด

์ฐธ๊ณ ๋กœ ์ €๋Š” Godot์˜ C# API ์†์„ฑ์— ์ผ์น˜ํ•˜๋Š” getter ๋ฐ setter ์ง‘ํ•ฉ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ด์ƒํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Node.Name ๋ฐ Node.GetName() / Node.SetName() .

๋‚˜์—๊ฒŒ๋Š” ๋‹ค์†Œ ์ค‘๋ณต๋˜๋Š” ๋Š๋‚Œ์ด ๋“ค์ง€๋งŒ ๊ทธ๋Ÿฌํ•œ ๊ทœ์น™์„ ์œ ์ง€ํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ด์จŒ๋“  NodeInputCount ๋ฐ GetNodeInputCount() / SetNodeInputCount() ๋ชจ๋‘ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ๋Œ€๋กœ node_get_input_count ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„, Godot API์— ์ดˆ์ ์„ ๋งž์ถ˜ ์ด๋ฒˆ ํ˜ธ ์™ธ์˜ C# API ๋ฐ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์— ๋Œ€ํ•œ ๋…ผ์˜๋ฅผ ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค. Godot API(C++, C ๋ฐ GDScript)๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์— ๋Œ€ํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์ด ์•„๋‹Œ ํ•œ C#์„ ์œ„ํ•ด ์กฐ์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@akien-mga node_get_input_count ์ด๋ฆ„์„ get_node_input_count ์™€ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์€ C# ๊ณ ์œ ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, C# ๊ด€๋ จ ๋‚ด์šฉ์€ ์ด ๋ฌธ์ œ์— ํฌํ•จ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ C# ๊ด€๋ จ ํ˜ธํ™˜์„ฑ ์†์ƒ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋ฏธ ์—ฌ๋Ÿฌ IINM์ด ์žˆ์ง€๋งŒ).

Spatial์˜ ์ด๋ฆ„์„ Node3D๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ํ•ญ์ƒ ๊ทธ๊ฒƒ์„ ์ด์ƒํ•˜๊ฒŒ ์—ฌ๊ฒผ์Šต๋‹ˆ๋‹ค.

@KoBeWi Godot๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ช… ์ฒด๊ณ„๋Š” 2D ํ•ญ๋ชฉ์˜ ๊ฒฝ์šฐ "Thing2D"์ด๊ณ  3D ํ•ญ๋ชฉ์˜ ๊ฒฝ์šฐ "Thing"์ด๋ฏ€๋กœ ๋‚˜๋จธ์ง€ 2D ์ฝ”๋“œ์™€ ์ƒ๋‹นํžˆ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  "Spatial"์ด๋ผ๊ณ  ํ•˜๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฒƒ์€ "2D"๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํŒจํ„ด์— ๋”ฐ๋ผ "Node"์ด์ง€๋งŒ ๊ทธ ์ด๋ฆ„์€ ์ด๋ฏธ ์ทจํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ Godot๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ช… ์ฒด๊ณ„๋Š” 2D ํ•ญ๋ชฉ์˜ ๊ฒฝ์šฐ "Thing2D"์ด๊ณ  3D ํ•ญ๋ชฉ์˜ ๊ฒฝ์šฐ "Thing"์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ชจ๋“  3D๋ฅผ "Thing3D"๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ๋„ ๋‚ด ๋งˆ์Œ์„ ๋„˜์–ด ๊ฐ”์ง€๋งŒ ๊ณผ์ž‰์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.
์–ด์จŒ๋“ , ๋‚˜๋Š” ๋‹จ์ง€ ์ œ์•ˆํ–ˆ๋‹ค. ๋ณ„๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Spatial2D๋Š” Spatial๋ณด๋‹ค ํ›จ์”ฌ ๋‚˜์ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ String.right()๋Š” ์ฃผ์–ด์ง„ ์œ„์น˜์—์„œ n๊ฐœ์˜ ์˜ค๋ฅธ์ชฝ ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ n์ž๋งŒ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋” ์ง๊ด€์ ์ด์ง€ ์•Š์„๊นŒ์š”?

"abcdef".right(2)
"cdef" ๋Œ€์‹  "ef"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. IMO๊ฐ€ ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ–ˆ๋‹ค.

Python์—๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ GDScript๋ฅผ Python๊ณผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๊พธ๋ฉด ๋” ํ—ท๊ฐˆ๋ฆด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@KoBeWi ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ตฌํ˜„๊ณผ ํ•˜์œ„ ๋ฌธ์ž์—ด ๊ฐ„์˜ ์ฐจ์ด์ ์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Godot substr ๋Š” ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์›ํ•˜๋ฉด ๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

@Zylann ๋Œ€๋ถ€๋ถ„์˜ ๊ตฌํ˜„์—์„œ๋Š” ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ Godot ์ธก์˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, ๋‚˜๋Š” substr ๊ฐ€ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ƒˆ ๋ฉ”์†Œ๋“œ๋ณด๋‹ค ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ํƒ์‚ฌํ•ญ์œผ๋กœ ๋งŒ๋“ค๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

@Zylann @neikeq ์ด๊ฒƒ์€ ๊ธธ์ด ์ง€์ •๊ณผ ๊ธธ์ด ์ง€์ •์„ ๋ชจ๋‘ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.

@aaronfranke ์Œ, ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ธ์ˆ˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. 0 ๋˜๋Š” -1์€ ๊ธธ์ด๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ๊ฑฐํ•ด์•ผ get_selected_id() ์—์„œ OptionButton ํ˜„์žฌ ๊ทธ๊ฒƒ์€ ํ•ญ์ƒ -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. https://github.com/godotengine/godot/pull/21837 ์„ ๋ณ‘ํ•ฉํ•œ ํ›„ get_selected_id() ๋Š” get_selected() ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋งค๋ฒˆ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋งŽ์€ ํŠธ์œˆ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์•„๋งˆ๋„ ๋ฌดํšจํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WindowDialog.get_close_button()
ConfirmationDialog.get_cancel() -> ConfirmationDialog.get_cancel_button()
AcceptDialog.get_ok() -> AcceptDialog.get_ok_button()

Tree ๋…ธ๋“œ์—๋Š” get_selected() ํ•จ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉฐ ํฌ์ปค์Šค๊ฐ€ ์žˆ๋Š” TreeItem์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ํฌ์ปค์Šค์™€ ์„ ํƒ์€ ๋‹ค๋ฅธ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— get_active() ์™€ ๊ฐ™์ด ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

InputMap์˜ load_from_globals() ๋Š” load_from_project_settings() ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด OP์— ํ†ตํ•ฉ๋œ ๋ชจ๋“  ์ œ์•ˆ์— :tada: ๋ฐ˜์‘์„ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

global_rotate ๋Š” rotate_global , rotate_object_local ๋Š” rotate_local ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ์ผ๊ด€์„ฑ์ด ์œ ์ง€๋˜๊ณ  ๋ชจ๋“  ํšŒ์ „ ๋ฐฉ๋ฒ•์ด "ํšŒ์ „"์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

global_rotate์˜ ์ด๋ฆ„์€ rotate_global๋กœ, rotate_object_local์€ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด rotate_local๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฉฐ ๋ชจ๋“  ํšŒ์ „ ๋ฐฉ๋ฒ•์ด "rotate"๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ ๋‚˜๋Š” ์ž๋™ ์™„์„ฑ ์ œ์•ˆ์—์„œ global_position, global_scale ๋ฐ global_transform๊ณผ ๊ฐ™์€ ์ „์—ญ ๊ด€๋ จ ํ•จ์ˆ˜๊ฐ€ ์„œ๋กœ ์˜†์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์†”๋ฃจ์…˜ ๋ชจ๋‘ IMHO๊ฐ€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ tree_exiting ๋Š” tree_exited ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์ฏค์ด๋ฉด ์•ฝ๊ฐ„์˜ ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. #22840์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@groud ์ด๋ฏธ tree_exited ์‹œ๊ทธ๋„์ด ์žˆ๋Š”๊ฑฐ ๋งž์ฃ ?

@groud ์ด๋ฏธ tree_exited ์‹ ํ˜ธ๊ฐ€ ์žˆ์ฃ ?

์  ์žฅ, ๋‹น์‹  ๋ง์ด ๋งž์•„. #22840์˜ ์š”์ฒญ์ด ์œ ํšจํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

MenuItems.MENU_MAX ๋Š” LineEdit ๋ฐ TextEdit ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

Tabs.ALIGN_MAX https://github.com/godotengine/godot/blob/master/scene/gui/tabs.cpp#L750์— ๋Œ€ํ•ด ๋™์ผ

Position3D ๋ฐ Position2D ๋…ธ๋“œ๋Š” ์•ฝ๊ฐ„ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์„ค๋ช…์„ ์ฝ์ง€ ์•Š๊ณ  Spatial ๋ฐ Node2D์™€ ๋น„์Šทํ•˜์ง€๋งŒ ํšŒ์ „์ด๋‚˜ ํฌ๊ธฐ ์กฐ์ •์ด ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PositionHint ๋ฐ PositionHint2D ๋˜๋Š” Gizmo ๊ฐ™์€ ๋‹ค๋ฅธ ๋‹จ์–ด๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŽธ์ง‘๊ธฐ์—๋งŒ ์žˆ๋Š” ๊ธฐ์ฆˆ๋ชจ์ด๊ฑฐ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— AxisMarker ์ž‘์€ ์ถ• ๋งˆ์ปค.

Gizmo ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด ๋” ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Control ํŠธ๋ฆฌ์˜ ๋™์ผํ•œ ๋…ธ๋“œ๋Š” ReferenceRect ์ด๋ฏ€๋กœ ReferenceAxis/2D ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ด ๋ฌธ์ œ๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ํŒŒ์†์ด ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•˜๋ฉด ์‹ซ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ;)

๊ฒธ์†ํ•œ Array ์ˆ˜์—…์„ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ œ์•ˆ:

  • duplicate โ†’ copy ๋˜๋Š” clone . ์ €๋Š” ์ด ๊ฐœ๋…์„ "๋ณต์ œ"๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์–ธ์–ด๋ฅผ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. copy ๋Š” Python ๊ณผ C++ ์—์„œ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ Godot์—๊ฒŒ๋Š” ์ž์—ฐ์Šค๋Ÿฌ์šด ์„ ํƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. clone ๋Š” Java ๋ฐ JavaScript ์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋ฉฐ ์กฐ๊ธˆ ๋” ์ •ํ™•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • invert โ†’ reverse . ๋ฌธ์„œ์—์„œ๋Š” ์‹ฌ์ง€์–ด ๊ทธ๊ฒƒ์„ "๋ฐ˜๋Œ€"๋ผ๊ณ  ์„ค๋ช…ํ•˜๋ฏ€๋กœ ์‹ค์ œ๋กœ ๋ณ€๋ช…์˜ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • remove ๋Œ€ erase ๋Š” ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ: remove_at ๋ฐ remove_value .

๋งˆ์ง€๋ง‰ ๋‘ ๊ฐœ๋Š” ๋ชจ๋“  Pool*Array ํด๋ž˜์Šค์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : ๋ณต์ œ โ†’ ๋ณต์‚ฌ/๋ณต์ œ๋Š” ์‚ฌ์ „์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Rect2 :

  • clip โ†’ intersection

AABB ์—๋Š” intersection ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์ง€๋งŒ clip ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํด๋ฆฌํ•‘์€ ์ผ๋ฐ˜์ ์œผ๋กœ btw ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž˜๋ผ๋‚ด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Returns the intersection of this Rect2 and b.

์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • intersects โ†’ overlaps
    ์‹ค์ œ intersection ์ž‘์—…๊ณผ ํ˜ผ๋™๋˜์ง€ ์•Š๋„๋ก:
Returns true if the Rect2 overlaps with another.

grabber_area -> slider_progress
slider -> slider_background

image

๊ฒธ์†ํ•œ Array ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ œ์•ˆ:
๋ณต์ œ โ†’ ๋ณต์‚ฌ ๋˜๋Š” ๋ณต์ œ.
...
์ฐธ๊ณ : ๋ณต์ œ โ†’ ๋ณต์‚ฌ/๋ณต์ œ๋Š” ์‚ฌ์ „์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฐ ๋…ธ๋“œ ๋ฐ ๋ฆฌ์†Œ์Šค(๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ ๋…ธ์ถœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊ฐœ์ฒด, afaik).

๋‚˜๋Š” "Clone"์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์„ ํ˜ธํ•˜๋Š”๋ฐ, ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ์— ๋Œ€ํ•ด ๋” ๋ช…ํ™•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•„์นจ! @ akien-MGA ์šฐ๋ฆฌ๋Š” ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜์—†๋Š” instance ์— new ๋Œ€์‹  instantiate ? PackedScene ์— Object ์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํŠนํžˆ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒ์„ฑ์„ ์œ„ํ•œ ์ผ๋ถ€ ์ƒ์šฉ๊ตฌ๋ฅผ ์ œ๊ฑฐํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ๋” ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. @willnationsdev ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”? ๋‚˜๋Š” ๋‹น์‹ ์ด ์ „์— ์ด๊ฒƒ์„ ๊ฒช์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์–ด๋”˜๊ฐ€์— ์ด์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ›‘์–ด๋ด๋„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

grabber_area -> slider_progress
slider -> slider_background

image

๋˜๋Š” ๊ทธ๋ƒฅ:
grabber_area -> progress
slider -> background ?

์ด๊ฒƒ์ด ๋…ผ์˜๋˜์—ˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ AnimationPlayer ์—๋Š” root_node with set_root & get_root ์žˆ์œผ๋ฉฐ ์•„๋งˆ๋„ set/get_root_node

CanvasItem.visible ์„ CanvasItem.is_visible (๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์œ„์น˜)๋กœ ๋ฐ”๊พธ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ชจ๋“ (๋˜๋Š” ๋Œ€๋ถ€๋ถ„, ์•„๋งˆ๋„ ๋‚ด๊ฐ€ ๋†“์นœ) bool ์†์„ฑ๊ณผ ์ผ์น˜ํ•˜๋„๋ก?

์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ Tween.tween_completed ์— Tween.tween_finished ? Animation.animation_finished ์ฒ˜๋Ÿผ? ์ผ๋ฐ˜์ ์œผ๋กœ ์„ ํ˜ธ _finished ์ด์ƒ _completed ? started/finished ๊ฐ€ started/completed ๋ณด๋‹ค ๋” ๊ธด๋ฐ€ํ•œ ๊ด€๊ณ„๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. - ๊ฒฝ์Ÿ ์Šคํฌ์ธ ์—์„œ ํŽธํ–ฅ๋จ: start/finish - ์•„๋งˆ๋„ :D

JavaScript ํด๋ž˜์Šค ์ด๋ฆ„์„ HTML5 ๋˜๋Š” ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.
์ด ํด๋ž˜์Šค๋Š” ๋‹จ์ผ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ Script ์—์„œ ํ™•์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

JavaScript ๋Š” ํ–ฅํ›„ JavaScript ์–ธ์–ด ๋ฐ”์ธ๋”ฉ์˜ ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@clayjohn์ด ์ง€์ ํ–ˆ๋“ฏ์ด CanvasItem ์…ฐ์ด๋”์˜ WORLD_MATRIX ๋Š” ์‹ค์ œ๋กœ ๋ชจ๋ธ ๋ทฐ ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค. @reduz ๋Š” 4.0์—์„œ ์ด๋ฅผ ์‹ค์ œ ๋ชจ๋ธ ๋ฐ ๋ทฐ ๋งคํŠธ๋ฆญ์Šค(์˜ˆ: CANVAS_MATRIX ๋ฐ ITEM_MATRIX ๋Œ€์ฒดํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„์„ ๋ณ€๊ฒฝ ๊ณ ๋ ค Array.invert ์— Array.reverse . Invert๋Š” ๊ฑฐ๊พธ๋กœ ๋˜๋Š” "์ƒํ˜ธ" ์œ ํ˜•์˜ ๊ฒƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. https://docs.godotengine.org/en/latest/classes/class_color.html#class -color-method-inverted ์ฐธ์กฐ

CanvasItem.visibility_changed() ์‹ ํ˜ธ๋ฅผ CanvasItem.visibility_changed(visibility: bool) , ์ฆ‰. ๊ฐ€์‹œ์„ฑ ์ƒํƒœ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•  ๊ฒƒ์ด๋ฏ€๋กœ CanvasItem.hide() ์‹ ํ˜ธ๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

Resource::notify_change_to_owners , Resource::{un}register_owner
GridMap ๋ฐ CollisionShape์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋ฉฐ ๋‚˜๋จธ์ง€ ์ฝ”๋“œ๋Š” "changed" ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Rect2 : has_no_area ์ด๋ฆ„์„ has_area ๋กœ ๋ฐ”๊ฟ”์•ผ ์กฐ๊ฑด๋ฌธ์—์„œ ๋ฐ˜๋Œ€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ์ด์ค‘ ๋ถ€์ • ๋…ผ๋ฆฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AABB : has_no_surface ์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

@lupoDharkael์ด ๋งํ•œ ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ Godot์—๋Š” ์ด์ค‘ ๋ถ€์ •์ด ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ณณ์ด ์žˆ์Šต๋‹ˆ๋‹ค. "Condition !Math::is_nan(x) is false"์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๋Š” ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

parse_input_event(์ž…๋ ฅ ์ด๋ฒคํŠธ ์ด๋ฒคํŠธ)
๊ฒŒ์ž„์— InputEvent๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ์ž…๋ ฅ ์ด๋ฒคํŠธ๋ฅผ ์ธ์œ„์ ์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ ๋ถ„์„์ด ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ๊ณ  ๊ตฌ๋ฌธ ๋ถ„์„์ด ์ˆ˜์‹  ๋ฐ ์ฒ˜๋ฆฌ๋˜์ง€๋งŒ ์„ค๋ช…์€ ์ž…๋ ฅ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

#24153์— ๋”ฐ๋ผ - CanvasLayer ๋Š” ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ๋ฅผ ๊ทธ๋ฆด ๋ ˆ์ด์–ด๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฑฐ์˜ ๋ชจ๋“  ๋‹ค๋ฅธ 2D ๋…ธ๋“œ๋Š” ๋™์ผํ•œ ๊ฒƒ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด "Z ์ธ๋ฑ์Šค"( z_index )๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. @swarnimarun์ด ์ œ์•ˆํ•œ https://github.com/godotengine/godot/issues/24153#issuecomment -444950584 ๋ ˆ์ด์–ด ์ด๋ฆ„ ๊ฐœ์„ .

OS.has_feature() / Platform.has_feature()๊ฐ€ OS์— ๋Œ€ํ•ด ๋…์ ์ ์œผ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ProjectSettings์™€ ๊ฐ™์€ ๊ฒƒ์—์„œ ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

set_cell_item์€ GridMap๊ณผ TileMap์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด set_cell๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

set_cell_item์€ GridMap๊ณผ TileMap์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด set_cell๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ƒ๊ฐํ•ด ๋ณด๋‹ˆ GridMaps์—๋„ set_cellv ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ์š”?

ARVR์ธํ„ฐํŽ˜์ด์Šค:

  • ar_is_anchor_detection_enabled -> anchor_detection ๋˜๋Š” ์œ ์‚ฌ
  • interface_is_initialized -> is_initialized ๋˜๋Š” is_interface_initialized

์• ๋‹ˆ๋ฉ”์ด์…˜ ํ”Œ๋ ˆ์ด์–ด:

  • play_backwards play ์—๋Š” ์„ ํƒ์  bool์ด ์žˆ์œผ๋ฏ€๋กœ play_backwards ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BaseButton / CollisionShape / CollisionPolygon / CollisionShape2D / CollisionPolygon2D:

  • disabled ๋ถ€์šธ์„ enabled ๋ถ€์šธ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋ผˆ2D:

  • get_index_in_skeleton -> get_skeleton_index
  • play_backwards play ์—๋Š” ์„ ํƒ์  bool์ด ์žˆ์œผ๋ฏ€๋กœ play_backwards ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ ์–ด๋„ #6866์ด ๊ตฌํ˜„๋˜์ง€ ์•Š๋Š” ํ•œ ๊ฐ€๋…์„ฑ์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ช…๋ช…๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ C#์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

id_pressed( int ID ) ๋ฐ id_focused( int ID ) ID๋Š” ์†Œ๋ฌธ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

^^
๊ทธ ๋ณ€๊ฒฝ์€ ์‹ค์ œ๋กœ ์–ด๋–ค ํ˜ธํ™˜์„ฑ๋„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ณ„๋„์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

^^
๊ทธ ๋ณ€๊ฒฝ์€ ์‹ค์ œ๋กœ ์–ด๋–ค ํ˜ธํ™˜์„ฑ๋„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ณ„๋„์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„์š”!

28746 - Node.replace_by ๋Š” ์ด๋ฆ„์œผ๋กœ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋ฌด์—‡์ด ๋” ๋‚˜์€ ์ด๋ฆ„์ด ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@bojidar-bg ์•„๋งˆ๋„ replace_self ๋˜๋Š” swap_by ? ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ˜ผ๋ž€์„ ํ”ผํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ ์ ˆํ•˜๊ฒŒ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š”์ด์žˆ๋Š” ๊ฒฝ์šฐ Node2D ํฌํ•จ ๋ถ€์ฐฉ ๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ class_name MyNode2D ์˜ get_class() ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฆฌํ„ด Node2D ๋Œ€์‹  MyNode2D . ์ด๊ฒƒ์€ ์˜๋„์ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: https://github.com/godotengine/godot/issues/26980

@aaronfranke get_native_class() ์•„๋งˆ๋„? ๊ทธ๋Ÿฐ ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ get_script().global_name ์—์„œ ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

make_convex_from_brothers()
ํ˜•์ œ ๋…ธ๋“œ๋Š” ์–ด๋””์—์„œ๋‚˜ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— "ํ˜•์ œ"๋ฅผ "ํ˜•์ œ"๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ARVR์œ„์น˜ ์ถ”์ ๊ธฐ: get_type() -> get_tracker_type()

  • get_tracker_type() ๊ฐ€ ๋” ๋ช…์‹œ์ ์ž…๋‹ˆ๋‹ค. - get_type() ๊ฐ€ get_class() ์™€ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • GetType() ๋Š” ์—ฌ๊ธฐ์— ์–ธ๊ธ‰๋œ ๊ฒƒ์ฒ˜๋Ÿผ C#์—์„œ ์ด๋ฏธ ๋‹ค๋ฅธ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋ฐ˜ํ™˜ TrackerType , ๋˜ํ•œ์ด get_hand() ์žˆ๋Š” ๋ฐ˜ํ™˜ TrackerHand ์ด ๋˜ํ•œ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ๋„๋ก, get_tracker_hand() ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ผ๊ด€์„ฑ.

ARVRPositionalTracker ์—ด๊ฑฐํ˜• TrackerHand: TRACKER_LEFT_HAND -> TRACKER_HAND_LEFT (๋ฐ ์˜ค๋ฅธ์†). ๋˜๋Š” TRACKER_HAND_UNKNOWN -> TRACKER_UNKNOWN_HAND , ์ผ๊ด€์„ฑ์ด ์žˆ๋Š” ํ•œ.

Node.NOTIFICATION_TRANSLATION_CHANGED ๋Š” ์•„๋งˆ๋„ NOTIFICATION_LOCALE_CHANGED ๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "translation"์€ "์–ธ์–ด"๊ฐ€ ์•„๋‹ˆ๋ผ "์œ„์น˜"๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ์œ„ํ•ด ๊ณต๊ฐ„ ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

set_as_toplevel() ๋Š” set_as_top_level() ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ๋™์ž‘ ์„ ์‚ดํŽด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .

์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ TouchScreenButton์€ 4.0์—์„œ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/28814

CanvasItem ๋ฐฉ๋ฒ•:

RID get_canvas_item() ์ƒ์ˆ˜
VisualServer์—์„œ ์ด ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์บ”๋ฒ„์Šค ํ•ญ๋ชฉ RID๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„์„ get_rid() ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

get_canvas_item() ๋Š” ์ด๋ฏธ CanvasItem ๋…ธ๋“œ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ CollisionObject , Resource ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์ด๋ฏธ ์œ ์‚ฌํ•œ get_rid() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

Label ์„ TextLabel ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ด์ œ ์—ฌ๋Ÿฌ ๋ฒˆ ํ…์ŠคํŠธ ๊ฐœ์ฒด๋ฅผ ๋‚ด๋ ค ๋†“๊ณ  ์ด๋ฆ„์„ ์žŠ์–ด๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์— "ํ…์ŠคํŠธ"๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด RichTextLabel ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. TextLabel ๋Š” ์—ฌ์ „ํžˆ ํ…์ŠคํŠธ์ด์ง€๋งŒ ๋ฆฌ์น˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— RichTextLabel ์™€ ๋” ์ผ๊ด€์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ Unity์—๋Š” Text ์™€ TextMesh ์žˆ๋Š”๋ฐ ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๋ ˆ์ด๋ธ”์ด ์•„๋‹Œ ํ…์ŠคํŠธ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

Tree ์™€ GraphNode ๊ฐ€ TreeView ์™€ GraphEditNode ๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒƒ๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
Tree ๊ฒฝ์šฐ ๊ทธ ์ด์œ ๋Š” ๊ธ€๋กœ๋ฒŒ GUI ๋…ธ๋“œ IMO์˜ ์ด๋ฆ„์ด ๋„ˆ๋ฌด ๊ด‘๋ฒ”์œ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  GUI ํ”„๋ ˆ์ž„์›Œํฌ๋Š” TreeView ํ•ฉ๋‹ˆ๋‹ค.
GraphNode ๊ฒฝ์šฐ ์ตœ๊ทผ์— ์‹ค์ œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ์™€ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ํ”„๋กœํ† ํƒ€์ž… ์ž‘์—…์„ ํ–ˆ๊ณ  Node ๋˜๋Š” GraphNode ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํžˆ ์„ฑ๊ฐ€์…จ์Šต๋‹ˆ๋‹ค.

@Zylann ๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ๋Š” ๊ทธ๋ž˜ํ”„(ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹˜)์— ๋Œ€ํ•œ ์‹œ๊ฐ์ /์ปจํŠธ๋กค์ด๋ฏ€๋กœ GraphContainer๊ฐ€ ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GraphNode์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š”์ด ์žˆ์œผ์‹œ๋ฉด lerpf / lerpv / lerpc ๋Œ€์‹  Color/Vector2/3.linear_interpolate ? ์ ์–ด๋„ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ์—์„œ Color/Vector2/3.linear_interpolate ์— Color/Vector2/3.lerp

#29598 http_escape / http_unescape ~ uri_encode / uri_decode ์–ธ๊ธ‰๋œ ๋Œ€๋กœ

์šฐ๋ฆฌ๋Š”์ด ์žˆ์œผ์‹œ๋ฉด lerpf & lerpv ๋Œ€์‹  Vector2/3.linear_interpolate ? ์ ์–ด๋„ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ์—์„œ Vector2/3.linear_interpolate ์— Vector2/3.lerp

vector.lerp()๋กœ ๋‹จ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ https://github.com/godotengine/godot/pull/16106 ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ์—์„œ lerp() ์‚ฌ์šฉ์—๋Š” ๋ฒกํ„ฐ์™€ ์ƒ‰์ƒ์„ ์ง€์›ํ•˜๋Š” ์Šค์œ„์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Vector2.angle_to_point() ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ํ˜„์žฌ ์„ค๋ช…๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์ด๋ฆ„์ด ๋ฌด์—‡์ธ์ง€, ์ด ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์›ํ˜ธ: #16307

@razcore-art ์ด https://github.com/godotengine/godot/pull/20371 ์— ๋Œ€ํ•œ PR์ด ์ด๋ฏธ ์—ด๋ ค ์žˆ์œผ๋ฉฐ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค(์ œ ์ƒ๊ฐ์—๋Š”).

ํŽธ์ง‘: ๋” ์ด์ƒ ์—†์Šต๋‹ˆ๋‹ค.

Area ๋Š” 3D์ด๋ฏ€๋กœ ์‹ค์ œ๋กœ Volume ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Area2D ๋Š” Area ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜์—ญ์€ ๋ณธ์งˆ์ ์œผ๋กœ 2D์ž…๋‹ˆ๋‹ค.

GridMap ๋Š” CubeMap ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ "๊ทธ๋ฆฌ๋“œ"๋Š” ๋‚˜์—๊ฒŒ 2D์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

CheckButton ์ปจํŠธ๋กค์€ SwitchButton ๋˜๋Š” ๊ทธ ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Checkbox ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์•„์˜ˆ ์ œ๊ฑฐํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ ์–ด์จŒ๋“  Checkbox์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹ค์‹œ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค: CheckButton, ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋‹จ์ง€ ํ™”์žฅํ’ˆ์ž…๋‹ˆ๋‹ค.

์•„๋‹ˆ๋ฉด ์•„์˜ˆ ์ œ๊ฑฐํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ ์–ด์จŒ๋“  Checkbox์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

UX-wise, CheckBox ๋ฐ CheckButton์€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
https://uxmovement.com/buttons/when-to-use-a-switch-or-checkbox/

@Rodeo-McCabe Area ๋Š” 2D ๋Œ€์‘๊ณผ์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๊ทธ๋ ‡๊ฒŒ ํ˜ธ์ถœ๋˜๋ฉฐ area ์˜ ์ •์˜ ์ค‘ ํ•˜๋‚˜๋Š” a particular extent of space or surface ์ž…๋‹ˆ๋‹ค.
ํ๋ธŒ๋งต์€ 3D ์ด๋ฏธ์ง€์ด๋ฉฐ ๊ตฌ๋ฌธ ์ •ํ™•์„ฑ์€ ์ปจํ…์ŠคํŠธ์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ˜ผ๋ž€์„ ๊ฐ€์ค‘์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

grabber_area -> slider_progress
slider -> slider_background
image

๋˜๋Š” ๊ทธ๋ƒฅ:
grabber_area -> progress
slider -> background ?

์•„๋งˆ๋„:
grabber_area -> progress_area ๋˜๋Š” progressed_area
slider -> progress_background ?

ํ๋ธŒ๋งต์€ 3D ์ด๋ฏธ์ง€์ด๋ฉฐ ๊ตฌ๋ฌธ ์ •ํ™•์„ฑ์€ ์ปจํ…์ŠคํŠธ์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ˜ผ๋ž€์„ ๊ฐ€์ค‘์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@eon-fair ์ถฉ๋ถ„ํžˆ, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ชฐ๋ž๋‹ค.

Area๋Š” 2D ๋Œ€์‘๋ฌผ๊ณผ์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๊ทธ๋ ‡๊ฒŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” 2D ์ƒ๋Œ€ ๋„ ์ผ๊ด€์„ฑ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ˆ˜ํ•™์—์„œ ๋ฉด์ ์€ ๊ธธ์ด * ๋†’์ด์ด๋ฉฐ 3์ฐจ์›์€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Area2D๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜์—ญ์ด๊ธฐ ๋•Œ๋ฌธ์— 2D ์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. "์˜์—ญ"์˜ ๋˜ ๋‹ค๋ฅธ ์ˆ˜ํ•™์  ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์„  ์„ธํŠธ ๋‚ด์— ํฌํ•จ๋œ ํ‘œ๋ฉด, ๊ตฌ์ฒด์ ์œผ๋กœ: ํ‘œ๋ฉด๊ณผ ์ธก์ •์ด ๋™์ผํ•œ ๋‹จ์œ„ ์ •์‚ฌ๊ฐํ˜•์˜ ์ˆ˜

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ˆ˜ํ•™์—์„œ 3์ฐจ์› ๊ณต๊ฐ„์„ "๋ณผ๋ฅจ"์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Area๊ฐ€ ์‹ค์ œ๋กœ 3D ๋…ธ๋“œ๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์„ ๋•Œ ์ฒ˜์Œ์—๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฒŒ์ž„ ์—”์ง„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜ํ•™ ์ •์˜๋ฅผ ์ทจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” ์ดํ•ดํ•˜์ง€๋งŒ ํŠนํžˆ ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋ฉด ํŠน๋ณ„ํ•œ ์ด์ ์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. "๋ณผ๋ฅจ"์ด ์ด์— ๋Œ€ํ•œ ๋” ์ ์ ˆํ•œ ์šฉ์–ด์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—๋Š” ๋™์˜ํ•˜์ง€๋งŒ 3D์˜ ๊ฒฝ์šฐ "๋ณผ๋ฅจ"๊ณผ 2D์˜ ๊ฒฝ์šฐ "์˜์—ญ"์ด ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ 2D ๋ฐ 3D ๋ณ€ํ˜•์„ ๋ชจ๋‘ ๊ฐ€์ง„ ๋งŽ์€ ๋…ธ๋“œ์˜ ์ด๋ฆ„์ด "

์ด๋ฆ„ ์ง€์ • ์ฒด๊ณ„๊ฐ€ ์ฒ˜์Œ์— ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์€( ๋Œ€๋ถ€๋ถ„ ์ด ์ฒด๊ณ„์—๋งŒ

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด Area2D ์„ Area , Area ๋ฅผ Area3D ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘: <>๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ํ…์ŠคํŠธ๋Š” <>๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜์ง€ ์•Š๋Š” ํ•œ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@Rodeo-McCabe ๋…ธ๋“œ ๋ช…๋ช… ์˜๋„๋Š” ์ˆ˜ํ•™์ด ์•„๋‹Œ ์ธ๊ฐ„์˜ ์–ธ์–ด๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋Š” ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "์˜์—ญ"์€ ๊ธฐํ•˜ํ•™์  ์˜์—ญ์ด ์•„๋‹ˆ๋ผ ๋ ˆ๋ฒจ์ด๋‚˜ ์Šคํ…Œ์ด์ง€ ๋‚ด๋ถ€์™€ ๊ฐ™์ด ์กด์žฌํ•ด์•ผ ํ•˜๋Š” ์žฅ์†Œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. IE - ์˜์—ญ 1.

๋…ธ๋“œ ์ž์ฒด๋Š” ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ฑฐ๋‚˜ ๊ทธ ์ž์ฒด๊ฐ€ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์˜์—ญ/๋ณผ๋ฅจ์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์˜์—ญ๊ณผ ๋ณผ๋ฅจ(๋ชจ์–‘)์„ ์˜์—ญ์— ์—ฐ๊ฒฐํ•˜๊ณ  ์šฉ๋Ÿ‰?

๊ธฐํ•˜ํ•™์  ์˜์—ญ๊ณผ ํ˜ผ๋™์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ ค๋ฉด ๋™์˜์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถˆ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ง€์—ญ2D/3D
  • ๊ณต๊ฐ„2D/3D
  • ์˜์—ญ2D/3D
  • ํ•„๋“œ2D/3D
  • ๋“ฑ.

Btw, ์ด ํŠธ๋ž˜์ปค๊ฐ€ ๋ฉ”์„œ๋“œ, ์†์„ฑ ๋ฐ ์‹ ํ˜ธ(๋…ธ๋“œ ์•„๋‹˜) ์ „์šฉ์ด๋ผ๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ  @reduz ๋Š” ์ตœ๊ทผ์— 4.0์—์„œ ํ˜ธํ™˜์„ฑ ์†์ƒ์„ ์ตœ์†Œํ™”ํ•˜๋ ค๋Š” ์˜๋„๊ฐ€ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฑฐ๋Œ€ํ•œ ๋ชฉ๋ก์€ ์•„๋งˆ๋„ ์šฐ๋ฆฌ๊ฐ€ ๊ณ„์† ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž์˜ ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์˜์›ํ•œ ๊ฒƒ...

์ง€๊ธˆ์˜ ์ƒํƒœ๋ฅผ ์ตœ๋Œ€ํ•œ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ธ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ, 4.0 ์ดํ›„์˜ ๋‹ค์Œ ๋ฉ”์ด์ € ๋ฒ„์ „๊นŒ์ง€ ์ด๋Ÿฐ ์ผ์ด ๋ฏธ๋ค„์งˆ ์ˆ˜ ์žˆ์„๊นŒ์š”?

์ด ๋ฌธ์ œ๋Š” ํ•ต์‹ฌ ๊ธฐ๊ณ ์ž์—๊ฒŒ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ์—ฌ๊ธฐ์ €๊ธฐ์„œ ๋Œ€๋Œ€์ ์ธ ์ด๋ฆ„ ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ•˜๋Š” ๊ณณ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” API๋ฅผ ๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ๋งŒ๋“œ๋Š” ์‹ค์ œ ๋ถˆ์ผ์น˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

OP์— ์„ค๋ช…๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํฐ ํ˜ธํ™˜์„ฑ ์†์ƒ์ด ์•„๋‹ˆ๋ฉฐ ๋Œ€๋ถ€๋ถ„์€ 4.0์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. @reduz๊ฐ€ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์€ 2.1๊ณผ 3.0 ์‚ฌ์ด์˜ "ํ”„๋กœ์ ํŠธ๋ฅผ ๋” ์ด์ƒ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" ์ข…๋ฅ˜์˜ ํ˜ธํ™˜์„ฑ ์†์ƒ์ž…๋‹ˆ๋‹ค(ํ›จ์”ฌ ๋” ์˜ค๋””์˜ค ๋ฐ ํŒŒํ‹ฐํด ์‹œ์Šคํ…œ์ด ์™„์ „ํžˆ ๋‹ค์‹œ ์ž‘์„ฑ๋˜๊ณ  ๊ฐ€์ ธ์˜ค๊ธฐ ์‹œ์Šคํ…œ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๋“ฑ ๋‹น์‹œ์— ์ด๋ฆ„์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ๋ณด๋‹ค ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

4.0์—๋Š” ์•ฝ๊ฐ„์˜ ํ˜ธํ™˜์„ฑ ์†์ƒ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค . ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 4.0์ด๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์žฅ๋ฉด๊ณผ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋œ ์†์„ฑ, ๋ฉ”์„œ๋“œ ๋ฐ ์‹ ํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ณ€ํ™˜๋˜๋„๋ก ํ•˜๋Š” ๋ณ€ํ™˜๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ฉ๋ฆฌ์ ์ด๊ณ  ์ด์‹์ด ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ํ† ๋ก ํ•˜๋Š” ๊ณณ์ด ์•„๋‹™๋‹ˆ๋‹ค :)

Control ์˜ _set_anchor() ์‹œ์ž‘ ๋ถ€๋ถ„๋„ "_"๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

PopupMenu์˜ index_pressed(index) ๋ฐ id_pressed(id) ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ id_focused ๋Š” ์‹ค์ œ๋กœ ํ•ญ๋ชฉ์˜ ID ๋Œ€์‹  ์ธ๋ฑ์Šค ์™€ ํ•จ๊ป˜ ๋‚ด๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค.

์•„์ง ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ์˜ค๋Š˜ Akien์—๊ฒŒ ์ œ์•ˆํ•œ ํ›„์— โ€‹โ€‹๋ชฉ๋ก์— ์˜ฌ๋ฆด ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ARVRServer๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•˜์—ฌ XRServer๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. VR๊ณผ AR์„ ๋ชจ๋‘ ๋‚˜ํƒ€๋‚ด๋Š” XR์ด๋ผ๋Š” ์šฉ์–ด๋Š” ์•„์ง ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋‹ˆ์š”, ์ €๋Š” MRServer๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค ;)

RayCast์— "Enabled" ๋Œ€์‹  "Disabled" ์†์„ฑ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? CollisionShape์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ false "๋น„ํ™œ์„ฑํ™”๋จ"์ด ์žˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Œ์„ ์˜๋ฏธํ•จ). ๋Œ€์กฐ์ ์œผ๋กœ RayCast์˜ "Enabled" ์†์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ false ์ด๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

๋˜๋Š” ๊ธ์ •์ ์ธ ํ˜•์‹(์ „์ฒด์ ์œผ๋กœ ๋œ ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ•จ)์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด CollisionShape์— "Disabled" ๋Œ€์‹  "Enabled" ์†์„ฑ(๊ธฐ๋ณธ์ ์œผ๋กœ true )์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@Calinou ๋ณ„๋„์˜ ๋ฌธ์ œ๊ฐ€ ํ•„์š”ํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ผ๊ด€์„ฑ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๋ถ€์šธ ๊ฐ’์ด ํ•ญ์ƒ Enabled ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์–ธ๊ฐ€๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€์šธ์„ true ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž์ฃผ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์ง‘๋‹ˆ๋‹ค.

@Calinou @Zylann ์ด์ค‘ ๋ถ€์ •์€ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ๊ฐ€๋Šฅํ•˜๋ฉด ํ”ผํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  "Disabled" ๋ถ€์šธ์„ "Enabled" ๋ถ€์šธ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ด "true"์ด๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. #17212์™€ #21822์—์„œ ์ด ํ† ๋ก ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์šฐ์Šค ๋ฐ ํ„ฐ์น˜ ์ž…๋ ฅ ์ด๋ฒคํŠธ์˜ speed ์†์„ฑ์€ Vector2์ด๋ฏ€๋กœ velocity ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

InputMap : get_action_list( String action ) ํ•จ์ˆ˜ ์ด๋ฆ„์€ ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ์— ๋Œ€ํ•ด ๋งŽ์€ ๊ฒƒ์„ ๋งํ•ด์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ฃผ์–ด์ง„ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ EventInputs๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ get_action_events(String action)

๋˜ํ•œ InputMap ์—๋Š” get_actions( ) ๋ผ๋Š” ๋˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๊ฐ€ ์žˆ๊ณ  ๋‘ ์ด๋ฆ„ ๋ชจ๋‘ ์ปจํ…์ŠคํŠธ์—์„œ ๋™์ผํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ํ˜ผ๋™์„ ํ”ผํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ ‘์„ ์ ์œผ๋กœ #30736๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋‘ ๊ฐœ์˜ Godot ๋ฌผ๋ฆฌ ์—”์ง„ ์ด๋ฆ„์„ "GodotPhysics2D" ๋ฐ "GodotPhysics3D"์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "GodotPhysics"์™€ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๊นจ์กŒ๋‹ค๋Š” ๊ฒƒ์€ ๋‘ ๊ฐ€์ง€ ๋งค์šฐ ๋‹ค๋ฅธ ๊ฒƒ์„ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ์— ๋Œ€ํ•œ Object._init() ์— Object._new() ?

get โ€” _get
get_property_list โ€” _get_property_list
notification โ€” _notification
set โ€” _set

new โ€” _init

_init ์‹ค์ œ๋กœ Python์˜ __init__ ๋”ฐ๋ž๊ณ  new ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

String : empty() -> is_empty() ๊ฐ™์€ ๊ฒƒ์ด ์ด ์Šค๋ ˆ๋“œ์— ์ ํ•ฉํ•ฉ๋‹ˆ๊นŒ? ํ•ญ์ƒ ์ฒ˜์Œ์—๋Š” ๋ฌธ์ž์—ด์„ ์ง€์šฐ๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@vortexofdoom ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฐ/๋˜๋Š” ์ด๋ฆ„ ์ง€์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

String ๋ฐ NodePath ๊ฐ๊ฐ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” empty ๋ฐ is_empty ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ํ•ต์‹ฌ ๋‚ด์žฅ ์œ ํ˜•์€ empty ์ด๋ฆ„์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ is_empty ์ด๋ฆ„์„ NodePath ๋กœ ๋ฐ”๊พธ์–ด ๋ชจ๋“  ๊ธฐ๋ณธ ์ œ๊ณต ์œ ํ˜•์—์„œ ์ผ๊ด€๋˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ƒ๊ฐ์— ์‹ฌ๊ฐํ•œ ํ˜ธํ™˜์„ฑ ์†์ƒ์ด ์ž ์žฌ์ ์œผ๋กœ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ์ƒ ์ฒ˜์Œ์—๋Š” ๋ฌธ์ž์—ด์„ ์ง€์šฐ๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์†Œ๋“œ๋Š” ์ด๋ฅผ ์œ„ํ•ด Godot์—์„œ clear ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@Xrayez ,

๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์†Œ๋“œ๋Š” ์ด๋ฅผ ์œ„ํ•ด Godot์—์„œ ๋ช…ํ™•ํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

empty ๊ฐ€ ํ˜•์šฉ์‚ฌ์ธ ๋™์‹œ์— ๋™์‚ฌ๋ผ๋Š” ์‚ฌ์‹ค์„ ์–ธ๊ธ‰ํ•˜๊ณ  is_ ํ•˜๋ฉด ์–ด๋Š ๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค.

ํ•ด๋‹น bool์— ๋Œ€ํ•œ ๋ชจ๋“  ๋‚ด์žฅ ๊ธฐ๋Šฅ์—์„œ is_empty ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Godot 3.0๊ณผ 3.1์—์„œ๋Š” C#์— Set ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋“ค์€ ์‹ค์ œ๋กœ ์ƒ์„ฑ์ž์™€ ํ• ๋‹น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ์‹ค์ œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํŒจํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ฏ€๋กœ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ์ฃผ๋กœ ๋‚ด๊ฐ€ Quat์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์ด ์ด๋ฏธ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๋„ํ•˜๊ณ  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ #30744๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

GDScript์€ ๊ฐ€์ง€๊ณ  set_euler ๋ฐ set_axis_angle ํ•˜์ง€๋งŒ, ๊ฐ™์€ ์ผ์„ (์ˆ˜ํ–‰ํ•˜๋Š” ์ƒ์„ฑ์ž๋„ ์žˆ์Šต๋‹ˆ๋‹ค q.set_axis_angle(myvec3, myval) ๊ต์ฒด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค q = Quat(myvec3, myval) . ์ฝ”์–ด๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์ด์žˆ๋‹ค Basis์˜ ๊ฒฝ์šฐ GDScript์— ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? Quat ์ง‘ํ•ฉ ๋ฉ”์„œ๋“œ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์ƒ์„ฑ์ž๋ฅผ ์„ ํ˜ธํ•˜๊ณ  C#๊ณผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ˆ˜ํ–‰ ์ค‘์ธ ์ž‘์—…์— ๋Œ€ํ•ด ๋ช…์‹œ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ํ›„์ž์˜ ๊ฒฝ์šฐ Basis ๋ฉ”์†Œ๋“œ๋„ ๋…ธ์ถœ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@aaronfranke ๋‚˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ์–ด๋–ค ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์„ ๋•Œ ๊ทธ ์ƒ์„ฑ์ž๊ฐ€ ์ „์šฉ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ด์ƒํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ด์ „ ๊ฒฝ๋กœ๋ฅผ ํƒํ•œ๋‹ค.

@aaronfranke ์ด ๋ฌธ์ œ๋Š” ์—”์ง„ ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ API์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Geometry ์˜ point_is_inside_triangle() ์—์„œ is_point_in_triangle() , ๋™์ผํ•œ ํด๋ž˜์Šค์—์„œ bool ๋„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ์™€ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค.

TreeItem.get_children() ๋Š” get_first_child() ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ๋Š” ๋˜ํ•œ ํ•˜์œ„ ํ•ญ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์‹์€ get_next() ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

#31976์—์„œ ์ž‘์—…ํ•  ๋•Œ ์„€๋„์šฐ ์•„ํ‹€๋ผ์Šค ๊ฐ’์ด 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค(๋ฐฉํ–ฅ์„ฑ ์„€๋„์šฐ์™€ ์˜ด๋‹ˆ/์ŠคํŒŸ ์„€๋„์šฐ ๋ชจ๋‘). ๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ์ •์ˆ˜ ๊ฐ’์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์˜ ์—ด๊ฑฐํ˜•์„ ํ—ˆ์šฉํ•˜๋„๋ก ํ•ด์•ผ ํ”„๋กœ์ ํŠธ ์„ค์ •์—์„œ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๋ฐฉ์‹์œผ๋กœ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๋ฐฉ์„ฑ ํ•„ํ„ฐ๋ง ์ˆ˜์ค€์€ ์—ด๊ฑฐํ˜•(2ร—, 4ร—, 8ร—, 16ร—)์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ ๊ฐ’๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

VisualServer ์˜ instance_create2() ๋Š” ์‹ค์ œ๋กœ instance_create() ์™€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ฒด ๊ธฐ์ค€ ๋ฒˆ์—ญ์˜ ๊ฒฝ์šฐ Spatial ์—๋Š” translate_object_local ๊ฐ€ ํ•„์š”ํ•œ Vector3 ์ด ์žˆ๊ณ  Node2D ์—๋Š” move_local_x ๋ฐ move_local_y , ์ˆ˜๋ ˆ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Spatial ๋ฐ Node2D ์—๋Š” ๊ฐ๊ฐ Vector3 ๋ฐ Vector2 ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๊ณ  translate_local ๋˜๋Š” local_translate ๋Š” translate_object_local ๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ์ด๋ฆ„์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@leonkrause render_width ๋ฐ render_height viewport_width ๋ฐ viewport_height ๋˜๋Š” canvas_width ๋ฐ canvas_height , ์บ”๋ฒ„์Šค ๋ทฐํฌํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ์ฐธ์กฐ ํ•ด์ƒ๋„์ด๋ฉฐ ์‹ค์ œ๋กœ ๋ Œ๋”๋ง์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@akien-mga ๋ชฉ๋ก์— ํŠธ๋ฆฌ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ๋“ค์€ ์ด๋ฆ„์ด ๋งค์šฐ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ์ž˜ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ ๋งŒ๋‚ฌ์„ ๋•Œ get_child() ๋ฐ get_next(), get_prev()๊ฐ€ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ฒ˜๋Ÿผ ๋ฐ˜๋ณต์ž๋ฅผ ์ž‘๋™ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์ด ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ๋™์ผํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด ๋‚ด ์ž์‹ ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

get_children()์€ get_first_child()๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

get_next() ๋ฐ get_prev()๋Š” get_next_sibling() ๋ฐ get_prev_sibling()์œผ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ์— ๋Œ€ํ•œ Engine.iterations_per_second ์— Engine.physics_fps ํ”„๋กœ์ ํŠธ ์„ค์ •๊ณผ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด?

is_processing :

์ฒ˜๋ฆฌ๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

can_process :

์žฅ๋ฉด ํŠธ๋ฆฌ๊ฐ€ ์ผ์‹œ ์ค‘์ง€๋œ ๋™์•ˆ ๋…ธ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜๋Š” ๋” ์ข‹์„ ์ˆ˜๋„ can_process ๊ฐ™์€ ๊ฒƒ์œผ๋กœ can_process_paused ๋กœ ํšŒํ”ผ ํ˜ผ๋ž€์— is_processing ๋ฐฉ๋ฒ•.

----
String print( Variant value, String indent="", bool sort_keys=false )

์ด ๋ฐฉ๋ฒ•์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@dalexeev ์ด๋ฆ„์„ ๋ฌด์—‡์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฉฐ ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@Calinou ์ด ๋ฉ”์„œ๋“œ๋Š” ์‹ค์ œ๋กœ ํ™”๋ฉด์— ์•„๋ฌด ๊ฒƒ๋„ ์ธ์‡„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ƒ๊ฐ์€ JSON.print ๊ฐ€ Node.print_tree ๋˜๋Š” OS.print_all_resources ๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  print* ๋ฉ”์„œ๋“œ์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

191123-1

์ด๋ฆ„์„ ๋ฌด์—‡์œผ๋กœ ๋ฐ”๊ฟ”์•ผ ํ• ๊นŒ์š”? ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด. JavaScript๋Š” ์ด๋ฅผ ์œ„ํ•ด JSON.stringify ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. PHP์—๋Š” json_encode ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. GDScript์—๋Š” to_json ์™€ ๊ฐ™์€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

UPD. JSON.serialize ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ฌธ์ž ์ˆ˜๋กœ ๋ณด๋ฉด JSON.stringify ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. :์›ƒ๋‹ค:

์ผ๋ฐ˜์ ์œผ๋กœ ์ด์ง„ ์ง๋ ฌํ™”์— ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— "์ง๋ ฌํ™”"๋ผ๋Š” ๋‹จ์–ด์— ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ถœ๋ ฅ์€ ํ•ด๋‹น ํ˜•์‹์„ ์–ป๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ํด๋ž˜์Šค์—๋Š” JSON๊ณผ Variant ์œ ํ˜• ์‚ฌ์ด๋ฅผ ์ด๋™ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋งŒ ์žˆ์œผ๋ฏ€๋กœ ๋ฌด์˜๋ฏธํ•˜๋ฏ€๋กœ json ๋ผ๋Š” ๋‹จ์–ด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์ž, ์ข‹์€ ์ด๋ฆ„ ์ด ๋  ๊ฒƒ๋“ค์— ๋Œ€ํ•ด, ๊ธฐ์กด์˜ parse ๋ฉ”์†Œ๋“œ์—๋Š” ์‹ค์ œ๋กœ ๋ช…ํ™•ํ•œ ๋ฐ˜๋Œ€ ๋‹จ์–ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค( ์—ฌ๊ธฐ ์ฐธ์กฐ ). encode , create , compose , generate ? encode ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์„ decode ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

format ๋ฐ write ๊ฐ€ parse ์˜ ์—ญ์ˆ˜๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. stringify ๋Š” JavaScript์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ๋” ์ž˜ ์•Œ๋ ค์ง„ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

format ๋ฐ write ๊ฐ€ parse ์˜ ์—ญ์ˆ˜๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. stringify ๋Š” JavaScript์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ๋” ์ž˜ ์•Œ๋ ค์ง„ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

str2var ๋Š” VariantParser ์ด๊ณ  var2str ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ VariantWriter (์˜ˆ๋ฅผ ๋“ค์–ด #33241 ์ฐธ์กฐ, ๋™์ผํ•œ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค).

๊ทธ๋ž˜์„œ ์ €๋Š” write . ์ผ๊ด€์„ฑ์ด ์ด๊น๋‹ˆ๋‹ค. ๐Ÿ˜›

@Xrayez print ์„ write ? ํŒŒ์ด์ฌ์—์„œ ํŒŒ์Šค์นผ๋กœ? :์›ƒ์Œ:

https://github.com/godotengine/godot-proposals/issues/252#issuecomment -557901552์—์„œ ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ clear_color ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ด๋ฆ„์„ background_color ( ํ”„๋กœ์ ํŠธ ์„ค์ •).

๋‚˜๋Š” 4.0์ด ๋” ๋‚˜์€ ์„ฑ๋Šฅ, GI ํ”„๋กœ๋ธŒ ๊ฐœ์„ , ์ผ๋ฐ˜์ ์ธ ๊ณผ๋Œ€ ๊ด‘๊ณ  ๋“ฑ์œผ๋กœ ์ธํ•ด Godot์— ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ๋“ค์˜ ํฐ ๋ฌผ๊ฒฐ์„ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

4.0์—์„œ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์ง€๋ฉด ๊ณต์‹ "์ฒซ ๋ฒˆ์งธ ๊ฒŒ์ž„" ํŠœํ† ๋ฆฌ์–ผ ์™ธ์—๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ธฐ์กด ํŠœํ† ๋ฆฌ์–ผ์ด ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด ์‚ฌ๋žŒ๋“ค์€ ํ•˜๋“œ ๋žœ๋”ฉ์„ ๋ฐ›๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

4.0 ์ดํ›„์— ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์ง€๋ฉด 4.1์—์„œ์™€ ๊ฐ™์ด ๊ทธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋งค์šฐ ์šธํ‰๋ถˆํ‰ํ•œ ์ผ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ƒˆ๋กœ์šด ์—”์ง„์˜ ๊ธฐ์ดˆ๋ฅผ ๋ฐฉ๊ธˆ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค์‹œ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋‘ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋ฉด ์™„์ „ํžˆ ํฌ๊ธฐํ•  ์ •๋„๋กœ ์ขŒ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ API ๋ณ€๊ฒฝ๊ณผ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” "3.3" ๋˜๋Š” "3.9" ๋ฒ„์ „์„ 4.0 ๋ฆด๋ฆฌ์Šค ์ด์ „์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ง์ด ๋˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ์žฅ์†Œ์ธ์ง€ ์•„๋‹Œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ด๊ฒƒ์ด ๋ฌธ์ œ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ์— ๋Œ€ํ•œ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
ํ•„์š”ํ•œ ๋ชจ๋“  ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋ชจ๋“  ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ด์ „ ์ด๋ฆ„์ด ์žˆ๋Š” GodotOldNames/GodotPre4.0์ด๋ผ๋Š” ๋ฒˆ์—ญ์— ์ƒˆ ์–ธ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ?
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด์ „ ํŠœํ† ๋ฆฌ์–ผ์— ์žˆ๋Š” ์ด์ „ ์ด๋ฆ„์„ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ GodotPre4.0 ์œผ๋กœ ์–ธ์–ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ ์ด๋ฆ„์œผ๋กœ ๋” ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์ „์ฒด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ #4397๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Anutrix ์ด๊ฒƒ์€ ๋งŽ์€ ๋ณต์žก์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(์˜์–ด๊ฐ€ ์•„๋‹Œ ์–ธ์–ด๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?). ๋˜ํ•œ ํŽธ์ง‘๊ธฐ์— ํ‘œ์‹œ๋˜๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ˜„์ง€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ฌผ๋ฆฌํ•™ " ๋ ˆ์ด์–ด ", ๋ Œ๋”๋ง " ๋ ˆ์ด์–ด "

๋‚˜๋Š” Godot๋ฅผ ๋ฐฐ์šด ์ฒซ ๋ช‡ ์ฃผ ๋™์•ˆ ์ด ๋ถˆ์Œํ•œ ์‚ฌ๋žŒ ๊ณผ ๋˜‘๊ฐ™์€ ํ˜ผ๋ž€์„ ๊ฒช์—ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ฆฌํ•™ "๋ ˆ์ด์–ด", ๋ Œ๋” "๋ ˆ์ด์–ด"๋Š” Object Orientated Design์—์„œ ์˜จ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋Š” ๋งค์šฐ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. "๋ ˆ์ด์–ด"๋ผ๋Š” ์šฉ์–ด๋Š” ํŽ˜์ธํŠธ์˜ ๋‹ค์ค‘ ์ฝ”ํŒ… ๋˜๋Š” ์ง๋ฌผ์˜ ์ฒœ ์ฝ”ํŠธ, ์–‘ํŒŒ(๋˜๋Š” ์˜ค์šฐ๊ฑฐ)์˜ ํ”ผ๋ถ€ ์ฝ”ํŠธ, ํ–‰์„ฑ ํ‘œ๋ฉด์˜ ํ‡ด์ ๋ฌผ ์ฝ”ํŠธ, ...
๋ ˆ์ด์–ด(๋‹จ์ผ ๋ ˆ์ด์–ด์™€ ๋ฐ˜๋Œ€๋˜๋Š” ๋ณต์ˆ˜ํ˜•)๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์„œ๋กœ ๊ฒน์ณ์ ธ ์žˆ์Œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํŠนํžˆ 2D ๊ทธ๋ž˜ํ”ฝ์ด๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ "๋ ˆ์ด์–ด๋ง"ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ „๊ฒฝ, ๋ฐฐ๊ฒฝ ๋ฐ ๊ทธ ์‚ฌ์ด ๋˜๋Š” ์ƒ๋‹จ์— ์žˆ๋Š” ๋ ˆ์ด์–ด๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ ˆ์ด์–ด๋ฅผ ๋ฐฐ๊ฒฝ ์œ„์˜ ์…€๋กค๋กœ์ด๋“œ ํ•„๋ฆ„์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค Godot๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒŒ์ž„ ์—”์ง„๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ "์ •๋ ฌ" ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Physics ๊ฐœ์ฒด ๋˜๋Š” Render ๊ฐœ์ฒด๊ฐ€ "๋ ˆ์ด์–ด"๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”์ƒ์ ์ธ ๊ณตํ†ต์ ์„ ํ˜ธ์ถœํ•˜์ง€๋งŒ ๋™์‹œ์— ์ด๋Ÿฌํ•œ ์ถ”์ƒ์ ์ธ ๊ณตํ†ต์ ์€ ์‹œ๊ฐ์  ๋ ˆ์ด์–ด์˜ ์Šคํƒ ๋ชจ์–‘("์ •๋ ฌ")๊ณผ ์•„๋ฌด ๊ด€๋ จ์ด ์—†๋‹ค๋Š” ์‚ฌ์‹ค์ด ์ด๊ฒƒ์„ ๋งŒ๋“œ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„ˆ๋ฌด ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

Physics "Layer", Render "Layer"์˜ ์‹ค์ œ ์šฉ๋„์™€ ์˜๋ฏธ๋ฅผ ์ดํ•ดํ–ˆ์„ ๋•Œ ๋‚˜๋Š” ์ฆ‰์‹œ ์ด๊ฒƒ์ด Physics Group, Render Group์ด ์•„๋‹Œ ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ํ™•์‹คํžˆ ์„œ๋กœ์— ๋Œ€ํ•œ ์–ด๋–ค ontop-stackable ๊ด€๊ณ„๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋กœ์˜ ์ˆœ์„œ๋‚˜ ๊ด€๊ณ„๊ฐ€ ์™„์ „ํžˆ ๊ด€๋ จ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ด์–ด ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด imho๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์‚ฌ๋žŒ๋“ค, "๊ทธ๋ฃน", ๋งˆ์Šคํฌ์— ๋Œ€ํ•œ "๊ทธ๋ฃน์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š”" ๋˜๋Š” ์ง€๊ธˆ ๋‹น์žฅ ์ƒ๊ฐํ•  ์ˆ˜ ์—†๋Š” ๋‹ค๋ฅธ ์šฉ์–ด๊ฐ€ ๋” ์ •ํ™•ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

AnimationPlayer ๋ฉ”์„œ๋“œ
.stop(false) ์€ .pause(true) ๋กœ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์ด ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ > ํ”„๋กœ์ ํŠธ ์„ค์ • > ๋””์Šคํ”Œ๋ ˆ์ด > ์ฐฝ > ๋Š˜์ด๊ธฐ > ๋ชจ๋“œ:

์ŠคํŠธ๋ ˆ์น˜ ๋ชจ๋“œ "2D" ๋Š” ์ŠคํŠธ๋ ˆ์น˜ ๋ชจ๋“œ "๋””์Šคํ”Œ๋ ˆ์ด" ๋˜๋Š” "๋ฒ”์šฉ" ์ด๋ผ๊ณ  ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
3D ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ๋ชจ๋“  2D ์‚ฌ์šฉ ์‚ฌ๋ก€(ํ”ฝ์…€์•„ํŠธ ํ”„๋กœ์ ํŠธ์™€ ๊ฐ™์€, Godot 2D ํ”„๋กœ์ ํŠธ์˜ ๊ฑฐ์˜ ์ ˆ๋ฐ˜์ด ํ”ฝ์…€์•„ํŠธ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž„)์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๋•Œ 2D๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
"๋””์Šคํ”Œ๋ ˆ์ด"๋Š” ๋˜ํ•œ ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ํ•˜๋Š” ์ผ์— ๋Œ€ํ•ด ๋” ์„ค๋ช…์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋””์Šคํ”Œ๋ ˆ์ด ํ•ด์ƒ๋„์—์„œ 2D ๊ทธ๋ž˜ํ”ฝ, 3D ๊ฐœ์ฒด, 2D ๋ฉ”์‰ฌ, Line2D ๋ฐ ๋‹ค๊ฐํ˜•์ด ๋˜๋Š” ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ ์ž์„ธํžˆ ์•Œ์•„

์• ๋‹ˆ๋ฉ”์ด์…˜ ํ”Œ๋ ˆ์ด์–ด, ํƒ€์ด๋จธ ๋ฐ ์œ ์‚ฌํ•œ ๋…ธ๋“œ์˜ ๋ฃจํ”„, ๋ฐ˜๋ณต, ์›์ƒท์ด ๋ช…ํ™•ํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ณตํ•˜๊ณ , ๋ฐ˜๋ณตํ•˜๊ณ , ์ผํšŒ์„ฑ์ด ์•„๋‹Œ ๊ฒƒ์€ ๋ชจ๋‘ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์—๋Š”
is_a_parent_of()
๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
is_parent_of()

@KoBeWi ๋Š” #19801์—์„œ ํ† ๋ก ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‚ด ์ƒ๊ฐ์—๋Š”
is_a_parent_of()
๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
is_parent_of()

๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. is_parent_of()๋Š” ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ชจ๋งŒ ๊ณ ๋ คํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•˜๋Š” ๋ฐ˜๋ฉด ํ•จ์ˆ˜๋Š” ๋ชจ๋“  ๋ถ€๋ชจ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

@groud ์ด ๊ฒฝ์šฐ is_ancestor_of() ๋ผ๊ณ  ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ์—๋„ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด is_descendant_of() ๋ผ๊ณ  ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@groud ์ด ๊ฒฝ์šฐ is_ancestor_of()๋ผ๊ณ  ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ์—๋„ ํ•ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด is_descendant_of()๋ผ๊ณ  ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋‘ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๊ฐ€์งˆ ํ•„์š”๋Š” ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐจ์ด์ ์€ "ํ˜ธ์ถœ" ๊ฐ์ฒด์™€ ํ•จ์ˆ˜ ์ธ์ˆ˜๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ is_descendant_of() ์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๊ฐ„๋‹จํžˆ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

push_error() ๋ฐ push_warning() ์„ ๊ฐ๊ฐ print_error() ๋ฐ print_warning() ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ ๋•๋ถ„์— ๋” ์‰ฝ๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :slightly_smiling_face:

@Calinou print_error() ๋Š” printerr() ์™€ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TreeItem.get_children() ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์ด๋ฆ„์ด ๋ฐ˜ํ™˜ ๊ฐ’์ด ๋  ์ž์‹ ์ปฌ๋ ‰์…˜์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ ์‹ค์ œ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ž์‹์ด๊ณ  ๋‚˜๋จธ์ง€ ํ•ญ๋ชฉ์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๋•Œ get_next() (#19796์— ์„ค๋ช…๋จ).

# 31404 ์—์„œ

[ rpc() / rset() ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ] remote_call() / remote_set() ?
์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ์—๋Š” ๋ณ„์นญ์ด ์ถฉ๋ถ„ํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์€ ๋งค์šฐ ์งง์€ ์ด๋ฆ„๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 3์ž ์‹๋ณ„์ž๋ฅผ ์ •๋‹นํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ๋‹น ์ด๋Ÿฌํ•œ ์ˆ˜๋งŽ์€ ํ˜ธ์ถœ๋กœ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ •๋ง ๋งŽ์ด ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋Œ€๋ถ€๋ถ„์˜ ๊ฒŒ์ž„์ด ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค).

ํŽธ์ง‘(2020-01-03): ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋ฉด call_deferred() ๋ฐ set_deferred() ๊ฐ€ ์ด๋ฏธ ์žˆ์œผ๋ฏ€๋กœ call_remote() ๋ฐ set_remote() ๊ฐ€ ๋” ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์•„๋ž˜ ๋‹ซ๊ธฐ/๋‹ค์‹œ ์—ด๊ธฐ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ๋งˆ์„ธ์š”. ๋„ˆ๋ฌด ๋นจ๋ฆฌ ํด๋ฆญํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฐฉ๋ฒ•

OS.find_scancode_from_string
OS.get_scancode_string
OS.is_scancode_unicode

๋ฉ”์„œ๋“œ์™€์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด OS ํด๋ž˜์Šค์—์„œ Input ํด๋ž˜์Šค๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Input.get_joy_axis_index_from_string
Input.get_joy_axis_string
Input.get_joy_button_index_from_string
Input.get_joy_button_string

TabContainer ๋Š” tab_close ๋ฐ tab_hover ์‹ ํ˜ธ๋„ ํŽธ์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • LightOccluder2D light_mask -> occluder_light_mask
  • CPUํŒŒํ‹ฐํด Flags ์—ด๊ฑฐํ˜• -> ParticleFlags
  • ARVR์œ„์น˜ ์ถ”์ ๊ธฐ get_type -> get_tracker_type
  • ARVR์œ„์น˜ ์ถ”์ ๊ธฐ get_name -> get_tracker_name
  • PathFollow2D rotate -> ๋‹ค๋ฅธ ๊ฒƒ
  • ArrayMesh ArrayType enum -> ์‚ญ์ œ
  • Mesh BlendShapeMode enum -> ArrayMesh์— ์ œ๊ณต

https://github.com/godotengine/godot/issues/15763#issuecomment -568908661์˜ ์„ค๋ช…

RichTextLabel์˜ meta_hover_started ๋ฐ meta_hover_ended ์‹ ํ˜ธ๋Š” meta_hover_entered ๋ฐ meta_hover_exited ๋Œ€๋ถ€๋ถ„์˜ ์œ ์‚ฌํ•œ ๋ช…๋ช… ๊ทœ์น™๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚˜๋จธ์ง€ Godot API๋ฅผ ๋” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๋ชจ๋ฐฉํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•ŒํŒŒ๋ฒณ ์ •๋ ฌ๋กœ ์ธํ•ด ํ˜„์žฌ ๋ช…๋ช… ์ฒด๊ณ„๋กœ ์ธํ•ด ์ˆœ์„œ๊ฐ€ ๋ฐ˜๋Œ€๋กœ ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ๋ฅผ ์ฝ์„ ๋•Œ ๋ฐฉํ–ฅ์ด ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์˜ ์‹œ๊ฐ„์  ํ๋ฆ„์ด ๋จผ์ € ์ž…๋ ฅ ํ•œ ๋‹ค์Œ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋…์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

Texture.size ์†์„ฑ์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  Texture.get_size() getter๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜๋„ํ•œ ๊ฒƒ์ธ์ง€ ์•„๋‹Œ์ง€์— ๋Œ€ํ•ด Discord์—์„œ ๋ฌผ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์ œ์•ˆ์€ ์ด๊ฒƒ์ด ์†์„ฑ์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ๋ฌป๋Š” ์งˆ๋ฌธ์„ ์—ฌ๊ธฐ์— ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ด์—ˆ๊ณ , ๋‹ค๋ฅธ ์ œ์•ˆ์€ ์ด์— ๋Œ€ํ•œ '์„ธํ„ฐ'๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— get_size()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ˜„์žฌ ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jmbjr (๊ฒŒํ„ฐ ๋ฉ”์„œ๋“œ ๋Œ€์‹ ) ์†์„ฑ์œผ๋กœ ๋…ธ์ถœ๋œ ์ฝ๊ธฐ ์ „์šฉ ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ฝ๊ธฐ ์ „์šฉ ์†์„ฑ์„ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๊ธฐ๋ณธ ์ œ๊ณต ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋ณธ ๊ธฐ์–ต์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์— GDScript์— ๋…ธ์ถœ๋˜์—ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ฝ๊ธฐ ์ „์šฉ ๋…ธ์ถœ ์†์„ฑ์„ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ด์— ๋Œ€ํ•œ USAGE ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์ด๋ฅผ ์ง€์›ํ•˜๋Š” GDScript ํŒŒ์„œ/์ปดํŒŒ์ผ๋Ÿฌ ์ฝ”๋“œ๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

SoftBody ์—๋Š” areaAngular_stiffness ๊ฐ€ ์žˆ์œผ๋ฉฐ area_angular_stiffness ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ชจ๋“  ๊ด€๋ จ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ๋™์ผ).

Input.joy_connection_changed (๋ฉ”์†Œ๋“œ)๋Š” ์Šคํฌ๋ฆฝํŒ… API์— ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ ๋  ๊ฒƒ ๊ฐ™์œผ๋ฉฐ, ๊ฐ ํ”Œ๋žซํผ์˜ ์กฐ์ด์Šคํ‹ฑ ์ฒ˜๋ฆฌ ์ฝ”๋“œ์— ์˜ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

@akien-mga ๊ทธ ๋ฐฉ๋ฒ•์„ ์ฒ˜์Œ ๋ณด์•˜์„ ๋•Œ Godot๋ฅผ ๋ฐœ๊ฒฌํ•œ ์งํ›„์— ๋น„์Šทํ•œ ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ Kojima๊ฐ€ MetalGearSolid์—์„œ ์ด๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ–ˆ์„ ๋ฐฉ๋ฒ•์„ ์ค‘์‹ฌ์œผ๋กœ ์ „์„ค์ ์ธ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด๋ฅผ ๊ตฌ์ถ•ํ•œ ๋ฐฉ๋ฒ•์„ ๊ธฐ์–ตํ•˜๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. " Godot๋Š” ์ฝ”๋“œ ํ•œ ์ค„๋กœ ๊ณ ์ง€๋งˆ์ฒ˜๋Ÿผ ๋„ค ๋ฒˆ์งธ ๋ฒฝ์„ ๋ถ€์ˆ  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ๊นŒ์ง€ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ •๋ง ๋Œ€๋‹จํ•ด!"

Label ๋ฐ RichTextLabel ์— ์ผ๊ด€์„ฑ ์—†๋Š” ํ…Œ๋งˆ ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Label:
int line_spacing [default: 3]
Color font_color [default: Color( 1, 1, 1, 1 )]

RTL:
int line_separation [default: 1]
Color default_color [default: Color( 1, 1, 1, 1 )]

๋˜ํ•œ ๊ธฐ๋ณธ๊ฐ’์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๊ธ€๊ผด์ด๋ผ๋„ Label ์™€ RichTextLabel ์—์„œ ๋†’์ด๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

200130-1

TextEdit์˜ request_completion ์‹ ํ˜ธ๋Š” ๊ณผ๊ฑฐ ์‹œ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด completion_requested ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฒ„์ „์€ ์‹ ํ˜ธ์˜ callback-y ํŠน์„ฑ๊ณผ ๋‹ฌ๋ฆฌ ๋‹ค์†Œ ํ•„์ˆ˜์ ์œผ๋กœ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

๋ฌผ๋ฆฌ์  ์‹ ์ฒด ์‹ ํ˜ธ์™€์˜ ๋˜ ๋‹ค๋ฅธ ๋ถˆ์ผ์น˜

์ง€์—ญ:

area_shape_entered( int area_id, ๋ฉด์  ๋ฉด์ , int area_shape, int self_shape )
area_shape_exited( int area_id, ๋ฉด์  ๋ฉด์ , int area_shape, int self_shape )
body_shape_entered( int body_id, ๋…ธ๋“œ ๋ฐ”๋””, int body_shape, int area_shape )
body_shape_exited( int body_id, ๋…ธ๋“œ ๋ฐ”๋””, int body_shape, int area_shape )

๋‚˜๋Š” ์ด ๋งˆ์ง€๋ง‰ ๋‘ ๊ฐœ์˜ area_shape๊ฐ€ self_shape์ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ? ๋˜๋Š” ...

๊ฐ•์ฒด:

body_shape_entered( int body_id, ๋…ธ๋“œ ๋ฐ”๋””, int body_shape, int local_shape )
body_shape_exited( int body_id, ๋…ธ๋“œ ๋ฐ”๋””, int body_shape, int local_shape )

์—ฌ๊ธฐ์„œ๋Š” local_shape๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค...

@FrederickDesimpel ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ, ์ธ์ˆ˜๋Š” ํ˜ธํ™˜์„ฑ์„ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์—ฌ์‹ญ์‹œ์˜ค :slightly_smiling_face:

๋ณ€ํ˜•:

์‹ค์ˆ˜ -> ๋ถ€๋™
0 -> NULL?

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ "์‹ค์ œ" ์ด๋ฆ„์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. "float"๋ผ๋Š” ์šฉ์–ด๋Š” ํŠนํžˆ 32๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์ ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€๋งŒ Variant์˜ ์‹ค์ˆ˜๋Š” double์ด๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์—”์ง„์€ ๋‘˜ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ๋Š” real_t ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹ : ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ 2017๋…„์— ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ๋“ค์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๊ณ ๋ ค ํ–ˆ์Šต๋‹ˆ๊นŒ?
shader_type canvas => shader_type 2d
shader_type spatial => shader_type 3d
CanvasItemMaterial => Material2D
SpatialMaterial => Material3D

@Zylann SpatialMaterial์€ ์ด๋ฏธ ๋งˆ์Šคํ„ฐ์—์„œ StandardMaterial3D๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด์•ผ limit_ ์— ๊ฐ’ Camera2D A๋ฅผ ๋ณ€๊ฒฝ Rect2i ? ์ง€๊ธˆ์€ ๋‹จ์ง€ 4๊ฐœ์˜ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋“œ๋ž˜๊ทธ ์—ฌ๋ฐฑ์„ Rect2 ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

String::begins_with ~ String::starts_with .

์ง„์ง€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(Java, Python ๋“ฑ)์—์„œ์ฒ˜๋Ÿผ.

InputEvent.is_action_pressed to InputEvent.is_action_just_pressed
InputEvent.is_action_released to InputEvent.is_action_just_released

https://github.com/godotengine/godot-proposals/issues/316#issuecomment -589426014

"just"๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์ง€๋งŒ event.is_action_...()์€ Input.is_action_just...()์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

Node.add_child_below_node() ์˜ ์ฒ˜์Œ ๋‘ ์ธ์ˆ˜๋ฅผ ๋ฐ”๊ฟ”์„œ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๊ฐ€ Node.add_child() ์™€ ๊ฐ™๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. #19642๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

_์˜๋ฏธ๋ก ์  ๊ณตํฌ์ฆ ๋งํ•˜๊ธฐ..._

Node2D.draw_circle ๋Š” ์›์ด ์•„๋‹Œ ๋””์Šคํฌ๋ฅผ ๊ทธ๋ฆฌ๋ฏ€๋กœ Node2D.draw_disk Node2D.draw_circle ์—ฌ์•ผ ํ•ฉ๋‹ˆ๊นŒ?
Node2D.draw_circle ๋Š” 0 ์—์„œ TAU ๊นŒ์ง€ 0 draw_arc ๋Œ€ํ•œ ๋ฐ”๋กœ ๊ฐ€๊ธฐ๋กœ ๊ณ„์† ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Goutte ์˜์–ด์—์„œ "circle"์€ ์†์ด ๋นˆ ์›์ด๋‚˜ ์ฑ„์›Œ์ง„ ์›์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๋ฆ„์ด ๋” ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜์–ด์—์„œ "circle"์€ ์†์ด ๋นˆ ์› ๋˜๋Š” ์ฑ„์›Œ์ง„ ์›์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐพ์„ ์ˆ˜์—†๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ง€์› ์ด . ์ด ์ฃผ์žฅ์— ๋Œ€ํ•œ ์ถœ์ฒ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์ง๊ฐ์ž…๋‹ˆ๊นŒ?

๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ์„ฑ์— ๊ด€ํ•ด์„œ๋Š” ์—ฌ์ „ํžˆ draw_circle ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋””์Šคํฌ๊ฐ€ ์•„๋‹Œ ๋‹จ์ˆœํžˆ ์›์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

์ฐพ์„ ์ˆ˜์—†๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ง€์› ์ด . ์ด ์ฃผ์žฅ์— ๋Œ€ํ•œ ์ถœ์ฒ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์ง๊ฐ์ž…๋‹ˆ๊นŒ?

https://www.merriam-webster.com/dictionary/circle

1b: ๋‹ซํžŒ ํ‰๋ฉด(ํ‰๋ฉด ํ•ญ๋ชฉ 6์˜ ์˜๋ฏธ 2b ์ฐธ์กฐ) ๊ณก์„  ๋‚ด์˜ ๊ณ ์ •๋œ ์ ์—์„œ ๋ชจ๋“  ์ ์ด ๋“ฑ๊ฑฐ๋ฆฌ(๋“ฑ๊ฑฐ๋ฆฌ์˜ ์˜๋ฏธ 1 ์ฐธ์กฐ)์— ์žˆ๋Š” ๊ณก์„ 
1c : ์ด๋Ÿฌํ•œ ๊ณก์„ ์œผ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ํ‰๋ฉด

(1b)๋Š” ์ˆ˜ํ•™์ ์ธ ์›(๋‘˜๋ ˆ), (1c)๋Š” ์ˆ˜ํ•™์ ์ธ ์›๋ฐ˜(ํ‘œ๋ฉด)์ž…๋‹ˆ๋‹ค.

API ์ธก๋ฉด์—์„œ ๋ณด๋ฉด draw_rect() , draw_filled_rect() , draw_circle() ๋ฐ draw_disk() ๋ณด๋‹ค draw_rect(bool filled) ๋ฐ draw_circle(bool filled) ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด IMO๋ณด๋‹ค ์‚ฌ์šฉ์ž ์นœํ™”์ ์ž…๋‹ˆ๋‹ค draw_disk() (๋˜๋Š” ์ฑ„์›Œ์ง„ ์ง์‚ฌ๊ฐํ˜•์˜ ์ˆ˜ํ•™์  ์ด๋ฆ„์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?).

ํŽธ์ง‘: ์‹ค์ œ๋กœ draw_circle() ์—๋Š” ์•„์ง filled ์ธ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์›(์ฃผ๋ณ€)๊ณผ ์›๋ฐ˜(์ฑ„์›Œ์ง„ ์›)์„ ๋ชจ๋‘ ๊ทธ๋ฆฌ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„์š”. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ œ ํ•™์ƒ๋“ค์€ ํ”„๋ž‘์Šค์ธ์ด๊ณ  ๊ทธ๋“ค ๋ชจ๋‘๊ฐ€ ์ด๊ฒƒ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ–ˆ๊ณ  ์ € ์—ญ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ Godot๋ฅผ ๋น„๋‚œํ–ˆ๊ณ  ์ €๋Š” ๋‹น์—ฐํžˆ ๊ทธ๋“ค์„ ๋†”๋‘˜ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ฑ„์›Œ์ง„ ์ง์‚ฌ๊ฐํ˜•์˜ ์ˆ˜ํ•™์  ์ด๋ฆ„์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฝค ์ข‹์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ "์‚ฌ๊ฐํ˜• ์˜์—ญ" ๋˜๋Š” "์‚ฌ๊ฐํ˜• ๋‚ด๋ถ€"๋ฟ์ด๋ฉฐ ์–ด๋Š ๊ฒƒ๋„ ์ ์ ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Wiki๋Š” ์‹ฌ์ง€์–ด ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด _polygon_์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ๋‹ค๋ฅธ ๋‹จ์–ด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  _ํด๋ฆฌ๊ณค์˜ ๋‚ด๋ถ€_๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚จ์šฉํ•œ๋‹ค๊ณ  ๋ช…์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

filled ์ธ์ˆ˜๊ฐ€ ๋ชจํ˜ธ์„ฑ์„ ์™„ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ธ์ˆ˜ ๋ชฉ๋ก์— ๋„ฃ์„ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ณ ํ†ต์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Goutte ๊ทธ๋Ÿฌ๋‚˜ ์ธ์ˆ˜ ๋ชฉ๋ก์— ๋„ฃ์„ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ณ ํ†ต์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ ํƒ์  ์ธ์ˆ˜(๊ธฐ๋ณธ๊ฐ’์ด ์žˆ์Œ)์ด๊ณ  draw_rect ์™€์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๋์— ๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ œ์–ด ๋…ธ๋“œ๋ฅผ ๋ชจ๋‹ฌ ๋…ธ๋“œ๋ผ๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/godotengine/godot/search?q=modal&unscoped_q=modal ๋Œ€๋ถ€๋ถ„ Viewport.get_modal_stack_top() ํ•จ์ˆ˜์™€ ๊ด€๋ จํ•˜์—ฌ

EditorInterface ์˜ get_selected_path ๋ฐ get_current_path ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฆ„๊ณผ ๊ธฐ๋Šฅ๋ฉด์—์„œ ํ˜ผ๋™์„ ์ค๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋˜ํ•œ ๋ฌธ์„œ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฉ”์„œ๋“œ๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ FileSystemDock ๋ฉ”์„œ๋“œ ์œ„์— ์žˆ๋Š” ์–‡์€ ๋ ˆ์ด์–ด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

String FileSystemDock::get_selected_path() const {
    if (path.ends_with("/"))
        return path;
    else
        return path.get_base_dir();
}

String FileSystemDock::get_current_path() const {
    return path;
}

๋‘˜ ๋‹ค ํ•˜๋‚˜๋Š” get_*_path ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” get_*_dir "์„ ํƒ๋จ" ๋˜๋Š” "ํ˜„์žฌ"(๋˜๋Š” ๋‘˜ ๋‹ค์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ฒƒ)๋ฅผ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Goutte ์ฑ„์›Œ์ง„ ์ง์‚ฌ๊ฐํ˜•์˜ ๋Œ€์•ˆ์ด ์†”๋ฆฌ๋“œ ์ง์‚ฌ๊ฐํ˜•์ด ์•„๋‹™๋‹ˆ๊นŒ?

2019๋…„ 6์›” ์ดํ›„์— ๊ฒŒ์‹œ๋œ ์ œ์•ˆ์œผ๋กœ OP๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ๋งŽ์€ ์ž‘์—…์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์ถ”์ ๊ธฐ๋Š” ๊ธฐ์—ฌ์ž๊ฐ€ ํ•จ๊ป˜ ํ•ด๊ฒฐํ•˜๊ธฐ์— ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๋” ๋งŽ์€ ๊ฒƒ๋“ค์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋•Œ๊ฐ€ ์ด๋ฏธ ์˜จ ๊ฒƒ ๊ฐ™์€๋ฐ์š”?

OP๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฒŒ์‹œ๋œ ์ œ์•ˆ์ด ํŒ€์—์„œ ๊ฐ€์น˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ฐ›์•„๋“ค์ธ๋‹ค๋Š” ์˜๋ฏธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

@Anutrix "์ฑ„์›Œ์ง„"์€ "๊ณ ์ฒด"๋ณด๋‹ค ์‚ฌ์šฉํ•˜๊ธฐ์— ๋” ์ข‹์€ ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. "๊ณ ์ฒด"๋Š” "์•ก์ฒด๋‚˜ ๊ธฐ์ฒด๊ฐ€ ์•„๋‹˜"์„ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@pycbouh ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ ๋ฌธ์ œ์— ๋Œ€ํ•œ PR์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. OP๋Š” ์ด๋ฏธ ์ด๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ๊ทธ ์•„๋ž˜์˜ ์ฃผ์„์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ๊ธฐ๋˜์—ˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ด ๋ฌธ์„œ์— ๋Œ€ํ•ด ๋ฌธ์„œ๋ฅผ ์—ฟ๋ณด๊ธฐ ์œ„ํ•ด ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๋ฉˆ์ถ”๋Š”์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

  • Array.remove => remove_at (์˜ˆ: C#) ์ธ๋ฑ์Šค๋กœ ์ œ๊ฑฐ
  • Array.erase => remove_value ๋˜๋Š” remove (C#์ฒ˜๋Ÿผ) ๊ฐ’์œผ๋กœ ์ œ๊ฑฐ

(๋˜๋Š” erase ๋ณ€ํ˜•)

์™œ๋ƒํ•˜๋ฉด ์ง€๊ธˆ erase ์™€ remove ๋Š” ํ•˜๋‚˜๋Š” ์ธ๋ฑ์Šค์— ์˜ํ•œ ๊ฒƒ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๊ฐ’์— ์˜ํ•œ ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‚˜์—๊ฒŒ ๋™์ผํ•˜๊ฒŒ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


์ด๋ฏธ ์ž๋ž์–ด, ๋‚ด ๋‚˜์œ. ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ–ˆ๋Š”๋ฐ, Github์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ ‘๊ณ  ์žˆ๋Š”๋ฐ, ๋‚ด Ctrl+F ๊ฒ€์ƒ‰์ด ๊ทธ๊ฒƒ์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค xD
์•„์ง OP์— ์—†์Œ

@Zylann ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/godotengine/godot/issues/16863#issuecomment -441376010

Zylann์„ ๋‘ ๋ฒˆ์งธ๋กœ, ์ œ๊ฑฐ๊ฐ€ ์ƒ‰์ธ์— ์˜ํ•œ ๊ฒƒ์ž„์„ ๊ณ„์† ์žŠ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...

ButtonList ์—ด๊ฑฐํ˜•์€ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์ด๋ฏ€๋กœ MouseButtonList ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

JoystickList ์—ด๊ฑฐํ˜•์„ ๋ถ„ํ• ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์—๋Š” ๋ฒ„ํŠผ๊ณผ ์ถ•์ด ๋ชจ๋‘ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ JoypadButtonList ๋ฐ JoypadAxisList ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์œผ๋กœ ๋” ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. MouseButton ์•„๋‹Œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
๋ฒ„ํŠผ == MouseButton.LEFT์ธ ๊ฒฝ์šฐ:
๋ณด๋‹ค ์ž˜ ์ฝํžŒ๋‹ค
๋ฒ„ํŠผ == MouseButtonList.LEFT์ธ ๊ฒฝ์šฐ:

์ข‹์€ ์ƒ๊ฐ. ์ด ๊ฒฝ์šฐ KeyList -> Key , MidiMessageList -> MidiMessage ๋„ ์žˆ๊ณ  ์กฐ์ด์Šคํ‹ฑ์€ List ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. .

๋‚˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ / ์†์„ฑ์„ ์‚ฌ์šฉ๋‚ฌ์Šต๋‹ˆ๋‹ค normal_map ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜๋ฉด, normalmap . ์šฐ๋ฆฌ๋Š” ์ด ์ค‘ ํ•˜๋‚˜๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜์ง€๋งŒ ๋‘˜ ๋‹ค ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” normal_map ์„ ํ˜ธํ•˜์ง€๋งŒ normalmap ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

GD์Šคํฌ๋ฆฝํŠธ

range_lerp() = ์ง€๋„()
์‹œ๋“œ = set_seed()

map()์€ ์•„๋งˆ๋„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ์˜ˆ์•ฝ๋˜์–ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Vector2.tangent() ๋Š” ๋ฌธ์„œ์—์„œ Returns a perpendicular vector. ๋กœ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜๋œ ๋ฒกํ„ฐ๊ฐ€ ์ •๊ทœํ™”๋˜๋ฉด orthogonal ๋˜๋Š” orthonormal ์˜ ์ •์˜์ž…๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— Vector2.tangent() ๋ฐ˜ํ™˜ ๋‚ด๊ฐ€ ์ œ์•ˆ์ด ์•„๋‹Œ ์ •๊ทœํ™” ๋œ ๋ฒกํ„ฐ๋Š” ์šฐ๋ฆฌ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•œ๋‹ค Vector2.orthogonal() ๋˜๋Š” Vector2.perpendicular() ์‚ฌ๋žŒ๋“ค์ด ์•„๋งˆ๋„ ์ˆ˜ํ•™ ์šฉ์–ด์— ๋Œ€ํ•œ ๋ญ”๊ฐ€ ์ด์ƒ์ด์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ Vector2.normal() , ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์€ normalized() ์™€ normal() ์‚ฌ์ด๋ฅผ ํ˜ผ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ง์— ์ผํ™”์ง€๋งŒ, ์ด๊ฒƒ์„ ์ฒ˜์Œ์œผ๋กœ ์ฐพ์•˜์„ ๋•Œ ๋ฌธ์„œ์—์„œ ๋‚˜์˜ ์ฒซ ๋ฒˆ์งธ ๊ฒ€์ƒ‰์€ _perpendicular_์— ๋Œ€ํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

.tangent() ๋ฅผ .perpendicular() ์˜ ๋ณ„์นญ์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”?

orthogonal ๋ผ๋Š” ์ด๋ฆ„์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์— ๋น„ํ•ด ํ”ํ•œ ์˜์–ด ๋‹จ์–ด๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์—๋Š” tangent ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์–ด์จŒ๋“  perpendicular ๊ฐ€ ๋” ๋‚˜์€ ์ด๋ฆ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ง๊ต๋Š” ๋“œ๋ญ…๋‹ˆ๋‹ค. ๋‚˜๋Š” .perpendicular()์— ํˆฌํ‘œํ•˜์ง€๋งŒ compat์— ๋Œ€ํ•œ tangent() ๋ณ„์นญ์„ ์œ ์ง€ํ•˜๊ณ  ๋” ์งง์Šต๋‹ˆ๋‹ค.

@Zireael07 ์ ‘์„ ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•œ

๋‚ด procgen ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋‚ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋‹น์‹ ์€ ๋†€๋ž„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :)

์ด๊ฒƒ์ด ๋…ผ์Ÿ์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ฌ ์ค„์€ ๋ชฐ๋ž์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ Vector2.tangent() ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ ์ˆ˜ํ•™ ์šฉ์–ด์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. Vector2.tangent() ์˜ ๊ณฑ์€ ์ •์˜์ƒ ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์˜ ์ด๋ฆ„์€ ๋‹ค์Œ์— ๊ณ„ํš๋œ ํ˜ธํ™˜์„ฑ ์ค‘๋‹จ์ด๋ฏ€๋กœ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋’ค๋กœ ๊ตฌ๋ถ€๋ ค์•ผ ํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ Vector2.perpendicular() ์ข‹์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ: find_node() ์˜ owner ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ: "์„ ํƒ๋จ", "์ง‘์ค‘๋จ" ๋ฐ "์—†์Œ"์˜ ์šฉ์–ด/์ƒํƒœ์™€ ๊ด€๋ จํ•˜์—ฌ ํ˜ผ๋™์„ ์ค„์ด๊ธฐ ์œ„ํ•ด Tree ์˜ ๋ฉ”์„œ๋“œ/์‹ ํ˜ธ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

Tree::ensure_cursor_is_visible ์€ ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ๊ณ  ensure_focused_item_visible ๋˜๋Š” ensure_selected_item_visible ์™€ ๊ฐ™์ด ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํด๋ž˜์Šค ์ฐธ์กฐ์กฐ์ฐจ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

Makes the currently focused cell visible.

This will scroll the tree if necessary. In SELECT_ROW mode, this will not do horizontal scrolling, as all the cells in the selected row is focused logically.

Note: Despite the name of this method, the focus cursor itself is only visible in SELECT_MULTI mode.

Script::get_instance_base_type() ํŠนํžˆ ์•„๋ž˜์˜ ๊ธฐ๋ณธ ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ์ง€์ •ํ–ˆ์œผ๋ฏ€๋กœ ์Šคํฌ๋ฆฝํŠธ์˜ "๊ธฐ๋ณธ"์ด ์ž ์žฌ์ ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ์˜ ์ด๋ฆ„์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ get_native_type() ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@aaronfranke ๊ธ€์Ž„์š”, get_class() ๋Š” "๋‚ด๊ฐ€ ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์˜ ์ด๋ฆ„์ด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?"๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Script ๊ฒฝ์šฐ "GDScript" , "CSharpScript" ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๋‹ค์‹œ ๋ฐ›์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ˆ, Script ๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ ์ด๋ฆ„์ด ์ง€์ •๋œ ๊ฒฝ์šฐ ์‹ค์ œ ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ „์šฉ ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/godotengine/godot/issues/21789#issuecomment -618588900

ํŽธ์ง‘: ์˜ค, ์ œ ์ƒ๊ฐ์—๋Š” get_class() , get_base_class() ๋ฐ get_native_class() ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ get_instance_native_class() ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” get_instance_base_type() ๊ฐ€ ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ช… ๊ทœ์น™์„ ์œ ์ง€ํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๋ผ ์ธ์Šคํ„ด์Šค์ž„์„ ๋ช…ํ™•ํžˆ ํ•˜์‹ญ์‹œ์˜ค.

๋‚ด ์ƒ๊ฐ autotile_coord (ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ)์˜ TileMap ์œ„ํ•ด ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค tile_coord ๋˜๋Š” tile_coordinate ๋ชจ๋‘ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— AUTO_TILE ๋ฐ ATLAS_TILE ๋Š” ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์ด๋ฆ„์€ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ˜ผ๋™์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋„ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด ์ด ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

LineEdit.text ์™€ ๋™์ผํ•œ ๋™์ž‘์„ ํ•˜๋ฏ€๋กœ LineEdit.text_changed ์—์„œ new_text ์ธ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ old_text ์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ new_text ๋Œ€์‹  old_text ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

https://github.com/godotengine/godot/issues/16863#issuecomment -394745886 ๊ด€๋ จ

"์ถฉ๋Œ ๋ ˆ์ด์–ด ", "VisualInstance ๋ ˆ์ด์–ด ", "๋ Œ๋” ๋ ˆ์ด์–ด " ๋“ฑ์˜ ์ด๋ฆ„์„ ๋‹ค์Œ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
"์ถฉ๋Œ ๊ทธ๋ฃน ", "VisualInstance ๊ทธ๋ฃน ", "๋ Œ๋” ๊ทธ๋ฃน ", "๋ผ์ดํŠธ ๊ทธ๋ฃน "

์™œ ๊ทธ "๋ ˆ์ด์–ด"๊ฐ€ ์Œ“์ด์ง€ ์•Š๋Š”์ง€์— ๋Œ€ํ•œ ํ˜ผ๋ž€์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฑ„๋„์— ๋ฏธ์„ธํ•œ ์‹œ๊ณ„์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Maya, Lumberyard ๋ฐ Unity์—์„œ๋Š” ๋ ˆ์ด์–ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•œ๋‹ค๊ณ  ํ•ด์„œ ๊ทธ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์›์ธ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค
ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

2020๋…„ 5์›” 18์ผ ์›”์š”์ผ ์˜คํ›„ 1:09 Jummit [email protected]์ด(๊ฐ€) ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

Maya, Lumberyard ๋ฐ Unity์—์„œ๋Š” ๋ ˆ์ด์–ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/16863#issuecomment-630349336 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/ABBEIS43HMTPCIFY4GYYK3LRSF2UTANCNFSM4ERRCEZA
.

์•„์ง ์•„๋ฌด๋„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ๋†€๋ž์Šต๋‹ˆ๋‹ค.
Camera2D.zoom
ํ™•๋Œ€/์ถ•์†Œ๊ฐ€ ๋” ํฌ๋ฉด ์นด๋ฉ”๋ผ๊ฐ€ ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” "ํ™•๋Œ€"๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ฉฐ ์ง๊ด€์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. view_scale ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ์ด๋ฆ„์œผ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@KoBeWi zoom ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๋Œ€์‹  ๊ฐ’์„ ๋Š˜๋ฆด ๋•Œ ํ™•๋Œ€๋˜๋„๋ก ์Šค์ผ€์ผ์„ ๋ฐ˜์ „์‹œ์ผœ์•ผ ํ•˜์ง€ ์•Š์„๊นŒ์š”?

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์†์„ฑ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜ธํ™˜์„ฑ์ด ๊นจ์ง‘๋‹ˆ๋‹ค. "์—ญ์ฒ™๋„" ๊ฒฝ๋กœ๋กœ ๊ฐ€๋ฉด ๋ถˆํ–‰ํžˆ๋„ ์ž๋™์œผ๋กœ ๊ณ ์น  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์žฅ๊ธฐ์ ์œผ๋กœ ํ˜ผ๋ž€์ด ๋œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Calinou @KoBeWi ์ด ํ™•๋Œ€/์ถ•์†Œ ์†์„ฑ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ์œ ์Šค ์ผ€์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์Šค์ผ€์ผ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ ๋ฐ˜์ „ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

Viewport.get_final_transform() => Viewport.get_final_transform_2d() ?

Viewport.get_final_transform() => Viewport.get_final_transform_2d() ?

๊ทธ๋Ÿด ์ˆ˜๋„ ์žˆ์ง€๋งŒ Node2D.get_position_2d() ์™€ ๊ฐ™์€ ์„ ์„ ์–ด๋””์— ๊ทธ

ํด๋ž˜์Šค ์ด๋ฆ„์„ Viewport2D๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Viewport3D๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š” ํ•œ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@nathanfranke Transform ์˜ 2๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ๋•Œ ์ด๋ฆ„๋งŒ์œผ๋กœ๋Š” 2D์ธ์ง€ 3D์ธ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. (๋‹ค๋ฅธ ํšŒ์›์ด ์ด๋ฏธ canvas_ ๋˜๋Š” mouse_ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์•ˆ)

@Zylann ์ด ๋ฐฉ๋ฒ•์€ ์‹ค์ œ๋กœ ์ •๋ง ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ผ๋Š” ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค canvas_transform ๋ฐ global_canvas_transform , ๊ทธ๋ฆฌ๊ณ  ์„ค๋ช… canvas_transform ์ด์žˆ๋‹ค :

๋ชจ๋“  ์ž์‹ CanvasItem์˜ ํ™”๋ฉด ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ๋ทฐํฌํŠธ์˜ ์บ”๋ฒ„์Šค ๋ณ€ํ™˜์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ทฐํฌํŠธ์˜ ์ „์—ญ ์บ”๋ฒ„์Šค ๋ณ€ํ™˜์— ์ƒ๋Œ€์ ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ get_final_transform ๊ฐ€ ์ด ๋‘ ๋ณ€ํ™˜์„ ๋ชจ๋‘ ๊ฒฐํ•ฉํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ฝ”๋“œ๋Š” return stretch_transform * global_canvas_transform; ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” stretch_transform ๊ฐ€ ๋ฌด์—‡์„ ์œ„ํ•œ ๊ฒƒ์ธ์ง€ ์•Œ์•„๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์ง€๋งŒ ์ „ํ˜€ ๋ชจ๋ฅด๊ณ , ๋…ธ์ถœ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ canvas_transform ๋ณ€๊ฒฝํ•  ๋•Œ ํ™•์‹คํžˆ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. stretch_transform ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” _stretch_transform ๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€์œผ๋กœ ๋ถˆ๋ฆฌ๋Š” set_size ์— ์˜ํ•ด ์ƒ์„ฑ ๋œ ๊ฐ’ ์†Œ์š”, _stretch_transform ์™€์— ํ• ๋‹น์„ stretch_transform . canvas_transform_override ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ•˜์ง€๋„ ์•Š์•˜๊ณ  ๋…ธ์ถœ๋˜์ง€๋„ ์•Š์•˜์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ์ด ์ˆ˜์—… ์ „์ฒด๋ฅผ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ทฐํฌํŠธ์—๋Š” 4๊ฐœ์˜ ๋‹ค๋ฅธ Transform2D ๋ฉค๋ฒ„, 4๊ฐœ์˜ Rect2(i) ๋ฉค๋ฒ„, 9๊ฐœ์˜ Vector2(i) ๋ฉค๋ฒ„ ๋ฐ 2๊ฐœ์˜ Transform(3D) ๋ฉค๋ฒ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ณ€ํ™˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์ด๋ฏธ 264๋ฐ”์ดํŠธ(๋‹จ์ •๋ฐ€๋„ ๋ถ€๋™ ์†Œ์ˆ˜์  ํฌํ•จ)์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํฌ์ธํ„ฐ๋ฅผ ๋”ํ•˜๋ฉด ์•„๋งˆ๋„ 1KB์— ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. Viewport๊ฐ€ ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ•„์š”๋กœ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•ด ๋ณด์ด๊ณ  ์ตœ์†Œํ•œ ์ฃผ์„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ด ํŒŒ์ผ์—๋Š” ๋„ˆ๋ฌด ์ ์Œ).

Node2D/Node3D to_global ๋ฐ to_local ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ €๋Š” #38902์— ๊ธฐ์ดˆ๋กœ๋งŒ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•˜์ž๋Š” ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์—ˆ์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ to_local ๋Š” ์–ด๋””์—๋„ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ $ grep -RIn "to_global" ๋Š” 5๊ฐœ์˜ ๊ฒฐ๊ณผ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ๋ชจ๋‘ 3D ๋ฐ๋ชจ์˜ GUI์— ์žˆ์œผ๋ฉฐ ๋‹ค์Œ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐ๋ชจ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๊ธ€๋กœ๋ฒŒ ๋ณ€ํ™˜ ์บ์‹œ ๋ฐ ์‚ฌ์šฉ xform ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  to_global .

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์šฐ๋ ค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ๊ณผ ์ „์—ญ ๋ณ€ํ™˜์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์€ ์ฝ”๋“œ ์ž‘์„ฑ์„ ๊ถŒ์žฅํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

27509

AnimationPlayer ์˜ animation_started ๋ฐ animation_finished ๋Š” ๋‹ค์†Œ ์ง๊ด€์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ๋Œ€๊ธฐ์—ด์˜ ๋ชจ๋“  ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•ด ํ˜ธ์ถœ๋˜๊ณ  ํ›„์ž๋Š” ๋Œ€๊ธฐ์—ด์˜ ๋งจ ๋์— ๋„๋‹ฌํ•  ๋•Œ๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋ช…ํ™•ํ•˜๊ฒŒ ์–ธ๊ธ‰๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŠน์ • ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์–ธ์ œ ๋๋‚˜๋Š”์ง€ ๊ฐ์ง€ํ•˜๋ ค๋ฉด animation_changed ์™€ animation_finished ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ๋ฌธ์ œ์—์„œ @txigreman ์˜ ์ œ์•ˆ์„ ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—ด์˜ ๋‹จ์ผ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋๋‚  ๋•Œ๋งˆ๋‹ค animation_finished ํ•˜๊ณ  ์ƒˆ ์‹ ํ˜ธ animation_all_finished ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค( Tween '์™€ ์œ ์‚ฌ). s tween_all_completed ) ๋Œ€๊ธฐ์—ด์˜ ๋์— ๋„๋‹ฌํ•  ๋•Œ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

animation_queue_finished ๋ฐ/๋˜๋Š” animation_queue_started ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.
find ๋ฐ findn ์Œ.

image
3.2 ๋งˆ์ง€๋ง‰ ์•ˆ์ •์ ์ธ ๋นŒ๋“œ์˜ ์ด๋ฏธ์ง€.

๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ํŠน์„ฑ์„ ์–ธ๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ง, find_ignorecase ๋Œ€์‹  findn ?

@swarnimarun n ๋๋‚˜๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด ๋ชจ๋‘ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•( find / findn ๋“ฑ)์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Calinou ์ €๋Š” GDScript๋ฅผ ๋ช‡ ๋‹ฌ ๋™์•ˆ ์‚ญ์ œํ•œ ํ›„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด API์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๊ด€์ ์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋” ๋ช…ํ™•ํ• ์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ API๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์€ ๊ทธ ์ž์ฒด๋กœ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ด๋ฆ„์— ์ข€ ๋” ์žฅํ™ฉํ•œ ๊ฒƒ์€ ์ •์ƒ์ ์ธ ๋ณ€๊ฒฝ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

@KoBeWi ๋Š” ๋‹ค๋ฅธ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๋™์•ˆ(API์˜ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์žŠ์–ด๋ฒ„๋ฆฐ/๋ชจ๋ฅธ ํ›„) ๊ธฐ์–ตํ•  ํ•„์š” ์—†์ด ํ•จ์ˆ˜ ์ด๋ฆ„์œผ๋กœ ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ์„ ๋งํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋”๋ผ๋„ ์—ฌ์ „ํžˆ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

EditorInterface.get_editor_viewport() => get_editor_main_container()

์ด ํ•จ์ˆ˜๋Š” Viewport ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  2D, 3D, ์Šคํฌ๋ฆฝํŠธ ํŽธ์ง‘๊ธฐ ๋ฐ ์ž์‚ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณด์œ ํ•˜๋Š” ์ค‘์‹ฌ ํ•จ์ˆ˜์ธ Control ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๋œ ๋…ธ๋“œ๋Š” VBoxContainer* ์ด์ง€๋งŒ ์ถ”์ƒํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์„ค์ • ์„ ํƒ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค).
๋ฌธ์„œ์˜ ์„ค๋ช…์ด Viewport ํด๋ž˜์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์„œ๋„ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://docs.godotengine.org/en/stable/classes/class_editorinterface.html#class -editorinterface-method-get-editor-viewport

@Zylann ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹ˆ๋ฏ€ ๋กœ get_editor_main_screen() ์ด์–ด์•ผ ํ•˜์ง€๋งŒ ๋ฉ”์ธ ํ™”๋ฉด ์ž…๋‹ˆ๋‹ค.

@aaronfranke ๋Š” Container ๋…ธ๋“œ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค^^ ํ•˜์ง€๋งŒ... ๋ฉ”์ธ ํ™”๋ฉด๋„ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

200528-1

๋ฌป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์ œ์•ˆ์„ ์ถ”์ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์—์„œ(https://github.com/godotengine/godot/issues/16863#issuecomment-557657413) JSON.print ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์ด ์ œ์•ˆ๋˜์—ˆ์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ์—๋Š” ๊ทธ ์ค‘ ์•„๋ฌด ๊ฒƒ๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์œ ์šฉํ•œ ์•„์ด๋””์–ด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์‚ฌ๋ผ์งˆ๊นŒ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. :์›ƒ๋‹ค:

@dalexeev ์ตœ๊ทผ์— ์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ ์•„์ง ๋ชจ๋“  ๋Œ“๊ธ€์„

RichTextLabel ์ผ๋ถ€ ๋ฒ„๊ทธ๋ฅผ ์ž ์žฌ์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ bbcode_text ๋ฐ text ๊ฐ€ ์žˆ์ง€๋งŒ ๋‘˜ ๋‹ค ๋‚ด๋ถ€์ ์œผ๋กœ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋™์•ˆ ๋งŒ ๋ถˆ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅธ set_bbcode ๋’ค๋กœ ๋–จ์–ด์งˆ set_text ํ•˜๋ฉด use_bbcode ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” #39148์—์„œ ๊ทธ๊ฒƒ๋“ค์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฑฐ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ํฌ์ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Node์˜ GetSceneInstanceLoadPlaceholder() ๋Š” ๋งค์šฐ ์ž˜๋ชป๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋จผ์ € ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ž๋ฆฌ ํ‘œ์‹œ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์ง€๋งŒ bool ๋ฐ ๋‘ ๋ฒˆ์งธ๋กœ ์ƒ์†๋œ ๊ตฌํ˜„์˜ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ์‹ค์ œ ์š”๊ตฌ ์‚ฌํ•ญ ์—†์ด ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ ๋ˆ„์ถœ๋ฉ๋‹ˆ๋‹ค(์œ ํ˜• ํ…Œ์ŠคํŠธ ๋…ธ๋“œ์˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€๋Šฅ)

RayShape โ†’ SeparationRayShape , ์ฒ˜์Œ์— godotengine/godot-proposals#711์—์„œ ์ œ์•ˆ๋œ ๋Œ€๋กœ.

sort_custom ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  sort ๋ฅผ ์„ ํƒ์  Callable๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๊ฐ๊ฐ OS.get_ticks_usec() ๋ฐ OS.delay_usec() ์œ„ํ•ด OS.get_ticks_msec() ๋ฐ OS.delay_msec() ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋™์ผํ•œ ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ๊ฐ’์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ณฑํ•˜๊ฑฐ๋‚˜ 1000์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ GDScript์™€ C++ ๋ชจ๋‘ ์ •์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์— ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํฐ ๊ฐ’์„ ๋” ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# Since Godot 3.2.
OS.delay_usec(123_456_789)
// Since C++14.
OS::get_singleton()->delay_usec(123'456'789);

๋˜ํ•œ GDScript์™€ C++ ๋ชจ๋‘ ์ •์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์— ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํฐ ๊ฐ’์„ ๋” ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ๊ฑฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด get_ticks_usec() ์„ค๋ช…์— ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๊ฐ€ ์–ธ๊ธ‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Calinou ํ•œํŽธ์œผ๋กœ๋Š” ๋‹น์‹ ์ด ์˜ณ์•˜์ง€๋งŒ ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” - ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ทธ๋Ÿฌํ•œ ๋†’์€ ์ •ํ™•๋„๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ณต๊ฐ„ ์†Œ์žฌ์˜ '์•ŒํŒŒ ๊ฐ€์œ„'๋Š” ํ‘œ์ค€ '์•ŒํŒŒ ํด๋ฆฝ'์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Flavelius ์ €๋Š” "์•ŒํŒŒ ํด๋ฆฝ"์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ "์•ŒํŒŒ ํด๋ฆฝ"๊ณผ "์•ŒํŒŒ ๊ฐ€์œ„"๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ž์ฃผ "์•ŒํŒŒ ํ…Œ์ŠคํŠธ"๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ๋งŽ์Šต๋‹ˆ๋‹ค! ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋Ÿฌํ•œ ์ œ์•ˆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@MCrafterzz ์‚ฌ๋žŒ๋“ค์€ ์ •๊ธฐ์ ์œผ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•œ ๋ฒˆ์— ๋ชจ๋‘๊ฐ€ ์•„๋‹ˆ๋ผ ์ ์ง„์ ์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ…์Šค์ฒ˜(Texture2D) ๋ฐ ์ด๋ฏธ์ง€

  • Texture(Texture2D)์˜ get_data()๋Š” get_image()๋กœ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์•ผ ํ•˜๊ณ  Image์˜ get_data()๋Š” get_bytes()๋กœ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์•ผ ์ž์ฒด ์„ค๋ช…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

IMO: get_image ์˜ˆ, get_bytes ์•„๋‹ˆ์š”.

texture.get_image().get_data()

๋ฉ”์‹œ / ๋ฉ”์‹œ ์ธ์Šคํ„ด์Šค

  • Mesh์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ Material์„ ์–ป๊ฑฐ๋‚˜ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    surface_get_material/surface_set_material
  • MeshInstance์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    get_surface_material/set_surface_material

๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ์ถ”์ธกํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์ด์–ด์•ผํ•ฉ๋‹ˆ๊นŒ?

@Coldragon get_surface_material / set_surface_material ๋ฐ surface_material ์†์„ฑ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Coldragon get_surface_material / set_surface_material ๋ฐ surface_material ์†์„ฑ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

"์ผ๋ฐ˜" ์„ค์ •/๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๋Œ€์ƒ ํ‘œ๋ฉด์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(๋ฉ”์‹œ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ฒกํ„ฐ์ž„).

Array ๋ถ€์šธ ๊ฐ’์„ ๋” ์ž˜ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด empty() ์„ is_empty() ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

String rfind() ๋Œ€์‹  find_last() ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์–ด๋–ค ์ด๋ฆ„์„ ์œ ์ง€ํ• ์ง€ ๋…ผ์˜ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ ์ˆซ์ž์˜ ๊ฒฝ์šฐ stepify ์žˆ์Šต๋‹ˆ๋‹ค. Vector2/Vector3์˜ ๊ฒฝ์šฐ snapped ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒกํ„ฐ๋Š” ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด stepify ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ด๋ฆ„์„ ์„ ํƒํ•ด์•ผ ํ•˜์ง€๋งŒ ์–ด๋–ค ์ด๋ฆ„์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ์š”?

Poll: :heart: = ๋‘˜ ๋‹ค stepify ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. , :rocket: = ๋‘˜ ๋‹ค snapped ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. :-1: = ์ด๋ฆ„์„ ๋ฐ”๊พธ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

AABB ์—๋Š” intersection ๊ฐ€ ์žˆ๊ณ  Rect2 ์—๋Š” clip ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋˜‘๊ฐ™์€ ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ด๋ฆ„์„ ์„ ํƒํ•ด์•ผ ํ•˜์ง€๋งŒ ์–ด๋–ค ์ด๋ฆ„์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ์š”?

Poll: :heart: = ๋‘˜ ๋‹ค intersection ์—ฌ์•ผ ํ•˜๊ณ , :rocket: = ๋‘˜ ๋‹ค clip ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. :-1: = ์ด๋ฆ„์„ ๋ฐ”๊พธ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

@aaronfranke ์˜ˆ, ์ด์ „์— https://github.com/godotengine/godot/issues/16863#issuecomment -449628319์—์„œ intersection ์ด๋ฆ„์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š”์ด intersects ๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ ๋  ์ˆ˜์žˆ๋Š” overlaps ์—์„œ Rect2 ,ํ•˜์ง€๋งŒ ํ™•์‹ค ์•ฝ AABB ์— ๋Œ€ํ•ด intersects โ†’ overlaps ์ด๋ฆ„์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์ด๋ฆ„์ด 2์˜ ์ฐจ์ด์ ์„ ์ „ํ˜€ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— find_node ๋ฐ/๋˜๋Š” get_node์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
find_node๋Š” ์ž์‹๋งŒ ๋ณด๊ธฐ ๋•Œ๋ฌธ์— find_child_node๊ฐ€ ์•„๋‹๊นŒ์š”?
get_node์˜ ๋Œ€์ฒด ์ด๋ฆ„์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฒซ ๋ฒˆ์งธ ์ƒ๊ฐ์€ ํŠธ๋ฆฌ์˜ ์–ด๋Š ๊ณณ์—์„œ๋‚˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— get_tree_node์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” ์žฅ๋ฉด ํŠธ๋ฆฌ ์™ธ๋ถ€์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

get_node ๋Š” ์ข‹์ง€๋งŒ find_node ์ด๋ฆ„์€ find_child ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@MuffinManKen get_node ๋Š” ๊ท€ํ•˜๊ฐ€ ์–ธ๊ธ‰ํ•œ ๋ฐ”์™€ ๊ฐ™์ด ์ฃผ์–ด์ง„ ๋…ธ๋“œ์™€ ๋™์ผํ•œ ํŠธ๋ฆฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ํ•œ ๋…ธ๋“œ์˜ ์ผ๋ถ€์ธ์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์–ด๋””์„œ๋‚˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. SceneTree ์—ฌ๋ถ€.

@Coldragon ๋‚˜๋Š” ํ™•์‹คํžˆ ๋‚˜๋Š” ์ด๋ฆ„ ๋ณ€๊ฒฝ๊ณผ ๊ฐ™์€ ์•„๋‹ˆ์—์š” find_node ์— find_child ๊ทธ ๋‹ค์Œ ๋‚˜์—๊ฒŒ ์–ด๋–ค ์ด์œ ๋กœ ์ง์ ‘ ์•„์ด๋“ค๊ณผ ํ•จ๊ป˜ ๋งŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ์ธ์ƒ์„ ์ค€๋‹ค์œผ๋กœ, ์ค‘. ๋Œ€์•ˆ์€ find_descendant ๋˜๋Š” ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด์ง€๋งŒ ๋„ˆ๋ฌด ์žฅํ™ฉํ•˜๊ณ  ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. find() ๋กœ ์ค„์ด๋Š” ๊ฒƒ๋„ ์šฐ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ์ฐพ๊ณ  ์žˆ๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋Œ€์•ˆ์„ ์ฐพ์ง€ ์•Š๋Š” ํ•œ find_node ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. API ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋™์ž‘์˜ ๋ช…ํ™•ํ•œ ๋ฌธ์„œํ™”๋œ ์ฐจ์ด์ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Godot 3.1์—์„œ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‚ด๋ณด๋‚ด๊ธฐ ํ…œํ”Œ๋ฆฟ ๋ฐ”์ด๋„ˆ๋ฆฌ(๋””๋ฒ„๊ทธ ๋˜๋Š” ๋ฆด๋ฆฌ์Šค)์—์„œ ์‹คํ–‰๋  ๋•Œ true ํ‰๊ฐ€๋˜๋Š” standalone ๊ธฐ๋Šฅ ํƒœ๊ทธ ๋ฅผ ์ถ”๊ฐ€ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋Š” editor ์ด๋ฉฐ, ํ”„๋กœ์ ํŠธ๊ฐ€ ํŽธ์ง‘๊ธฐ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์‹คํ–‰๋  ๋•Œ true ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ standalone ์„ runner ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๋” ์งง๊ณ  ์•ฝ๊ฐ„ ๋” ์ž๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋‚˜์š”?

exported ๋˜๋Š” release ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@aaronfranke exported ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋‚ด๋ณด๋ƒˆ์Œ์„ ์˜๋ฏธํ•˜์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ž์‚ฐ์„ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜จ ๊ฒฝ์šฐ ๋‚ด๋ณด๋‚ด๊ธฐ ํ…œํ”Œ๋ฆฟ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ํŒŒ์ผ์—์„œ ์ง์ ‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ release ๋Š” ์ด๋ฏธ ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(๋””๋ฒ„๊ทธ ๋ชจ๋“œ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” debug ์™€ ๋Œ€์กฐ์ ์œผ๋กœ).

runner ์ด(๊ฐ€) ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. standalone ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. !OS.get_feature("editor") ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

!OS.get_feature("editor") ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

.not ์„ ํƒ๊ธฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ ์„ค์ •์„ ์žฌ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ค์ •๊ณผ ์žฌ์ •์˜๋ฅผ ๋ฐ”๊พธ๋ฉด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์กฐ๊ธˆ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด editor ์™€ ๋Œ€์กฐ๋˜๋Š” app ๋˜๋Š” game ์•„๋‹Œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋” ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ๊นŒ์š”? no-editor ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋” ๋ช…์‹œ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@willnationsdev game Godot๊ฐ€ ๊ฒŒ์ž„์—๋งŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ฒŒ์ž„์ด ์•„๋‹Œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— Godot๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์ข€ ๋” ํฌ๊ด„์ ์ธ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค :slightly_smiling_face:

๋˜ํ•œ ์„ค๋ช…์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์ด ํŽธ์ง‘๊ธฐ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์ ํŠธ์— ์—ฌ์ „ํžˆ ์ ์šฉ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ฒฐ๊ตญ ํŽธ์ง‘๊ธฐ์—์„œ "๊ฒŒ์ž„"์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Œ). app ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

"๋…๋ฆฝ"์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

2020๋…„ 7์›” 25์ผ(ํ† ) ์˜ค์ „ 5:49 Hugo Locurcio, ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

@willnationsdev https://github.com/willnationsdev ๊ฒŒ์ž„์€ Godot๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค
๊ฒŒ์ž„์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ™‚

๋˜ํ•œ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ์ „ํžˆ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŽธ์ง‘๊ธฐ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•ฑ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/16863#issuecomment-663835822 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AFMN5DM5U3KLXVUVIC2OGTR5KTDXANCNFSM4ERRCEZA
.

@MuffinManKen independent ๋Š” ๋‚˜์—๊ฒŒ๋„ ๊ทธ๋‹ค์ง€ ์ž๋ช…ํ•˜๊ฒŒ ๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—๋””ํ„ฐ ๋Œ€ ๋…๋ฆฝํ˜•์€ ์•„๋งˆ๋„ ํ‘œ์ค€ ์ด๋ฆ„ ์ง€์ •(์ตœ์†Œํ•œ ์—ฌ๋Ÿฌ ์—”์ง„์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Œ)์ด๋ฏ€๋กœ ํœ  imho๋ฅผ ์žฌ๋ฐœ๋ช…ํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Get_node๋Š” ์ž์†์„ ์–ป๋Š” ๋ฐ ๊ตญํ•œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋งค์šฐ
์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ๋Š” ์ด๋ฆ„. ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

2020๋…„ 7์›” 25์ผ(ํ† ) ์˜คํ›„ 3์‹œ 14๋ถ„ golddotasksquestions, <
[email protected]>์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์— ์˜ค๋žซ๋™์•ˆ ํ˜ผ๋ž€์Šค๋Ÿฌ์› ๋˜ ๊ธฐ์–ต์ด
find_node ๋ฐ get_node. ๋‚˜๋Š” find_descendant์™€
get_descendant, ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด๊ณ  ์œ ์ตํ•œ ์ •๋ณด๊ฐ€ ๋  ๊ฒƒ์ด๋ฏ€๋กœ @willnationsdev
https://github.com/willnationsdev @Coldragon
https://github.com/Coldragon
"๋‹จ์ˆœํ•จ"์€ ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ์ฐจ ํ•œ์ž”์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์ง€๋งŒ imho๋Š” ์‹ค์ œ๋กœ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ž๋™ ์™„์„ฑ ๋ฐ ์•ฝ์–ด "$"๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/godotengine/godot/issues/16863#issuecomment-663890652 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AFMN5DJNBNB6ZOUIV62VX2DR5MVJBANCNFSM4ERRCEZA
.

Transform ๋ฐ Transform2D ๋ฉ”์†Œ๋“œ inverse ๋ฐ xform_inv ๋ชจ๋‘ ์ด๋ฆ„์„ ๋ณ€๊ฒฝ/์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹ค์ œ๋กœ ํ•˜๋Š” ์ผ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค . ์ž์„ธํ•œ ๋‚ด์šฉ: https://github.com/godotengine/godot/issues/39433#issuecomment -664024521.

RayCast.cast_to ๋Š” RayCast.segment ๋˜๋Š” ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์ด ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ์†์„ฑ์ด๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๋Š” ๋ฐ 40๋ถ„์ด ๊ฑธ๋ ธ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋™์‚ฌ์ด๊ธฐ๋„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

RayCast.target ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@razcore-art ์ตœ๊ทผ ์— ๋ ˆ์ด ์บ์ŠคํŒ…๊ณผ ๊ด€๋ จ๋œ ์งˆ๋ฌธ ์— segment ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค๋ช…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์น˜ ์— ๋งž๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ direction ๋ฐ length ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์‹ค์ œ๋กœ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์•„๋‹Œ ๊ด‘์„ ์— ๋” ๊ฐ€๊นŒ์šด ๊ฒƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐํ•˜ํ•™์ ์œผ๋กœ ๋งํ•˜๋ฉด(๋˜๋Š” ๊ทธ๋ƒฅ ๊ณต์กดํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์ฒด ์†์„ฑ์„ ์ œ๊ณตํ•จ) . ๋ฌธ์ œ๋Š” ์ธ์ŠคํŽ™ํ„ฐ์—์„œ ์‰ฝ๊ฒŒ ์ •๊ทœํ™”๋œ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๋ฅผ ์„ค์ •ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ ์–ด๋„ 2D๋ฅผ ์œ„ํ•œ ์ œ์•ˆ์„œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค: godotengine/godot-proposals#397, ํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ๊ทธ๊ฑด ๋„ˆ๋ฌด ๋ฌด๋ฆฌ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋” ์ƒ๊ฐํ•ด๋ณด๋ฉด segment ๋Š” RayCast ๋…ธ๋“œ ์ธก๋ฉด์—์„œ ๋ณ„๋กœ ์˜๋ฏธ๊ฐ€ ์—†์ง€๋งŒ Physics2DDirectSpaceState.intersect_ray() ์ธก๋ฉด์—์„œ๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

RayCast.target ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@nathanfranke ๋Œ€์ƒ์ด Node ๋˜๋Š” NodePath ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์†Œํ•œ RayCast.target_position ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RayCast.cast_position ๋˜๋Š” RayCast.cast_offset . ๊ด‘์„  ํˆฌ์‚ฌ๊ฐ€ ํšŒ์ „ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋Š” ์ „์—ญ ์ขŒํ‘œ์—์„œ ์‹ค์ œ ํˆฌ์‚ฌ ์œ„์น˜๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PhysX API๋Š” ๋ ˆ์ด ์บ์ŠคํŠธ ๊ตฌ์„ฑ์„ ์œ„ํ•œ ๋‹จ์œ„ ๋ฐฉํ–ฅ + ๊ธธ์ด์— ๋Œ€ํ•œ ์ œ ์ƒ๊ฐ์„ ํ™•์ธ์‹œ์ผœ์ค๋‹ˆ๋‹ค. ๐Ÿ˜›

์ฆ‰, ๋‚˜๋Š” cast_position ์ชฝ์œผ๋กœ ๊ธฐ์šธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ... ๋ ˆ์ด ์บ์ŠคํŒ…์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋” ๋งŽ์€ ํ•ต์‹ฌ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@Xrayez ๋‚˜๋Š” ์†์„ฑ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— "cast"๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ช…์‚ฌ "cast"๊ฐ€ ์•„๋‹ˆ๋ผ "cast"๋ผ๋Š” ๋™์‚ฌ๋กœ ์ฝ๊ฒŒ ๋˜๋ฏ€๋กœ cast_position ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์†์„ฑ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ชจ๋ฅด๋Š” ์›๋ž˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค( cast_position ๊ฐ€ ์œ„์น˜๋กœ ์บ์ŠคํŒ…ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค). target_position ์ข‹์•„์š”.

https://github.com/godotengine/godot/issues/19325#issuecomment -394155128์—์„œ:

KEY_BACK ๋ฅผ KEY_MEDIA_BACK , KEY_FORWARD ๋ฅผ KEY_MEDIA_FORWARD ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MEDIA ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฏธ๋””์–ด ํ‚ค๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

String begins_with() ์„ starts_with() ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Java, C#, Python, JavaScript ๋“ฑ์—์„œ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ์Šค์ฟผ๋“œ ํŽธ์ง‘: https://github.com/godotengine/godot/issues/16863#issuecomment -596069130

bool , float , int ๋Š” ์ด๋ฆ„์ด ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ์œ ์ผํ•œ ์œ ํ˜•/ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. (GDScript์—์„œ) Bool , Float , Int ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž˜๋ชป๋œ ์œ ํ˜• ๊ตฌ๋ฌธ ๊ฐ•์กฐ ํ‘œ์‹œ ๋ฌธ์ œ๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  bool , float , int ๋Š” @GDScript ํŽ˜์ด์ง€์˜ ๋‚ด์žฅ Python ์œ ์‚ฌ ํ•จ์ˆ˜ len ๋ฐ str ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค)

str / String : str(x) ์™€ String(x) ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ์ƒํ™ฉ์ด ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ํ•˜๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# `Int` is type.
func get_key() -> Int:
    # `int` is Python-like function.
    return int(config.get_value("sect", "key"))

@dalexeev ๊ทธ๋“ค์€ ์›์‹œ ์œ ํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์†Œ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Node ์™€ ๊ฐ™์€ ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ์œ ํ˜•์ด๋ฉฐ ํ• ๋‹น ์‹œ ๋ณต์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

var a := Node2D()
var b = a
a.position = Vector2(2, 2)
print(b.position) # (2, 2)

์˜คํžˆ๋ ค, ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฆ„์„ ๋ณ€๊ฒฝ ๊ณ ๋ คํ•ด์•ผ String ์— string ๋ถ€ํ„ฐ String ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค ๋” ์œ ์‚ฌํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉฐ int ๋ง๋ณด๋‹ค Node .

Vector2 , Vector3 ๋“ฑ์˜ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋ฏ€๋กœ ์ง€๊ธˆ์€ ์ด๊ฒƒ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

@nathanfranke ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Kotlin, Haxe, ๋ชจ๋“  ์œ ํ˜• ์˜ Ada ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์›์‹œ์„ฑ์€ ์กฐ๊ฑด๋ถ€ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ String , Color , Vector2 ๋“ฑ์€ ๊ธฐ๋ณธ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์œ ์ผํ•œ ์žฅ์• ๋ฌผ์€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ ์œ„๋ฐ˜์ž…๋‹ˆ๋‹ค.

String ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—

๋†€๋ž๊ฒŒ๋„ GDScript์˜ ๋ฌธ์ž์—ด์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

var s = "abc"
s[0] = "xyz"
print(s) # xyzbc

Vector2 ๋Š” 2 float ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ์š”์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Vector2 ๋ฐ float ๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ๋ณ€ํ˜• ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

@Zylann ํƒ€์ž…๋ช…์— ๋ฐ˜์˜ํ•ด์•ผ ํ•  ์ •๋„๋กœ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ธ๊ฐ€์š”?

(์ €์—๊ฒŒ '์›์‹œ'๋Š” '๋‹จํ’ˆ'์ด ์•„๋‹ˆ๋ผ '๋‹จ์ˆœ'์ž…๋‹ˆ๋‹ค.)


๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‚˜์—๊ฒŒ ์œ ๋ฆฌํ•˜๊ฒŒ ํ•ด์„ํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์ง€๋งŒ:

๊ธฐ๋ณธ ์œ ํ˜•์˜ ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. :์›ƒ๋‹ค:

๋‚ด๊ฐ€ ์ดํ•ดํ•œ ์šฉ์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

| ์œ ํ˜• ์ด๋ฆ„ | ๊ธฐ๋ณธํ˜• | ๊ฐ’ ์œ ํ˜• | ๊ฐ€๋ณ€ํ˜• | ๋‚ด์žฅํ˜• |
| -------------- | -------------- | -------------- | -------------- | -------------- |
| ์ •์ˆ˜ | ์˜ˆ | ์˜ˆ | ํ•ด๋‹น ์—†์Œ | ์˜ˆ |
| ๋ฒกํ„ฐ2 | ์•„๋‹ˆ์˜ค | ์˜ˆ | ํ•ด๋‹น ์—†์Œ | ์˜ˆ |
| ๋…ธ๋“œ | ์•„๋‹ˆ์˜ค | ์•„๋‹ˆ์˜ค | ์˜ˆ | ์˜ˆ |
| ๋ฌธ์ž์—ด | ์•„๋‹ˆ์˜ค | ์•„๋‹ˆ์˜ค | ์•„๋‹ˆ์˜ค | ์˜ˆ |

์–ด์จŒ๋“  ์ด ์ด๋ฆ„์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๊ดœ์ฐฎ๊ณ  ๋‹ค์–‘ํ•œ ์–ธ์–ด์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์—๊ฒŒ ์นœ์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ถ”์ ๊ธฐ๋ฅผ ๋ฌด์˜๋ฏธํ•œ ํ† ๋ก ์œผ๋กœ ์ฑ„์šฐ์ง€ ์•Š๋„๋ก ์—ฌ๊ธฐ์„œ ํ† ๋ก ์„ ๋๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์œ ํ˜• ์—ด์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ฒด ํŒŒ์ƒ, ์‚ฌ์ „ ๋ฐ ๋ฐฐ์—ด๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ( Vector2 ๋Š” vec2.x = 0 ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” vec2 = vec2.with_x(0) ์™€ ๊ฐ™์ด ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.)

ShortCut ์„ Shortcut

๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์ด์˜ ๋ถˆ์ผ์น˜

Input.is_action_just_pressed(action: String) -> bool
Input.is_action_just_released(action: String) -> bool
Input.is_action_pressed(action: String) -> bool

์—๊ฒŒ

Input.is_action_pressed(action: String, allow_echo: bool = false) -> bool
Input.is_action_released(action: String) -> bool

์ผ๊ด€์„ฑ์„ ์œ„ํ•ด
๊ทธ๋ฆฌ๊ณ 

InputEvent.is_action_pressed(action: String, allow_echo: bool = false) -> bool
InputEvent.is_action_released(action: String) -> bool

์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹  : "๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์€ ์ ์„์ˆ˜๋ก ์ข‹๋‹ค"๋Š” ์›์น™์—์„œ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

@dalexeev ๋ถ€์šธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” true ๋ฐ false ์ปจํ…์ŠคํŠธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ข…์ข… ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ ์ผ๊ด€์„ฑ๋„ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด InputEvent์—์„œ ๋ถ€์šธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@Calinou ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์—์ฝ” ์ด๋ฒคํŠธ๋ฅผ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ํฐ ๋ฌธ์ œ๋กœ ๋ณด์ง€ ์•Š๋Š”๋‹ค. ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ธ์ˆ˜ ํžŒํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ Shift + ํด๋ฆญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ธ์ˆ˜๋Š” ๋น ๋ฅด๊ฒŒ ๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: String.split ).

๋˜ํ•œ doc/classes ๋””๋ ‰ํ† ๋ฆฌ์—์„œ 208๊ฐœ์˜ ์„ ํƒ์  ๋ถ€์šธ ์ธ์ˆ˜๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด๊ฒƒ์€ ํ•ต์‹ฌ์ผ ๋ฟ์ด๋ฉฐ 16๊ฐœ ๋ชจ๋“ˆ์—๋Š” doc_classes ์ค‘์ฒฉ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค).

AcceptDialog.xml

17:         <argument index="1" name="right" type="bool" default="false">

AnimatedSprite2D.xml

26:         <argument index="1" name="backwards" type="bool" default="false">

AnimationNode.xml

53:         <argument index="5" name="optimize" type="bool" default="true">
74:         <argument index="6" name="optimize" type="bool" default="true">

AnimationPlayer.xml

146:            <argument index="3" name="from_end" type="bool" default="false">
201:            <argument index="1" name="update" type="bool" default="false">
223:            <argument index="0" name="reset" type="bool" default="true">

Animation.xml

349:            <argument index="2" name="exact" type="bool" default="false">

Array.xml

130:            <argument index="1" name="before" type="bool" default="true">
146:            <argument index="3" name="before" type="bool" default="true">
172:            <argument index="0" name="deep" type="bool" default="false">
366:            <argument index="3" name="deep" type="bool" default="false">

AStar2D.xml

79:         <argument index="2" name="bidirectional" type="bool" default="true">
114:            <argument index="1" name="include_disabled" type="bool" default="false">
276:            <argument index="1" name="disabled" type="bool" default="true">

AStar.xml

74:         <argument index="2" name="bidirectional" type="bool" default="true">
94:         <argument index="2" name="bidirectional" type="bool" default="true">
113:            <argument index="2" name="bidirectional" type="bool" default="true">
131:            <argument index="1" name="include_disabled" type="bool" default="false">
293:            <argument index="1" name="disabled" type="bool" default="true">

Camera3D.xml

15:         <argument index="0" name="enable_next" type="bool" default="true">

CanvasItem.xml

274:            <argument index="2" name="filled" type="bool" default="true">
376:            <argument index="4" name="transpose" type="bool" default="false">
403:            <argument index="4" name="transpose" type="bool" default="false">
411:            <argument index="8" name="clip_uv" type="bool" default="true">

ClassDB.xml

55:         <argument index="1" name="no_inheritance" type="bool" default="false">
66:         <argument index="1" name="no_inheritance" type="bool" default="false">
88:         <argument index="1" name="no_inheritance" type="bool" default="false">
110:            <argument index="1" name="no_inheritance" type="bool" default="false">
134:            <argument index="2" name="no_inheritance" type="bool" default="false">

CodeHighlighter.xml

19:         <argument index="3" name="p_line_only" type="bool" default="false">

Color.xml

251:            <argument index="0" name="with_alpha" type="bool" default="true">

Control.xml

586:            <argument index="2" name="keep_margin" type="bool" default="false">
588:            <argument index="3" name="push_opposite_anchor" type="bool" default="true">
605:            <argument index="3" name="push_opposite_anchor" type="bool" default="false">
629:            <argument index="1" name="keep_margins" type="bool" default="false">
720:            <argument index="1" name="keep_margins" type="bool" default="false">
758:            <argument index="1" name="keep_margins" type="bool" default="false">
779:            <argument index="1" name="keep_margins" type="bool" default="false">

CryptoKey.xml

26:         <argument index="1" name="public_only" type="bool" default="false">
38:         <argument index="1" name="public_only" type="bool" default="false">
49:         <argument index="1" name="public_only" type="bool" default="false">
59:         <argument index="0" name="public_only" type="bool" default="false">

Curve2D.xml

121:            <argument index="1" name="cubic" type="bool" default="false">

Curve3D.xml

145:            <argument index="1" name="cubic" type="bool" default="false">
158:            <argument index="1" name="apply_tilt" type="bool" default="false">

Dictionary.xml

89:         <argument index="0" name="deep" type="bool" default="false">

Directory.xml

127:            <argument index="0" name="skip_navigational" type="bool" default="false">
129:            <argument index="1" name="skip_hidden" type="bool" default="false">

DisplayServer.xml

647:            <argument index="2" name="multiline" type="bool" default="false">

EditorInterface.xml

212:            <argument index="1" name="with_preview" type="bool" default="true">

EditorNode3DGizmoPlugin.xml

40:         <argument index="3" name="cancel" type="bool" default="false">
60:         <argument index="1" name="billboard" type="bool" default="false">
73:         <argument index="2" name="on_top" type="bool" default="false">
88:         <argument index="2" name="billboard" type="bool" default="false">
90:         <argument index="3" name="on_top" type="bool" default="false">
92:         <argument index="4" name="use_vertex_color" type="bool" default="false">

EditorNode3DGizmo.xml

37:         <argument index="2" name="billboard" type="bool" default="false">
39:         <argument index="3" name="secondary" type="bool" default="false">
53:         <argument index="2" name="billboard" type="bool" default="false">
66:         <argument index="1" name="billboard" type="bool" default="false">
103:            <argument index="2" name="cancel" type="bool" default="false">

EditorProperty.xml

30:         <argument index="3" name="changing" type="bool" default="false">

Expression.xml

36:         <argument index="2" name="show_error" type="bool" default="true">

File.xml

211:            <argument index="0" name="allow_objects" type="bool" default="false">
439:            <argument index="1" name="full_objects" type="bool" default="false">

Font.xml

47:         <argument index="5" name="outline" type="bool" default="false">

GIProbe.xml

19:         <argument index="1" name="create_visual_debug" type="bool" default="false">

HTTPClient.xml

32:         <argument index="2" name="use_ssl" type="bool" default="false">
34:         <argument index="3" name="verify_host" type="bool" default="true">

HTTPRequest.xml

110:            <argument index="2" name="ssl_validate_domain" type="bool" default="true">

ImageTexture.xml

43:         <argument index="1" name="immediate" type="bool" default="false">

Image.xml

226:            <argument index="0" name="renormalize" type="bool" default="false">
415:            <argument index="0" name="square" type="bool" default="false">
433:            <argument index="1" name="grayscale" type="bool" default="false">

ImmediateGeometry3D.xml

24:         <argument index="3" name="add_uv" type="bool" default="true">

InputEvent.xml

54:         <argument index="1" name="allow_echo" type="bool" default="false">

Input.xml

40:         <argument index="1" name="update_existing" type="bool" default="false">

InstancePlaceholder.xml

16:         <argument index="0" name="replace" type="bool" default="false">
33:         <argument index="0" name="with_order" type="bool" default="false">

ItemList.xml

19:         <argument index="1" name="selectable" type="bool" default="true">
32:         <argument index="2" name="selectable" type="bool" default="true">
58:         <argument index="1" name="exact" type="bool" default="false">
235:            <argument index="1" name="single" type="bool" default="true">

JavaScript.xml

18:         <argument index="1" name="use_global_execution_context" type="bool" default="false">

JSONRPC.xml

59:         <argument index="1" name="recurse" type="bool" default="false">

JSON.xml

28:         <argument index="2" name="sort_keys" type="bool" default="false">

KinematicBody2D.xml

78:         <argument index="1" name="infinite_inertia" type="bool" default="true">
80:         <argument index="2" name="exclude_raycast_shapes" type="bool" default="true">
82:         <argument index="3" name="test_only" type="bool" default="false">
96:         <argument index="2" name="stop_on_slope" type="bool" default="false">
102:            <argument index="5" name="infinite_inertia" type="bool" default="true">
125:            <argument index="3" name="stop_on_slope" type="bool" default="false">
131:            <argument index="6" name="infinite_inertia" type="bool" default="true">
145:            <argument index="2" name="infinite_inertia" type="bool" default="true">

KinematicBody3D.xml

80:         <argument index="1" name="infinite_inertia" type="bool" default="true">
82:         <argument index="2" name="exclude_raycast_shapes" type="bool" default="true">
84:         <argument index="3" name="test_only" type="bool" default="false">
98:         <argument index="2" name="stop_on_slope" type="bool" default="false">
104:            <argument index="5" name="infinite_inertia" type="bool" default="true">
127:            <argument index="3" name="stop_on_slope" type="bool" default="false">
133:            <argument index="6" name="infinite_inertia" type="bool" default="true">
158:            <argument index="2" name="infinite_inertia" type="bool" default="true">

Marshalls.xml

35:         <argument index="1" name="allow_objects" type="bool" default="false">
65:         <argument index="1" name="full_objects" type="bool" default="false">

Navigation2D.xml

43:         <argument index="2" name="optimize" type="bool" default="true">

Navigation3D.xml

46:         <argument index="2" name="use_collision" type="bool" default="false">
65:         <argument index="2" name="optimize" type="bool" default="true">

NavigationServer3D.xml

209:            <argument index="3" name="use_collision" type="bool" default="false">

Node2D.xml

63:         <argument index="1" name="scaled" type="bool" default="false">
74:         <argument index="1" name="scaled" type="bool" default="false">

Node.xml

126:            <argument index="1" name="legible_unique_name" type="bool" default="false">
146:            <argument index="1" name="legible_unique_name" type="bool" default="false">
159:            <argument index="1" name="persistent" type="bool" default="false">
189:            <argument index="1" name="recursive" type="bool" default="true">
191:            <argument index="2" name="owned" type="bool" default="true">
540:            <argument index="2" name="parent_first" type="bool" default="false">
599:            <argument index="1" name="keep_data" type="bool" default="false">
737:            <argument index="1" name="recursive" type="bool" default="true">

Object.xml

378:            <argument index="1" name="reversed" type="bool" default="false">

OS.xml

73:         <argument index="2" name="blocking" type="bool" default="true">
77:         <argument index="4" name="read_stderr" type="bool" default="false">
141:            <argument index="0" name="utc" type="bool" default="false">
150:            <argument index="0" name="utc" type="bool" default="false">
303:            <argument index="0" name="utc" type="bool" default="false">
451:            <argument index="0" name="short" type="bool" default="false">

PacketPeerDTLS.xml

17:         <argument index="1" name="validate_certs" type="bool" default="true">

PacketPeer.xml

36:         <argument index="0" name="allow_objects" type="bool" default="false">
57:         <argument index="1" name="full_objects" type="bool" default="false">

PCKPacker.xml

33:         <argument index="0" name="verbose" type="bool" default="false">

PhysicsDirectSpaceState2D.xml

62:         <argument index="4" name="collide_with_bodies" type="bool" default="true">
64:         <argument index="5" name="collide_with_areas" type="bool" default="false">
89:         <argument index="5" name="collide_with_bodies" type="bool" default="true">
91:         <argument index="6" name="collide_with_areas" type="bool" default="false">
107:            <argument index="4" name="collide_with_bodies" type="bool" default="true">
109:            <argument index="5" name="collide_with_areas" type="bool" default="false">

PhysicsDirectSpaceState3D.xml

63:         <argument index="4" name="collide_with_bodies" type="bool" default="true">
65:         <argument index="5" name="collide_with_areas" type="bool" default="false">

PhysicsServer2D.xml

21:         <argument index="3" name="disabled" type="bool" default="false">
351:            <argument index="3" name="disabled" type="bool" default="false">

PhysicsServer3D.xml

21:         <argument index="3" name="disabled" type="bool" default="false">
351:            <argument index="3" name="disabled" type="bool" default="false">
426:            <argument index="1" name="init_sleeping" type="bool" default="false">

PopupMenu.xml

36:         <argument index="2" name="global" type="bool" default="false">
70:         <argument index="3" name="global" type="bool" default="false">
118:            <argument index="3" name="global" type="bool" default="false">
133:            <argument index="3" name="global" type="bool" default="false">
195:            <argument index="2" name="global" type="bool" default="false">
219:            <argument index="2" name="global" type="bool" default="false">
526:            <argument index="2" name="global" type="bool" default="false">

ProjectSettings.xml

93:         <argument index="1" name="replace_files" type="bool" default="true">

Rect2.xml

146:            <argument index="1" name="include_borders" type="bool" default="false">

RenderingDevice.xml

29:         <argument index="4" name="sync_with_draw" type="bool" default="true">
413:            <argument index="3" name="arg3" type="bool" default="false">
493:            <argument index="1" name="allow_cache" type="bool" default="true">
565:            <argument index="6" name="sync_with_draw" type="bool" default="false">
591:            <argument index="9" name="sync_with_draw" type="bool" default="false">
677:            <argument index="2" name="sync_with_draw" type="bool" default="false">
691:            <argument index="3" name="sync_with_draw" type="bool" default="false">

RenderingServer.xml

847:            <argument index="0" name="swap_buffers" type="bool" default="true">
1812:           <argument index="3" name="color_format" type="bool" default="false">
1814:           <argument index="4" name="custom_data_format" type="bool" default="false">
2455:           <argument index="3" name="use_filter" type="bool" default="true">
2557:           <argument index="2" name="is_2d_skeleton" type="bool" default="false">

ResourceLoader.xml

61:         <argument index="2" name="no_cache" type="bool" default="false">
100:            <argument index="2" name="use_sub_threads" type="bool" default="false">

Resource.xml

24:         <argument index="0" name="subresources" type="bool" default="false">

RigidBody2D.xml

106:            <argument index="1" name="infinite_inertia" type="bool" default="true">

SceneState.xml

142:            <argument index="1" name="for_parent" type="bool" default="false">

SceneTree.xml

65:         <argument index="1" name="pause_mode_process" type="bool" default="true">

ScriptCreateDialog.xml

25:         <argument index="2" name="built_in_enabled" type="bool" default="true">
27:         <argument index="3" name="load_enabled" type="bool" default="true">

Script.xml

107:            <argument index="0" name="keep_state" type="bool" default="false">

Skeleton3D.xml

238:            <argument index="3" name="persistent" type="bool" default="false">

SkeletonIK3D.xml

25:         <argument index="0" name="one_time" type="bool" default="false">

StreamPeerSSL.xml

33:         <argument index="1" name="validate_certs" type="bool" default="false">

StreamPeer.xml

128:            <argument index="0" name="allow_objects" type="bool" default="false">
274:            <argument index="1" name="full_objects" type="bool" default="false">

String.xml

587:            <argument index="0" name="with_prefix" type="bool" default="false">
855:            <argument index="1" name="allow_empty" type="bool" default="true">
924:            <argument index="1" name="allow_empty" type="bool" default="true">
947:            <argument index="1" name="allow_empty" type="bool" default="true">
957:            <argument index="0" name="left" type="bool" default="true">
959:            <argument index="1" name="right" type="bool" default="true">

SurfaceTool.xml

216:            <argument index="0" name="flip" type="bool" default="false">

TextEdit.xml

61:         <argument index="1" name="adjust_viewport" type="bool" default="true">
73:         <argument index="1" name="adjust_viewport" type="bool" default="true">
75:         <argument index="2" name="can_be_hidden" type="bool" default="true">

Texture2D.xml

23:         <argument index="3" name="transpose" type="bool" default="false">
50:         <argument index="4" name="transpose" type="bool" default="false">
77:         <argument index="4" name="transpose" type="bool" default="false">
89:         <argument index="10" name="clip_uv" type="bool" default="true">

TileMap.xml

137:            <argument index="1" name="ignore_half_ofs" type="bool" default="false">
153:            <argument index="3" name="flip_x" type="bool" default="false">
155:            <argument index="4" name="flip_y" type="bool" default="false">
157:            <argument index="5" name="transpose" type="bool" default="false">
183:            <argument index="2" name="flip_x" type="bool" default="false">
185:            <argument index="3" name="flip_y" type="bool" default="false">
187:            <argument index="4" name="transpose" type="bool" default="false">

TileSet.xml

323:            <argument index="3" name="one_way" type="bool" default="false">

TreeItem.xml

22:         <argument index="3" name="disabled" type="bool" default="false">
205:            <argument index="0" name="wrap" type="bool" default="false">
229:            <argument index="0" name="wrap" type="bool" default="false">
439:            <argument index="2" name="just_outline" type="bool" default="false">
567:            <argument index="4" name="expr" type="bool" default="false">

UndoRedo.xml

103:            <argument index="0" name="increase_version" type="bool" default="true">

Viewport.xml

117:            <argument index="1" name="in_local_coords" type="bool" default="false">
165:            <argument index="1" name="in_local_coords" type="bool" default="false">

์ถ”๊ฐ€ํ•˜๋‹ค. ์ธ์ˆ˜์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค๋ฉด, ์ด๊ฒƒ์€ ํ™•์‹คํžˆ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

if e.is_action_pressed("ui_left", allow_echo = true):
    velocity += Vector2.LEFT
var arr = s.split(",", allow_empty = false)

@dalexeev ์Šคํฌ๋กค์„ ๋” ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ์ผ๋Ÿฌ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@dalexeev ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ๋งŒ ์•„๋‹ˆ๋ผ ํ‚ค๊ฐ€ ๋ˆŒ๋ ธ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์บ๋ฆญํ„ฐ๋ฅผ ์ด๋™ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋Š” WASD ๋˜๋Š” ํ™”์‚ดํ‘œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒŒ์ž„์€ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ์ž‘์—…์— ๋Œ€ํ•ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ญ๋น„๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ Shift + ํด๋ฆญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub์—์„œ diff๋ฅผ ๋ณด๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” IDE๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

@aaronfranke ๋‹ค๋ฅธ 207๊ฐœ์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ด ์ฃผ์žฅ์€ ๊ฒฐ์ •์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์œ„์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด IDE ์—†์ด๋„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ผ์Šต๋‹ˆ๋‹ค.

ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋ฟ ์•„๋‹ˆ๋ผ ๋ˆŒ๋ ธ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ข…์ข…, ํ•˜์ง€๋งŒ ์—์ฝ”๊ฐ€ ์—†๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ž์ฃผ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์„ธ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ( is_action_just_pressed , is_action_just_released , is_action_pressed )์˜ ์กด์žฌ๋Š” is_action_released ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ํ•˜๋‹ค. ์ ์–ด๋„ ์‹œ๊ฐ์ ์œผ๋กœ ์–ด๋–ค ์˜ต์…˜์ด ๋” ์‰ฝ์Šต๋‹ˆ๊นŒ?

is_action_released ๋Š” not is_action_pressed ๋กœ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. just ๋ฉ”์„œ๋“œ์—๋Š” ํ•ด๋‹น๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์›์‹œ bool์€ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. INPUT_ALLOW_ECHO/INPUT_NO_ECHO์™€ ๊ฐ™์€ ํ”Œ๋ž˜๊ทธ๋Š” bool๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค.

@dalexeev ๊ทธ๊ฒƒ์€ ํ˜ผ๋ž€์„ ์ผ์œผํ‚ฌ ๋ฟ์ž…๋‹ˆ๋‹ค. is_action_pressed() ์™€ echo๋Š” 2๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. is_action_pressed() ๋Š” ์ง€์—ฐ์ด ์—†๋Š” ๋ฐ˜๋ฉด ์—์ฝ” ์ด๋ฒคํŠธ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ˆ„๋ฆ„ ํ›„ ์•ฝ๊ฐ„์˜ ์ง€์—ฐ ํ›„์— ์ˆ˜์‹ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@KoBeWi ๋‹น์‹ 

is_action_pressed(action: String, allow_echo: bool = false) -> bool

๋กœ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

is_action_pressed(action: String, allow_echo: bool = true) -> bool

์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—

func _input(e):
    if !e.is_action("ui_left"):
        return
    $Label.text += "pressed: %s, echo: %s\n" % [e.is_pressed(), e.is_echo()]
pressed: True, echo: False
pressed: True, echo: True
pressed: True, echo: True
pressed: True, echo: True
pressed: False, echo: False

@dalexeev ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—์ฝ” ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋Š” ๋™์•ˆ ๋ฐ˜๋ณต๋˜๋Š” ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ด ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์•ก์…˜ ์‹œ์Šคํ…œ์€ ์ด๋ฒคํŠธ์— ์ง์ ‘ ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์ƒํƒœ๊ฐ€ ํ”„๋ ˆ์ž„ ๋‹จ์œ„๋กœ ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋™์ž‘์€ "์—์ฝ”" ์ด๋ฒคํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์žฅ์น˜์—์„œ๋„ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TreeItem์˜ get_children()์€ ์ฒซ ๋ฒˆ์งธ ์ž์‹๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ด๋ฆ„(๋˜๋Š” ๋ฌธ์„œ์˜ ์„ค๋ช…)์ด ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋“  ์ž์‹์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

[ํŽธ์ง‘ํ•˜๋‹ค]
NVM ๋ฌธ์„œ. ๋ฉ”์„œ๋“œ ์„ค๋ช…์ด ๋งˆ์Šคํ„ฐ์—์„œ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

Resource์˜ local_to_scene ๋Š” local_to_instance ๋˜๋Š” unique_per_instance ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. "์žฅ๋ฉด์— ๋กœ์ปฌ"์€ ์‹ค์ œ๋กœ ์žฅ๋ฉด์˜ ์ธ์Šคํ„ด์Šค๋‹น์ธ ๊ฒฝ์šฐ ์žฅ๋ฉด์— ๋Œ€ํ•ด ๋กœ์ปฌ์ธ ๋™์ž‘์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Image.load() โ†’ Image.load_from_file() ์ด๋ฆ„์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  1. ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด load("image.png") ํŒŒ์ผ๊ณผ์˜ ํ˜ผ๋™ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ #42412๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
  2. Image.load() ๋Š” ๋” ์ด์ƒ GDScript ๋‚ด์žฅ ์ด๋ฆ„์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค: #28866.
  3. ์ด๋ฏธ์ง€ ํ˜•์‹๋‹น Image.load_*_from_buffer() ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํผ ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋Š” API ํŒฝ์ฐฝ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ž ์žฌ์ ์œผ๋กœ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๋…ผ์˜ํ•  ๋˜ ๋‹ค๋ฅธ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.

@Xrayez๋Š” GDScript์—์„œ load ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/godotengine/godot-proposals/issues/263

ProjectSettings์˜ registering_order ๋ณ€์ˆ˜ ๋ฐ ๊ด€๋ จ ๋ฉ”์„œ๋“œ set_registering_order ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

RandomNumberGenerator ๋Š” Random ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฉฐ randf ๋ฐ rand_range ์™€ ๊ฐ™์€ ์ „์—ญ ์ž„์˜ ํ•จ์ˆ˜๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž„์˜์˜ ์‹œ๋“œ๊ฐ€ ์ง€์ •๋œ ๋™์•ˆ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๋ฅผ ๋ด…๋‹ˆ๋‹ค.

seed(123)
randf()
call_method() # This could change the seed for its own random reasons!
randf()

randf ๋ฐ rand_range ์™€ ๊ฐ™์€ ์ „์—ญ ์ž„์˜ ํ•จ์ˆ˜๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Godotengine/godot-proposals#1590์˜ ์ผ๋ถ€๋กœ ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ ‘๊ทผ ๊ฐ€๋Šฅ์„ฑ๊ณผ ํ”„๋กœํ† ํƒ€์ดํ•‘ ๋ชฉ์ ์„ ์œ„ํ•ด ์ ์–ด๋„ ์ผ๋ถ€๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ ๋ฌด์ž‘์œ„ ๋ฐฉ๋ฒ•์„ ์ „์—ญ ๋ฒ”์œ„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ seed() ๋ฐ rand_seed() ๋Š” ํ™•์‹คํžˆ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Callable ์ด ์ถ”๊ฐ€๋œ ์ดํ›„ FuncRef ์ด ์ค‘๋ณต๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Inspector์—์„œ property_can_revert ๋ฐ property_get_revert ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  #43078์— ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ _get , _set ๋ฐ _get_property_list ์˜ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ ค๋ฉด ์„ ํ–‰ ๋ฐ‘์ค„๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

EditorImportPlugin ์™€ EditorExportPlugin ๋Š” ์„œ๋กœ ์—ฐ๊ด€๋˜์–ด ๋ณด์ด์ง€๋งŒ ํ•˜๋‚˜๋Š” ๋ฆฌ์†Œ์Šค ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ๊ฒƒ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํ”„๋กœ์ ํŠธ ๋‚ด๋ณด๋‚ด๊ธฐ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. EditorImportPlugin ์„ EditorResourceImportPlugin ๋˜๋Š” ํ•ด๋‹น ๋ผ์ธ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๊ทธ๋ฆฌ๊ณ  EditorPlugin.add_import_plugin ๊ทธ์— ๋”ฐ๋ผ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™œ ResourceImportPlugin ์•„๋‹Œ๊ฐ€์š”? ๋งŽ์€(๋Œ€๋ถ€๋ถ„?) ํŽธ์ง‘๊ธฐ ํด๋ž˜์Šค์—๋Š” SceneTreeDock ๋˜๋Š” ๋ชจ๋“  ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ•ญ๋ชฉ๊ณผ ๊ฐ™์ด "Editor"๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์ด๋ฏธ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Tracking_status ์— ์—ด๊ฑฐ ARVRInterface ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค TrackingStatus , ๋‹ค๋ฅธ ์—ด๊ฑฐ ์ด๋ฆ„์˜ ์Šคํƒ€์ผ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ARVRInterface ๋ณด๋ฉด ์ด๋ฆ„์˜ ํ’ˆ์งˆ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๋‹นํžˆ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ์ด๋ฆ„๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ar_is_anchor_detection_enabled โ†’ anchor_detection_enabled (์†์„ฑ)
  • interface_is_initialized โ†’ initialized (์†์„ฑ, setter๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ enabled ์ถ”๊ฐ€๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ)
  • interface_is_primary โ†’ primary (์†์„ฑ)
  • get_render_targetsize() โ†’ get_render_target_size() (๋ฉ”์†Œ๋“œ)
  • uninitialize() โ†’ finalize() (๋ฉ”์†Œ๋“œ)

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฌธ์„œ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚

๋‚˜๋Š” ์ด ํด๋ž˜์Šค๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, ๊ทธ ํด๋ž˜์Šค๋ฅผ ๋ณด๊ธฐ๋งŒ ํ•ด๋„ ์ด๋ฆ„์ด ์ด์ƒํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

Control.MOUSE_FILTER_PASS ์„ Control.MOUSE_FILTER_PASSTHROUGH ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ์ œ์–ด ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ๊ทธ ์•„๋ž˜์— ์žˆ๋Š” ๋…ธ๋“œ๋กœ ์ „๋‹ฌ๋œ๋‹ค๋Š” ๊ฒƒ์ด ๋” ๋ถ„๋ช…ํ•ด์ง‘๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@Calinou ์•„ํ”„์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•„์„œ ์‘์›ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ๊ทธ ๋ณ€๊ฒฝ์€ ๊ทธ ๋งˆ์šฐ์Šค ํ•„ํ„ฐ ๋ชจ๋“œ๊ฐ€ ํ•˜๋Š” ์ผ์„ ํ•œ ๋ˆˆ์— ์ข€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Calinou ํ˜„์žฌ ํ–‰๋™์ด ๋น„์ •์ƒ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์žฅ๋ฉด ์„ค์ •์€ "Click Child2, Click Scene"์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
image

(์ฐธ๊ณ ๋กœ ๋ชจ๋‘ ํ†ต๊ณผ๋กœ ์„ค์ •)


:smile: ์ œ์•ˆ A : ์ž…๋ ฅ ์ด๋ฒคํŠธ๊ฐ€ ๋ถ€๋ชจ์—๊ฒŒ๋งŒ ์ „์†ก๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ๋™์ž‘์— ๋Œ€ํ•ด ์•„๋งˆ๋„ Control.MOUSE_FILTER_PASSPARENTS ์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


:๋กœ์ผ“: ๋ช…์ œ B : ์ƒ์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

  • ์ค‘์ง€: ํ˜„์žฌ ๋™์ž‘ - ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋ชจ๋“  ์ „ํŒŒ๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • PASS_PARENT: ํ˜„์žฌ PASS์™€ ๋™์ผํ•œ ๋™์ž‘
  • PASS_ALL: ๋ฌด์‹œํ•˜์ง€๋งŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • IGNORE: ํ˜„์žฌ ๋™์ž‘ - ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์ง€ ์•Š์ง€๋งŒ ๊ณ„์† ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค.

:eyes: ๋ช…์ œ C : ๋…ธ๋“œ๊ฐ€ GUI ์ž…๋ ฅ์„ ๋ฐ›๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์‹ค์ œ๋กœ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ์‹ ํ˜ธ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋ถ€์šธ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ต์…˜์„ Control.propagation_mode ํ•˜๊ณ  ๋‹ค์Œ ์ƒ์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—†์Œ
  • ๋ถ€๋ชจ์˜
  • ๋ชจ๋‘

์ œ ์ƒ๊ฐ์—๋Š” ํ›จ์”ฌ ๊นจ๋—ํ•ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ ์ด์ƒ์ด๋ฉฐ ์ œ์•ˆ์œผ๋กœ ๋…ผ์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ๊ฐ€ ๊ธด ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ฐ„๋‹จํ•˜๊ณ  ์งง์€ ๊ฒƒ์„ ์ •๋ง ๊ธด ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

clip ๋ฅผ intersection ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ž…๋ ฅ ์‹œ๊ฐ„์ด ๋‘ ๋ฐฐ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.
Control.MOUSE_FILTER_PASS ๋„ Control.MOUSE_FILTER_PASSTHROUGH
๋“ฑ

๋‚˜๋Š” ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๋œ ์žฅํ™ฉํ•œ ๋ณ€๊ฒฝ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์•„๋‹ˆ๋ผ ๊ธฐ๋Šฅ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๋œ ์žฅํ™ฉํ•œ ๋ณ€๊ฒฝ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์•„๋‹ˆ๋ผ ๊ธฐ๋Šฅ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

์ด๋ฆ„์€ ์„ค๋ช…์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ธธ์ด๋Š” ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ(Godot ํŽธ์ง‘๊ธฐ์— ๋‚ด์žฅ๋˜์–ด ์žˆ์Œ)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


IRC์—์„œ ํ•œ ๋ฒˆ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ–ˆ์ง€๋งŒ TextureRect์—๋Š” "Scale On Expand(Compat)"๋ผ๋Š” ์ŠคํŠธ๋ ˆ์น˜ ๋ชจ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ Godot ํ”„๋กœ์ ํŠธ ์ „์ฒด์— ๊ฐ•๋ ฅํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ฐ–๊ณ  ์‹ถ๋‹ค๋ฉด "๋œ ์žฅํ™ฉํ•œ" ๋ฉ”๋‰ด๋Š” ํ™•์‹คํžˆ ์—†์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ์ฝ”๋”ฉ ๋„๊ตฌ๋Š” ์ด๋ฆ„์ด ๊ธธ๋”๋ผ๋„ ๋น ๋ฅด๊ฒŒ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋™ ์™„์„ฑ ๋ฐ ๊ธฐํƒ€ ์ง€๋Šฅํ˜• ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ฃผ์žฅ์„ ์ฝ์œผ๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋œ ๋ชจํ˜ธํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ชฉํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์งง์€ ์ด๋ฆ„์€ ๋‹ฌ์ฝคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ๋œ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. ์ฝ”๋“œ ์ž…๋ ฅ์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๋น ๋ฅธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ์•„์ด๋ฅผ ๋‚ณ๊ณ  ํ‚ค์šฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

๋‘˜ ๋‹ค ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €๋Š” Godot ์‚ฌ์šฉ์ž์ด๊ณ  GDScript๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน๋ณ„ํžˆ Godot๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฐฐ ๋” ๊ธธ๊ฒŒ ๋งŒ๋“ค๋ฉด ์†๋„ ์ด์ ์ด ์—†์–ด์ง‘๋‹ˆ๋‹ค. ๋‘ ๋ฐฐ๋Š” ๋‘ ๋ฐฐ ๋” ๋งŽ์ด ์“ฐ๊ฒŒ ๋˜๊ณ  ์ „์ฒด ์ฝ”๋“œ ์ค„์„ ๊ฐ€๋กœ๋กœ ๋ณด๋ ค๋ฉด ๋‘ ๋ฐฐ ๋” ์Šคํฌ๋กคํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฝ”๋”ฉํ•  ๋•Œ ์—„์ฒญ๋‚˜๊ฒŒ ๊ธด ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์„ ํฌ์ƒํ•˜๋ฉด์„œ "๋ช…ํ™•์„ฑ"์„ ์œ„ํ•ด ๋งค์šฐ ๊ธด ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜์‹ฌ์ด ๊ฐ€๋Š” ๊ฒฝ์šฐ ๋‚ด์žฅ๋œ ๋„์›€๋ง์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ API๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์— ๊ด€๊ณ„์—†์ด ์ฒ˜์Œ ์‚ฌ์šฉํ•  ๋•Œ ํ•ญ์ƒ ํ•จ์ˆ˜๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. Take printf๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. Godot์—์„œ๋Š” ์ด๋ฆ„์„ send_formatted_string_to_standard_out. ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด API๋ฅผ ๋‹ค์‹œ ๋ฐฐ์šฐ๋„๋ก ๊ฐ•์š”ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์ค‘ ์ผ๋ถ€๋Š” ํ†ต์ผ๋œ ๋น„์ „์กฐ์ฐจ ๊ฐ–์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ชจ์—ฌ์„œ ์—”์ง„์˜ ํ•œ ๋ถ€๋ถ„๋งŒ ๊ต์ฒดํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์—ด์„ ๊ฐ€์ ธ ๊ฐ€๋ผ.
remove -> remove_at _at๋Š” ์—ฌ๊ธฐ์— ๋ฌด์—‡์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๊นŒ? ์ด๋ฏธ remove_value๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋ฌด์—‡์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
erase -> remove_value ์•„์ง ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ "๋ฐฐ์—ด์—์„œ ๊ฐ’์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." ๋˜ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์ „์ฒด ๋ฐฐ์—ด์—์„œ ํ•˜๋‚˜์˜ ๋‹จ์ผ ๊ฐ’์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ๋กœ๋Š” remove_first_occurance_of_value ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ•จ์ˆ˜๊ฐ€ ์‹ค์ œ๋กœ ํ•˜๋Š” ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ํ•จ์ˆ˜๋ฅผ ๋” ๊ธธ๊ณ  ๋˜‘๊ฐ™์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

remove ๋ฐ erase ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ ์ถ”๊ฐ€ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ remove ์—์„œ ๋™์ผํ•œ ๋ณ€ํ˜•์œผ๋กœ ๋‘˜ ๋‹ค ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Remove๋Š” ํŠน์ • ์ธ๋ฑ์Šค์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ˜๋ฉด, Erase๋Š” ์ฐพ์€ ๊ฐ’์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ๋“ค์€ ์‚ฌ๋žŒ๋“ค์ด ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ๊ทธ๋‹ค์ง€ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ฐ˜์ „ -> ๋ฐ˜์ „
๋ณต์ œ -> ๋ณต์ œ
๋น„์–ด ์žˆ์Œ -> is_empty

๊ณ ์žฅ๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ณ ์น˜์ง€ ๋งˆ์„ธ์š”.

@CarlGustavAlbertDwarfsteinYung ํ•˜์ง€๋งŒ ๋‘ ๋ฒˆ ์ž…๋ ฅํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ 3๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ์ž๋™ ์™„์„ฑ์ด ์‹œ์ž‘๋˜๊ณ  ์ „์ฒด ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋Œ€์‹  ํ•„์š”ํ•œ ๊ฒƒ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด empty -> is_empty ๋ณผ ๋•Œ ๋‹ค๋ฅธ ์ด๋ฆ„์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. empty ๋ฅผ ๋ณด๋ฉด ์ด๊ฒƒ์ด ๋ฌด์–ธ๊ฐ€๋ฅผ ๋น„์šฐ๋Š” ๋ฐฉ๋ฒ•์ธ์ง€, ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ฑ…์ธ์ง€, ๋‹ค๋ฅธ ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? is_empty ํ•˜๋ฉด ์ด๊ฒƒ์ด ๋น„์–ด ์žˆ์œผ๋ฉด true์ด๊ณ  ๋น„์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด false์ธ bool์ž„์„ ํ•œ ๋ˆˆ์— ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„๋งŒ ๋ด๋„ ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. empty ์™€ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@Feniks-Gaming ๋‚˜๋Š” ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ is_empty๊ฐ€ ๋˜‘๊ฐ™์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ํ•˜๋‚˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ๋ณด๋‹ค ๊ธธ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@CarlGustavAlbertDwarfsteinYung empty ๋Š” ๋™์‚ฌ๋กœ ์ฝ์œผ๋ฉด ์•ก์…˜์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. is_empty ๋Š” ํ™•์‹คํžˆ ํ’ˆ์งˆ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ทธ ํ˜ผ๋ž€์€ ์˜์–ด ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ตœ์‹  ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ์—์„œ ํ•จ์ˆ˜๊ฐ€ send_formatted_string_to_standard_out ๋ผ๊ณ  ํ•˜๋”๋ผ๋„ sfstso ๋˜๋Š” ์ค‘๊ฐ„ ๋ฌธ์ž์˜ ๋‹ค๋ฅธ ์กฐํ•ฉ์œผ๋กœ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์ด ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์˜ต์…˜.

@pycbouh ์‚ฌ๋žŒ๋“ค์€ ์ด ์—”์ง„์„ ๋ช‡ ๋…„ ๋™์•ˆ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์ด ์—”์ง„์˜ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ์‚ฌ๋žŒ์„ ํ•œ ์‚ฌ๋žŒ๋„ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์—๋Š” empty ๋Œ€์‹  is_empty ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ˆํฌ๋“ค์€ ์•„๋ฌด๋„ ์›ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์š”๊ตฌํ•˜์ง€ ์•Š์€ ๊ฒƒ์„ ๊ณ ์น˜๊ณ  ์—ฌ๊ธฐ ์•‰์•„ ์žˆ๋‹ค. ์˜ˆ, ํ‘œํ˜„์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š์œผ๋ฉฐ 2015๋…„์— ์ด ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ์ดํ›„๋กœ ๋ฌธ์ œ๊ฐ€ ๋œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ค‘ ์ผ๋ถ€๋Š” ๋งค์šฐ ํ™˜์˜ํ•˜๋ฉฐ ๊ณต์ •ํ•˜๊ฒŒ๋Š” is_๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋น„์–ด ์žˆ์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋„ˆ๋ฌด ๊ธธ๊ณ  ๋˜‘๊ฐ™์ด ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ ๊ทธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ „๋ถ€๊ฐ€ ์•„๋‹Œ ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฉ”๊ฐ€์“ฐ๋ ˆ๋“œ์˜ ์กด์žฌ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์š”๊ตฌํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ฆ๊ฑฐ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ๊ท€ํ•˜๋‚˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์€ ์ž˜๋ชป๋œ ์ด๋ฆ„ ์ง€์ •์œผ๋กœ ์ธํ•ด API๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ์ด ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฌธ์ œ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์ „๋ฐ˜์ ์ธ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ๋ฏฟ๊ฑฐ๋‚˜ ๋ง๊ฑฐ๋‚˜ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋นผ์•—๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์ด ์ œ๊ณตํ•˜๊ณ  ์„ค๋ช…ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

Remove๋Š” ํŠน์ • ์ธ๋ฑ์Šค์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ˜๋ฉด, Erase๋Š” ์ฐพ์€ ๊ฐ’์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ์ผ๊ณ  ํ˜„์žฌ ์™€ ๋ฏธ๋ž˜์˜ ๋ชจ๋“  Godot ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์ ์–ด๋„ ์กฐ๊ธˆ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋ช…๋ช…์„ ๊ฐœ์„ ํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

@pycbouh ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ remove_at ๋ฐ remove_value ๋ฐฐ์—ด์˜ ์˜ˆ๋„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. remove_value ๋Š” ์ง€์šฐ๊ธฐ์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ๋™์ผํ•˜์ง€ ์•Š์œผ๋ฉฐ ์—ฌ์ „ํžˆ ๋˜‘๊ฐ™์ด ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์–ด๋””์—์„œ ๊ฐ’์„ ์ œ๊ฑฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋์—์„œ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ rmeo? ๋ฐฐ์—ด์—์„œ ๋ชจ๋“  ๊ฐ’์„ ์ œ๊ฑฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ •๋ง๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ remove ๋ฐ remove_first_occurence ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๊ฒฐํ•˜๊ณ  ์„ค๋ช…์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

@pycbouh ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์š”๊ตฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์˜ ์กด์žฌ๋Š” ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด ๊ณ ์ „์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ํŒจ์…˜์ด ์•„๋‹Œ ๊ฒƒ์„ ์—”์ง€๋‹ˆ์–ด๋งํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฏธ๋ž˜์˜ ์‚ฌ์šฉ์ž๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ทธ๋“ค์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ํ•œ๋•Œ ๋ฏธ๋ž˜์˜ ์‚ฌ์šฉ์ž์˜€์œผ๋ฉฐ API๋ฅผ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ด๋ฆ„ ์ง€์ •์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์˜๊ฒฌ์˜ 50%๋Š” ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋™์˜ํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๋Œ€๋ถ€๋ถ„์€ ์†Œ์ˆ˜์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์„ฑ์›์ด ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ํˆฌํ‘œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์‚ฌ์‹ค ์—ฌ๊ธฐ์— ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. API ๋ช…๋ช…์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์—๋Š” ๊ธฐ์—ฌ์ž/๊ธฐ๋ถ€์ž/์‚ฌ์šฉ์ž ์˜๊ฒฌ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ๋ชจ๋‘ ๋™์˜ํ•œ๋‹ค๋ฉด ๋‚˜๋„ ๋™์ฐธํ•œ๋‹ค. ํˆฌํ‘œ๋ฅผ ํ•˜๊ณ  ๋ชจ๋‘๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ๋ณด์‹ญ์‹œ์˜ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ธกํ•˜๋ ค๊ณ  ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋‹น์‹ ์—๊ฒŒ ์ข‹์€ ๊ฒƒ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‚ด๊ฐ€ ๋ณธ ๊ฒƒ์—์„œ ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์•ฝ 50%์— ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์˜๊ฒฌ์˜ 50%๋Š” ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋™์˜ํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค์ž…๋‹ˆ๋‹ค.

๋งŒ๋“ค์–ด์ง„ ํ†ต๊ณ„๋ฅผ ๋ฌธ ์•ž์— ๋‘๊ณ  ๊ฐ€๋„ ๋ ๊นŒ์š”?

์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ํˆฌํ‘œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ํ† ๋ก ๊ณผ ๋ฐ˜์‘์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‚ด๊ฐ€ ๋ณธ ๊ฒƒ์—์„œ ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์•ฝ 50%์— ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

"๋‚˜๋Š” ์ด๋ ‡๊ฒŒ ๋ฐฐ์› ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜ ์ดํ›„์˜ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ๊ฐ™์€ ๊ณ ํ†ต์„ ๋‹นํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค"๋Š” ์ด์œ ๋กœ ๋ฐ˜๋Œ€ํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋ช…์ œ์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ๋น„ํŒ์ด๋ฉฐ ๋ฌด์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์—๊ฒŒ ์ข‹์€ ๊ฒƒ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ™๊ฒŒ.

๋งŒ๋“ค์–ด์ง„ ํ†ต๊ณ„๋ฅผ ๋ฌธ ์•ž์— ๋‘๊ณ  ๊ฐ€๋„ ๋ ๊นŒ์š”?

์ „์ฒด ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋Œ€ํ•œ ์ด ์ฃผ์žฅ์ด ๋งˆ์Œ์— ๋“œ์‹ญ๋‹ˆ๊นŒ?

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ๊ท€ํ•˜๋‚˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์€ ์ž˜๋ชป๋œ ์ด๋ฆ„ ์ง€์ •์œผ๋กœ ์ธํ•ด API๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋“ค์—๊ฒŒ ๋ฌผ์—ˆ์Šต๋‹ˆ๊นŒ? ์ด์— ๋Œ€ํ•œ ์„ค๋ฌธ์กฐ์‚ฌ๋‚˜ ์—ฐ๊ตฌ ๋˜๋Š” ์„ค๋ฌธ์ง€๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ป๊ฒŒ ์ด ์ •๋ณด๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‚˜์š”?

์ €๋Š” 0์—์„œ ์‹œ์ž‘ํ•˜์—ฌ API๋ฅผ ๋ฐฐ์šด ๊ทธ๋Ÿฐ ์‚ฌ์šฉ์ž ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋„ค์ด๋ฐ์— ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  API์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์ƒํ•œ ๋ช…๋ช… ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์†Œ ๊ฐ„๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@pycbouh ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋ชจ๋“  ๋ช…๋ช… ์ œ์•ˆ์ด ํ›Œ๋ฅญํ•˜๋‹ค๊ณ  ์ €๋ฅผ ์„ค๋“ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ •์ค‘ํ•˜๊ฒŒ ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” ์Šค๋ ˆ๋“œ์ด๋ฉฐ ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ค‘ ์ผ๋ถ€๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์š”๊ตฌ๋˜์ง€ ์•Š์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ๊ธธ๊ณ  ๋˜‘๊ฐ™์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๋Š” ๊ฒƒ์„ ๋ง์”€๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” ์ •๋ง ์ข‹๊ณ  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ๊ณผ ๊ฐ™์€ ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค์ด ์ „์ฒด ์ปค๋ฎค๋‹ˆํ‹ฐ์— API ์ด๋ฆ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ชจ๋“  ์ด๋ฆ„์„ ๋Œ€๋Ÿ‰์œผ๋กœ ๋ฐ”๊พธ์ง€๋Š” ๋ง™์‹œ๋‹ค. ์ €๋Š” ๊ทธ๋Ÿฐ ์ ๋„ ์—†์—ˆ๊ณ  ์ดˆ๋ณด์ž๋กœ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋„ ๊ทธ๋ ‡์ง€ ์•Š์€ ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ค‘ ์ผ๋ถ€๊ฐ€ ์ค‘์š”ํ•˜๋ฉฐ ์ „์ฒด ์ปค๋ฎค๋‹ˆํ‹ฐ ๋˜๋Š” ์ตœ์†Œํ•œ ์ •์‹ ๋ฆด๋ฆฌ์Šค ์ด์ „์— ๊ธฐ์—ฌ์ž๊ฐ€ ๋™๋ฃŒ ๊ฒ€ํ† ๋ฅผ ๋ฐ›์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋“ค์—๊ฒŒ ๋ฌผ์—ˆ์Šต๋‹ˆ๊นŒ?

์ด ์Šค๋ ˆ๋“œ์— ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํ•ญ๋ชฉ์€ ์—ฌ๊ธฐ GitHub(์ด ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์—ฐ๊ฒฐ๋จ) ๋˜๋Š” ๋‹ค๋ฅธ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋˜๋Š” ๊ฐœ์ธ ์ฑ„๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์— ์˜ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์—”์ง„์—์„œ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ด๋‚˜ ์†์„ฑ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ํ•  ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ ์•‰์•„ ์šฐ๋ฆฌ์˜ ์‚ฌ์ ์ธ ๋ถ€๋ถ„์„ ํ•ฅ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๊ฒŒ๋‹ค๊ฐ€, ์—ฌ๊ธฐ์— ์ œ์•ˆ๋œ ๋งŽ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹คํ–‰๋˜์ง€๋„ ์•Š์•˜๊ณ  PR์ด๋‚˜ ๋‹ค๋ฅธ ํ™œ๋™๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๋‚˜์—ด๋˜์–ด ์žˆ๊ณ  ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. PR์„ ์ฃผ์‹œํ•˜๊ณ  ๊ธฐ๋ถ„์„ ์ƒํ•˜๊ฒŒ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋‚˜ํƒ€๋‚˜๋ฉด ์ฃผ์ €ํ•˜์ง€ ๋ง๊ณ  ์ด์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ ํ›„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์Šน์ธํ•˜๊ณ  ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์€ Godot์˜ PM์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑด์„ค์ ์œผ๋กœ ํ–‰๋™ํ•˜๊ณ  ์›์น˜ ์•Š๋Š” ์ˆ˜์ •์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•œ ๋ฒˆ ๋งํ•œ ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋‹น์‹ ์—๊ฒŒ ์ข‹์€ ๊ฒƒ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ง€๊ธˆ๊นŒ์ง€ API์— ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค๊ณ  ํ•ด์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๊ฑฐ๋‚˜ ์•ž์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ด๋ผ๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

๋ชจ๋“  API์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์ƒํ•œ ๋ช…๋ช… ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ผ์˜ํ•  ํ˜‘์•ฝ์ด ์žˆ์œผ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Godot์˜ ์ผ๋ถ€ API๋Š” ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ๋˜๊ธฐ ์˜ค๋ž˜ ์ „์— ์ด๋ฆ„์ด ์ง€์ •๋˜์—ˆ์œผ๋ฉฐ ์›ํ•˜๋Š” ๋งŒํผ ์‹ ์ค‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ, ์—ฌ๊ธฐ ์‚ฌ๋žŒ๋“ค์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ์•ˆํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ง€ ๋งˆ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ด๋Ÿฐ ํ† ๋ก ์€ ํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”. ํŠน์ • API ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ ์—ฌ๊ธฐ ์ œ์•ˆ ์‚ฌํ•ญ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š” ํฌ๊ด„์ ์ธ ์„ค๋ช…์€ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž๋Š” ์ด๋Ÿฌํ•œ ์ œ์•ˆ์„ ํ•˜๋‚˜์”ฉ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ฒฐ๊ตญ ๋ฐ›์•„๋“ค์—ฌ์ง€์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

์ผ์‹œ์ ์œผ๋กœ ์ž ๊ทธ๋ฉด ๋‚˜์ค‘์— ์ž ๊ธˆ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ•ญ๋ชฉ์„ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  • AnimationPlayer : stop() ์„ pause()
  • AnimatedSprite : stop() ์„ pause() (#31168) (์ด๋ฏธ ์ถ”๊ฐ€๋จ)
  • AnimatedSprite3D : stop() ์„ pause() (#31168) (์ด๋ฏธ ์ถ”๊ฐ€๋จ)
  • Tween : stop() ๋ฅผ pause() , stop_all() ๋ฅผ pause_all() (PR #41794, #43442)

ํŠธ์œˆ: stop()์˜ ์ด๋ฆ„์„ pause()๋กœ, stop_all()์„ pause_all()๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(#43442).

์ด๊ฒƒ์€ #41794์— ์˜ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค.

@opl- ์—ฌ๊ธฐ์—์„œ๋„ ๋…ผ์˜๋ฉ๋‹ˆ๋‹ค: https://github.com/godotengine/godot-proposals/issues/287

์ด๋Ÿฌํ•œ ์ „์—ญ ๋ฒ”์œ„ RNG ํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด๋ฆ„ ๋ณ€๊ฒฝ:

  • seed() -> set_seed() (RandomNumberGenerator์™€ ์ผ์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด get_seed() ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Œ) โ€“ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๊ฒƒ์ด setter ํ•จ์ˆ˜์ธ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • rand_seed() -> rand_from_seed() โ€“ ํ˜„์žฌ ์ œ๊ณต๋œ ์‹œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์ œ๋กœ ์ž„์˜์˜ ์ˆซ์ž๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์‹œ๋“œ ๋˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฌด์ž‘์œ„ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

rand_seed() -> rand_from_seed() โ€“ ํ˜„์žฌ ์ œ๊ณต๋œ ์‹œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์ œ๋กœ ์ž„์˜์˜ ์ˆซ์ž๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์‹œ๋“œ ๋˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฌด์ž‘์œ„ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

์‹œ๋“œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ . ๋ฌธ์„œ๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค.

rand_seed() -> rand_from_seed() โ€“ ํ˜„์žฌ ์ œ๊ณต๋œ ์‹œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์ œ๋กœ ์ž„์˜์˜ ์ˆซ์ž๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์‹œ๋“œ ๋˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฌด์ž‘์œ„ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

์‹œ๋“œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ . ๋ฌธ์„œ๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๋ง์€ ๊ทธ๊ฒƒ์ด ์‹œ๋“œ ๋งŒ ๋ฌด์ž‘์œ„ํ™”ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. int๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ rand_int_from_seed() ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ฌธ์„œ์—์„œ๋Š” ๋ฐ˜ํ™˜๋˜๋Š” ์œ ํ˜•์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  "์ž„์˜...์ˆซ์ž"๋งŒ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์ธํŠธ์ธ๊ฐ€์š”?

๊ทธ๋ž˜์„œ ์ „๋‹ฌํ•œ ์‹œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ ์‹œ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ ํ•ด๋‹น ์ƒˆ ์‹œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ ๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๊นŒ? ์ด๋ฆ„ ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด์„œ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ, ๊ทธ๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์„ค๋ช…์— ์•ฝ๊ฐ„์˜ ์žฌ์ž‘์—…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ์ด ์ด ๋ฐฉ๋ฒ•์ด 2๊ฐœ์˜ ๋” ์ž‘์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ถ„ํ• ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๋ฉด ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๋Œ€์‹  ํ•œ ๊ฐ€์ง€ ์ผ์„ ํ•˜์‹ญ์‹œ์˜ค.

์ปจํŠธ๋กค::pending_resize

๋ฏธ์‚ฌ์šฉ.

Object::is_class(name) โ†’ Object::inherits_class(name) .

๋‚˜๋Š” ์ด์ œ ์ด ๋ฐฉ๋ฒ•์ด GDScript is ( extends btw)์™€ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ C++์—๋Š” ๋” ๋งŽ์€ ๋ช…์‹œ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฒช์€ ํ˜ผ๋ž€์€ ํŠน์ • ๊ฐ์ฒด ๊ฐ€ ์ƒ์† ์—†์ด ๊ธฐ์กด ์œ ํ˜•์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

// Use case: we're only interested in editing "Node2D" classes directly.
node = Object::cast_to<Node2D>(p_edited);
if (!node) {
    return;
}
if (node->get_class() != "Node2D") {
    return; // OK, any class other than "Node2D" is not edited.
}
// vs.
if (!node->is_class("Node2D")) {
    return; // ERROR: derived classes like "Sprite" will also be edited...
}

๊ธฐ๋ณธ ๊ตฌํ˜„์€ ๋ชจ๋“  ๊ณณ์—์„œ "์ƒ์†" ๋งคํฌ๋กœ/ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ด ์ด๋ฆ„์„ inherits_class ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

https://github.com/godotengine/godot/issues/21461#issuecomment -416155187๋„

get_class() ๋ฐ is_class() ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚˜์—๊ฒŒ ํ˜ผ๋ž€์„ ์ค๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰