
ã¢ãžã§ã³ãã®ç¬¬2éšã§ã¯ã次ã®ããšãè¡ããŸãã
1ïŒå®æãããããžã§ã¯ããéžæããã¢ãŒããã¯ãã£ã®ãã€ããªãã¡ã€ã«ã«ãšã¯ã¹ããŒãããŸãã
2ïŒæ°ããã¢ãã¡ãŒã·ã§ã³ã æåãªãã·ã§ã³ã
3ïŒç®¡çã
3ïŒGDScriptã æ¬ç©ã®ã³ãŒãã£ã³ã°ãžããããïŒ
4ïŒã·ã³ãã«ãªã¿ã€ã«ã»ãããã€ã³ããŒãããŸãã
5ïŒããŒãã¹ïŒæãåçŽãªèæ¯ã®ããã€ã¹ã®åæã
ãŸãããã€ãã®ããã«ãããããã®åçïŒ
ã³ã³ãã€ã«....ïŒ
ååã®èšäºã§ãèè ã¯Linux x86çšã®ãã€ããªãæäŸããªãã£ããšè¿°ã¹ãŸããã å·çæç¹ã§ã¯ããã€ããªã¯ãŸã æºåãã§ããŠããŸããã§ããã ããããå®æãããããžã§ã¯ãããã¢ããŸãã¯åã«ãã¹ãããšã¯ã¹ããŒããããã£ãã®ã§ãã ãããããšã¯ã¹ããŒããã³ãã¬ãŒãããªãå Žåã¯ã©ããªããŸããïŒ ããïŒ èªåã§ã³ã³ãã€ã«ããŠãã ããïŒ
ãœãŒã¹ãã¡ã€ã«ããããã£ã¬ã¯ããªã«ç§»åããŠã³ã³ãã€ã«ããŸã
cd ./godot
ãããã°ããŒã«ïŒ
scons bin/godot target=release_debug tools=no
ã³ã³ãã€ã«ãæåããããæ°ããåä¿¡ãããã¡ã€ã«ã®ååãlinux_x11_32_debugã«å€æŽããŸã
ãšã¯ã¹ããŒããã³ãã¬ãŒãèªäœïŒ
scons bin/godot_rel target=release tools=no
linux_x11_32_releaseã«ååãå€æŽ
zipã¢ãŒã«ã€ãã«ããã¯ããŸãã
find ./* -name "linux_x11_32_*" -exec zip ./linux_x11_32_templates.zip "{}" +
Godotã¢ãŒã«ã€ãããã£ãŒãããŸãã ããã§ããããã容éã®GNU / Linux OSã®ãããžã§ã¯ãããšã¯ã¹ããŒãã§ããŸãã

ã¯ããOSããã³ããªã以å€ã®ããã深床ã§ãã§ãã Windowsçšã®ãã€ããªãåé¡ãªãã¯ã€ã³ã«å ¥ããããšãã§ããŸãããäž»ãªããšã¯ã64ãããã®ãã§ãã¯ãå€ããããã§ãã¯ãããããããšãå¿ããªãããšã§ãã

ãšã¯ã¹ããŒãèšå®ã®è©³çŽ°ã«ã€ããŠã¯ããããžã§ã¯ãã®Webãµã€ãã§è±èªã§èªãããšãã§ããŸãã é¢é£æ§ããããéèŠãããå Žåã¯ããã·ã¢èªã®èšäºã®ããŒã«ã©ã€ãºãšGodotã«ãããã·ã¢èªã®wikiã®äœæã«ã€ããŠèããããšãã§ããŸãã
ã¢ãã¡ãŒã·ã§ã³ã®å®è¡ãšãžã£ã³ã
æåŸã®ã¬ãã¹ã³ã§ã¯ããã£ããã³ã®èµ°ããšãžã£ã³ãã®ã¹ãã©ã€ãã§ãã¯ã¹ãã£ãäºåã«æºåããŸããã ãããã£ãŠããžã£ã³ãããŠå®è¡ãã2ã€ã®ã¢ãã¡ãŒã·ã§ã³ãäœæããããšã¯é£ãããªããšæããŸãã é£ããããšã§ã¯ãªããšæããŸãã ãã©ã¡ãŒã¿ãŒã®ã¿ãèšããŸãïŒ
run: Len(s): 0.9 Step(s): 0.1 Looping: yes jumping: Len(s): 1 Step(s): 0.1 Animation: âââââââ , - 24 30, - . Looping: no

ã¯ãããžã£ã³ãã¯åãªããžã£ã³ãã§ãã ãããã£ãŠãããå€ãã®ç§ã®ã¢ãã¡ãŒã·ã§ã³ãå¿ èŠã§ãã
falling: Len(s): 0.1 Step(s): 0.1 Animation: â30 Looping: yes
ãã£ã©ã¯ã¿ãŒãªãã·ã§ã³
3ã€ã®ãã€ã³ãïŒ
- ã«ã¡ã©
- å°é¢ã«è§Šãã
- ãã£ã©ã¯ã¿ãŒãžãªã¡ããª
1ïŒæãåºãããŸãã Camera2D / Currentãã©ã¡ãŒã¿ãŒã«ãã§ãã¯ããŒã¯ããããã©ããã確èªããŸããããã¯ãã«ã¡ã©ãªããžã§ã¯ãããã¬ãŒã€ãŒãªããžã§ã¯ãã«ãã€ã³ããã圹å²ãæãããŸãã
2ïŒNode CollisionShape2Dãè¿œå ããŸãã ãã®ãNodaãã¯ã2D空éã§ã®ãã£ããã³ã®äœçœ®ãæ åœããŸãã

ã€ã³ã¹ãã¯ã¿ãŒã§ãCollisionShape2D-> Shape-> New RayShape2DãéžæããŸãã å³ã«2ããªã¡ãŒãã«ã®ãšããã«å°ããªç¢å°ã衚瀺ãããŸããã¯ãªãã¯ãããšãRayShape2Dãã©ã¡ãŒã¿ãŒãéããŸãã
ãã©ã¡ãŒã¿ãŒRayShape2D /é·ã20ã®ãŸãŸã«ããŸãããã«ã¹ã¿ã ãœã«ããŒãã€ã¢ã¹ã¯0.5ã«èšå®ããŸãïŒããã«ããããããªãã€ã¢ã¹ãå¯èœã«ãªããŸãïŒ
å°æ¥ã®ã²ãŒã èªäœã§ã¯ããã£ã©ã¯ã¿ãŒããåºã«è¹Žãããªããå Žåããã®ç¢å°ã§äœçœ®ã調æŽã§ããŸãã ã¹ãã©ã€ããåºã«è§ŠããŠãããã©ããã確èªããã®ã¯åœŒå¥³ã§ãã
3ïŒãžãªã¡ããªããã£ãšæ¥œããã æåã«ãNode CollisionPolygon2Dãè¿œå ããå¿ èŠããããŸãã 次ã«ããã®åãããªãŽã³ãæç»ããå¿ èŠããããŸããããã«ããããã£ã©ã¯ã¿ãŒã«ã質éããäžããããŸããã€ãŸããããŒããŒãå£ãšè¡çªãããšãã«ãå£ã«ã¶ã€ããããã®ãæç»ããå¿ èŠããããŸãã ãã以å€ã®å Žåã¯ãåã«å£ãééããŸãã

éçãéžæããŠãã ããã 次ã«ãäžè§åœ¢ã®3ã€ã®é ç¹ããèšå®ãããŠå·Šã¯ãªãã¯ããŸãã åè©ã«2ã€ãè ¹éšã«1ã€ã ãããŠãå³ã¯ãªãã¯ïŒäœæ¥é åãã¯ãªãã¯ããã ãïŒã§äžè§åœ¢ãæããŸãã æçµçã«ã¯äºç蟺ãŸãã¯ç蟺ã§ããããšãå€æããããšãæãŸããã y軞ã®äžçªäžã®é ç¹ã§ããããå¢ãããŸãã å°ãã ãã以å€ã®å Žåããã£ã©ã¯ã¿ãŒã¯å€©äºãééããŸãã

å®äºãç§ãã¡ã®ãã£ã©ã¯ã¿ãŒã¯ãããã¯ããã察å¿ã§ãã ä»ãæãç°¡åãªããšã¯ç®¡çã§ãã
管çããŒã®äœæ
- æšæºç®¡çã
ãããäœæããã®ã¯ãšãŠãç°¡åã§ãã ã·ãŒã³ã«ç§»å->ãããžã§ã¯ãèšå®->å ¥åããã
3ã€ã®ã³ã³ãããŒã«ããŒïŒmove_leftãmove_rightãããã³jumpïŒãäœæããŸãã ãããã«ããŒãå²ãåœãŠãŸãã ã§ããïŒ
ã芧ã®ãšãããGodotã¯ã²ãŒã ãããã§ãåäœããŸããã誰ã§ãç¬èªã®ã³ã³ãããŒã«ãèšå®ããå¿ èŠããããŸãã ããããããã«ã€ããŠã¯æ¹ããŠã
- ã¿ããã¹ã¯ãªãŒã³ã«ãã管çã
ç¹ã«è€éãªããšããããŸããã ãuiããšããååã®ããŒããŒããŒãCanvasLayerã«ãã€ã³ãããŸãã ãããŠåœŒå¥³ã«ãé çªã«-TouchScreenButtonã®3ã€ã®ã³ããŒã ããããå·Šãå³ã«åŒã³åºããŠãžã£ã³ãããŸãã
ããããã«ããŒç»åãæ·»ä»ããŸãã ããã°ã©ã ã®ã¯ãŒã¯ã¹ããŒã¹ã«ããã«è¡šç€ºãããŸãã ãã䟿å©ã§ããããã«ç§ãã¡ã¯ãããæŽçããŸãã éããŠã£ã³ããŠããã«ã¡ã©è¡šç€ºãšãªã¢ãã§ããããšãå¿ããªãã§ãã ããã
[ã¢ã¯ã·ã§ã³]ã»ã¯ã·ã§ã³ã§ããã©ã¡ãŒã¿ãŒmove_leftãmove_rightãããã³jumpãããããå ¥åããŸãã ããŠãTouchScreen Onlyã§Visibility Modeãã©ã¡ãŒã¿ãŒãèšå®ããŸãã ã§ããïŒ
Gdscript
ããã§ç§ã¯å°ãæãã§ãã å®éã®ãšãããããã°ã©ããŒã¯æ£çŽãªãšããããã»ã©æ£çŽã§ã¯ãããŸããã ç§ã¯ããŸãç解ããŠããŸããã ãããŠããã®åé¡ãããããç解ããããã«Pythonã«é¢ããæ¬ãèªã¿ãŸããã GDScriptã¯éåžžã«ãã䌌ãŠããããã§ãã
泚æïŒ
- ãšã³ãžã³ã¯ããªã«æåãç解ããŸããã ãããã誀ã£ãŠäœããæžããå Žåã圌ã¯ããã衚瀺ããŸããã è¡å šäœã«1ã€ã®å€§ããªééããšããŠããŒã¯ããã ãã§ãã
- ã€ã³ãã³ãã¯éåžžã«éèŠã§ãã ã€ã³ãã³ããããã«ãããŸãã-ãããŠãããŒããŒã¯åºã«èœã¡ããããããŸãããééã£ãæ©èœãå®è¡ããããããããŸããã
- ç¹°ãè¿ããŸãããç§ã¯ããã°ã©ãã³ã°ã®åå¿è ã§ãããã§ããã ãç°¡åã«ãã¹ãŠã説æããããšããŸãã
å°ããªãªã¯ãšã¹ã-ããªãããããããè¯ãé 眮ããæ¹æ³ãç¥ã£ãŠãããªã-æžããŠãã ããã ãã¹ãŠã®ã³ã¡ã³ããèæ ®ã«å ¥ããŠããããã§ãã
æãåçŽãªã¢ãã¡ãŒã·ã§ã³ã衚瀺ããããã®ä»¥åã®ã³ãŒããæãåºãããŠãã ããïŒ
äœã ã£ã
extends RigidBody2D var anim="" func _integrate_forces(s): var new_anim=anim new_anim=«idle» if (new_anim!=anim): anim=new_anim get_node(«anim»).play(anim)
ã³ãŒããè¿œå ããã³å€æŽããŸãã
å€æ°ã宣èšãã
extends RigidBody2D var anim="" # var siding_left=false # var jumping=false # var stopping_jump=false # var WALK_ACCEL = 800.0 # var WALK_DEACCEL= 800.0 # var WALK_MAX_VELOCITY= 800.0 # var GRAVITY = 900.0 # var AIR_ACCEL = 200.0 # var AIR_DEACCEL= 200.0 # ( ) . , Mario Bros' var JUMP_VELOCITY=460 # var STOP_JUMP_FORCE=900.0 # var MAX_FLOOR_AIRBORNE_TIME = 0.15 # , . - , . , "" . var airborne_time=1e20 # var floor_h_velocity=0.0
integration_forcesé¢æ°ãéå§ããŸãã ãã«ãã®ããã€ãã®èšèã¯æ¬¡ã®ãšããã§ãã
ç©ççžäºäœçšã䜿çšããããã«é¢æ°ãå€æŽããŸãã ãããç§ãã¡ãããããšã§ãã
PSã³ãŒãã«ã€ããŠããã«ã³ã¡ã³ãããæ¹æ³ãããããŸããã ãããã£ãŠã次ã®ããã«ããŠãã ããã
çžäºäœçšé¢æ°ãæžã
func _integrate_forces(s): var lv = s.get_linear_velocity() var step = s.get_step() var new_anim=anim var new_siding_left=siding_left
å¶åŸ¡ãåŸãŸã
var move_left = Input.is_action_pressed("move_left") var move_right = Input.is_action_pressed("move_right") var jump = Input.is_action_pressed("jump") # x () lv.x-=floor_h_velocity floor_h_velocity=0.0
ã¢ãŒã¹æ€çŽ¢ïŒåºãšã®ãã¯ã¹ãã£ã®æ¥è§Šã確èªïŒ
var found_floor=false var floor_index=-1 for x in range(s.get_contact_count()): var ci = s.get_contact_local_normal(x) if (ci.dot(Vector2(0,-1))>0.6): found_floor=true floor_index=x if (found_floor): airborne_time=0.0 else: airborne_time+=step #, var on_floor = airborne_time < MAX_FLOOR_AIRBORNE_TIME
ãžã£ã³ãããã»ã¹
if (jumping): if (lv.y>0): # ( ) jumping=false elif (not jump): stopping_jump=true if (stopping_jump): lv.y+=STOP_JUMP_FORCE*step
å°çäžã®ãã£ã©ã¯ã¿ãŒã®åã
if (on_floor): if (move_left and not move_right): if (lv.x > -WALK_MAX_VELOCITY): lv.x-=WALK_ACCEL*step elif (move_right and not move_left): if (lv.x < WALK_MAX_VELOCITY): lv.x+=WALK_ACCEL*step else: var xv = abs(lv.x) xv-=WALK_DEACCEL*step if (xv<0): xv=0 lv.x=sign(lv.x)*xv # if (not jumping and jump): lv.y=-JUMP_VELOCITY jumping=true stopping_jump=false # if (lv.x < 0 and move_left): new_siding_left=true elif (lv.x > 0 and move_right): new_siding_left=false if (jumping): new_anim="jumping" elif (abs(lv.x)<0.1): new_anim="idle" else: new_anim="run"
空äžã§ã®ãã£ã©ã¯ã¿ãŒã®åã
else: if (move_left and not move_right): if (lv.x > -WALK_MAX_VELOCITY): lv.x-=AIR_ACCEL*step elif (move_right and not move_left): if (lv.x < WALK_MAX_VELOCITY): lv.x+=AIR_ACCEL*step else: var xv = abs(lv.x) xv-=AIR_DEACCEL*step if (xv<0): xv=0 lv.x=sign(lv.x)*xv if (lv.y<0): new_anim="jumping" else: new_anim="falling"
ãã£ã©ã¯ã¿ãŒã®åã
if (new_siding_left!=siding_left): if (new_siding_left): get_node("sprite").set_scale( Vector2(-1,1) ) else: get_node("sprite").set_scale( Vector2(1,1) ) siding_left=new_siding_left
ã¢ãã¡ãŒã·ã§ã³ãå€æŽãã
if (new_anim!=anim): anim=new_anim get_node("anim").play(anim)
察å°é床ãé©çšãã
if (found_floor): floor_h_velocity=s.get_contact_collider_velocity_at_pos(floor_index).x lv.x+=floor_h_velocity
ãã®ãã¹ãŠã®æ··ä¹±ã«éåãé©çšãã
lv+=s.get_total_gravity()*step s.set_linear_velocity(lv)
ãããŒãããã¯ææã§ããã
ã³ã¡ã³ããªãã§ãã¹ãŠäžç·ã«ãªããŸããïŒ
extends RigidBody2D var anim="" var siding_left=false var jumping=false var stopping_jump=false var WALK_ACCEL = 300.0 var WALK_DEACCEL= 300.0 var WALK_MAX_VELOCITY= 400.0 var GRAVITY = 900.0 var AIR_ACCEL = 300.0 var AIR_DEACCEL= 300.0 var JUMP_VELOCITY=460 var STOP_JUMP_FORCE=200.0 var MAX_FLOOR_AIRBORNE_TIME = 0.15 var airborne_time=1e20 var floor_h_velocity=0.0 func _integrate_forces(s): var lv = s.get_linear_velocity() var step = s.get_step() var new_anim=anim var new_siding_left=siding_left var move_left = Input.is_action_pressed("move_left") var move_right = Input.is_action_pressed("move_right") var jump = Input.is_action_pressed("jump") lv.x-=floor_h_velocity floor_h_velocity=0.0 var found_floor=false var floor_index=-1 for x in range(s.get_contact_count()): var ci = s.get_contact_local_normal(x) if (ci.dot(Vector2(0,-1))>0.6): found_floor=true floor_index=x if (found_floor): airborne_time=0.0 else: airborne_time+=step var on_floor = airborne_time < MAX_FLOOR_AIRBORNE_TIME if (jumping): if (lv.y>0): jumping=false elif (not jump): stopping_jump=true if (stopping_jump): lv.y+=STOP_JUMP_FORCE*step if (on_floor): if (move_left and not move_right): if (lv.x > -WALK_MAX_VELOCITY): lv.x-=WALK_ACCEL*step elif (move_right and not move_left): if (lv.x < WALK_MAX_VELOCITY): lv.x+=WALK_ACCEL*step else: var xv = abs(lv.x) xv-=WALK_DEACCEL*step if (xv<0): xv=0 lv.x=sign(lv.x)*xv if (not jumping and jump): lv.y=-JUMP_VELOCITY jumping=true stopping_jump=false if (lv.x < 0 and move_left): new_siding_left=true elif (lv.x > 0 and move_right): new_siding_left=false if (jumping): new_anim="jumping" elif (abs(lv.x)<0.1): new_anim="idle" else: new_anim="run" else: if (move_left and not move_right): if (lv.x > -WALK_MAX_VELOCITY): lv.x-=AIR_ACCEL*step elif (move_right and not move_left): if (lv.x < WALK_MAX_VELOCITY): lv.x+=AIR_ACCEL*step else: var xv = abs(lv.x) xv-=AIR_DEACCEL*step if (xv<0): xv=0 lv.x=sign(lv.x)*xv if (lv.y<0): new_anim="jumping" else: new_anim="falling" if (new_siding_left!=siding_left): if (new_siding_left): get_node("sprite").set_scale( Vector2(-1,1) ) else: get_node("sprite").set_scale( Vector2(1,1) ) siding_left=new_siding_left if (new_anim!=anim): anim=new_anim get_node("anim").play(anim) if (found_floor): floor_h_velocity=s.get_contact_collider_velocity_at_pos(floor_index).x lv.x+=floor_h_velocity lv+=s.get_total_gravity()*step s.set_linear_velocity(lv)
PSéåãæ©èœããã«ã¯ã[ã·ãŒã³]-> [ãããžã§ã¯ãèšå®]-> [Physics2D]-> [ããã©ã«ãã®éå]ããã¯ã¹ããªã³ã«ããå¿ èŠããããŸãã
TileSetsãã€ã³ããŒããã
ã¿ã€ã«ã»ããã«ã€ããŠè©³ãã話ãæéã¯ãããŸããã å®æããã·ãŒã³ïŒãããžã§ã¯ãããïŒã®ã¿ãæäŸããããTileSetããç¬èªã®ã·ãŒã³ãäœæã§ããŸãã 以äžã®ãªã³ã¯ããã»ãããããŠã³ããŒãããŠãNode TileMapãããžã§ã¯ãã«è¿œå ã§ããŸãã èšå®ã§ãå®æããTileSetãè¿œå ããå¿ èŠããããŸãïŒTileSet-> Load-> tileset.xmlïŒã æãç°¡åãªåº/å°é¢ãæãããšãã§ããŸãã ã¬ãã«ã®æç»æ¹æ³ãTileSets次ã®ã¬ãã¹ã³ã§è©³ãã説æããŸãã
ããŒãã¹ïŒ èæ¯ãè¿œå ããŸãïŒ
æ°ããã·ãŒã³ãäœæããŸãã ãããŒããParallaxBackgroundãè¿œå ããŸãã parallax_bgãšããååãä»ããŠãparallax_bg.xmlãšããŠä¿åããŸãã
4ã€ã®ParallaxLayerãäœæããŸãã ããããskyãcloudsãmount_1ãmount_2ãšåŒã³ãŸãã ãããã£ãŠã空ãé²ãå±±ã
ã²ãŒã ã®è§£å床ã¯800x600ã§ãïŒã·ãŒã³ãèŠã->ãããžã§ã¯ãèšå®->ãã£ã¹ãã¬ã€èšå®ïŒã ãã®ãããåãããŒããã«ãã©ãŒãªã³ã°ãã©ã¡ãŒã¿ãŒ800.0ãèšå®ããY軞ã«æ²¿ã£ãŠãã©ãŒãªã³ã°ããŸãããããŒããã¯ã©ãŠããmount_1ãmount_2ã®ã¹ã±ãŒã«ãã©ã¡ãŒã¿ãŒã0.1.1ã«å€æŽããŸãã ãããã0.2.1ãš0.4.1ã

ã¹ã«ã€ã¹ãã©ã€ããããŒãã¹ã«ã€ã«è¿œå ããŸãã äºåã«èªåã§æããŠããŸãã ãŸãã以äžã®ãªã³ã¯ãããã¹ãŠãããŠã³ããŒãã§ããŸãã
ããã«ãäœæ¥é åã«2ã€ã®ã¹ããªãããçŸããŸããã ç»åã®äœæ¥é åã«æ¡å€§çž®å°ããŸãã ã¡ã€ã³ã¹ãã©ã€ããå€æŽãããšããã®ãã©ãŒã€ã¡ãŒãžãå€æŽãããããšãããããŸãã
ããŒãã¯ã©ãŠãã«ã¯ã©ãŠããè¿œå ããŸãã 3ã€ãããããè€è£œããŠãæçµçã«6ã€ããã©ãŒãåã³è€è£œãããåèšã§12ã®é²ãã§ããããã«ãªããšæããŸãïŒ
次ã«ãããŒãmount_1ããã³mount_2ã«å±±ãè¿œå ããŸãã ããããmount_1ã®äžã«mount_2ã¬ã€ã€ãŒãäžããŸãããã

ã·ãŒã³ãä¿åããŸãã stage.xmlãéããŸãã ãããŠãã¹ããŒãžã«ããã©ã¹èšå·ããéããŠèæ¯ã®ããã·ãŒã³ãè¿œå ããŸãã
ãããŠãã€ãã®ããã«ãã²ãŒã ãã¬ã€ã®å°ããªãããªïŒ
å°ããªFAQïŒæŽæ°ãããŸãïŒïŒ
- ãã£ã©ã¯ã¿ãŒãåããªãå Žåã¯ãããŒãè¿œå ãããæ£ããè¿œå ãããŠããã確èªããŠãã ãã
- ã¢ãã¡ãŒã·ã§ã³ã®åé¡-ã¢ãã¡ãŒã·ã§ã³ãæ£ããè¿œå ããããã©ããã ã¢ã€ãã«ãå®è¡ãèœäžã®ã«ãŒãã¢ãã¡ãŒã·ã§ã³ã確èªããŠãã ããã
- ãã£ã©ã¯ã¿ãŒã¯åºã«èœã¡ãå£ã倩äºãéãæããŸã-äžè§åœ¢ã®CollisionPolygon2Dãå¢ãããŸãã
- ãã¯ã¹ãã£ã®äžéš/ãã¯ã¹ãã£ã®äž-ç¢å°CollisionShape2Dã䜿çšããŠäœæ¥ãã
ããŠã³ããŒãïŒ
-
ãããžã§ã¯ããœãŒã¹
-
ããã¯ïŒzipïŒ
-
Linux x86çšã®ã³ã³ãã€ã«æžã¿ãšã¯ã¹ããŒããã³ãã¬ãŒãïŒzipïŒ
-
Linux x86ã¬ãã¹ã³ãã¢ãã€ããª
-
Linux amd64ã¬ãã¹ã³ãã¢ãã€ããª
-
Windows x86ã¬ãã¹ã³ãã¢ãã€ããª
-
Windows Demo x86_64ãã€ããª
-
MacOS x86ã¬ãã¹ã³ãã¢ãã€ããª
-
MacOS amd64ã¬ãã¹ã³ãã¢ãã€ããª
æåŸãŸã§ç¿åŸããŠèªãã§ãããŠããããšãã æ¬ ç¹ãããå Žåã¯ãPMã«é£çµ¡ããŠãã ããã ããããšããããããïŒ