ãŸããã
ãã®èšäºã§ã¯ãUnityã¹ã¯ãªããã£ã³ã°ã®åå¿è ã察象ã«ããŠããŸãããJavaScriptã·ã³ã¿ãã¯ã¹ãä»ã®åæ§ã®ããã°ã©ãã³ã°èšèªã«å®å šã«æ £ããŠããããã§ã¯ãããŸããã ããã§ãUnityã䜿çšããJavaScriptã¯ã OOPã®ãµããŒããæ¹åããããã«å ã®ãã®ãšãããã«ç°ãªããããããUnity JavaScriptãšåŒã°ããããšãå°ãæ確ã«ããå¿ èŠããããŸãã ããšãã°ãå ã®JavaScriptã®ãªããžã§ã¯ãæåæ©èœã«ç²ŸéããŠããæ°ããUnityéçºè ãèªèããŠããªãã¯ã©ã¹ãšãã®ç¶æ¿ãããã«çŸãããããCïŒãŸãã¯Booã䜿çšããŠæåŠããŸãã
è¬èŸ
ãŸãã Unityã®èšäºãæžããèè ã«æè¬ããŸã-ç¡æã®ã¯ãã¹ãã©ãããã©ãŒã 3Dãšã³ãžã³ïŒããã³ãã©ãŠã¶ããŒã¹ïŒ ãããã³åå¿è åãã®Unity3Dãã¥ãŒããªã¢ã«-ãã¥ãŒããªã¢ã«1ãããã®èšäºã®èè ãUnityã®ãããã¯ã«ã€ããŠhabra-peopleãæè²ããã®ãå©ããããã«ã圌ã®ã¬ãã¹ã³ã®ã¢ããã°ã¬ãŒããæžããŠãæ°ã«ããªããšæããŸãã
ãŸãšã
ç§ã¯é·ãéãã©ãããå§ãããããããšèããæåŸã«ã¯æåããå§ããããšã«ããŸããã ã€ãŸããã»ãšãã©ã®ã²ãŒã ã¯ã©ãããå§ãŸãã®ã§ããããïŒ ãããããªãéæ¢ç»ãããŽå¶äœã¹ã¿ãžãªãšééã£ãŠããªãããã¡ã€ã³ã¡ãã¥ãŒããïŒ ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãã²ãŒã GUIã®äž»èŠãªèŠçŽ ãã¹ã¯ãªããããã·ãŒã³ãããŒãããæ¹æ³ãããã³ããŸããŸãªã¹ã¯ãªãããçžäºäœçšãããæ¹æ³ã«ã€ããŠè©³ãã説æããŸãã ãã®ã¬ãã¹ã³ã§ã¯ãã¬ãã¹ã³ã§äœæãããã·ã¥ãŒã¿ãŒãã®ã¡ã€ã³ã¡ãã¥ãŒãäœæããŸããUnity3Dfor beginners-Tutorial 1 ããã®ã¬ãã¹ã³ã§ã¹ã¯ãªãããäœæããããšãäŒããŸãã ã
1.ã©ãã«ãšGUIStyle
ã§ã¯ã ã¬ãã¹ã³ã®ãããã§äœæãããããžã§ã¯ããéããŸãããã æ°ããã·ãŒã³ãäœæãïŒ[ãã¡ã€ã«]-> [æ°ããã·ãŒã³]ïŒãã·ãŒã³å ã«ç©ºã®ãªããžã§ã¯ããäœæãïŒGameObject-> [空ãäœæ]ïŒãããšãã°ã¡ãã¥ãŒãšèšå®ã«ååãä»ããŸãã 空ã®JavaScriptãã¡ã€ã«ãäœæãïŒ[ã¢ã»ãã]-> [äœæ]-> [JavaScript]ïŒãã¡ãã¥ãŒããã³èšå®ãªããžã§ã¯ãã«ãã©ãã°ããã¹ã¯ãªããèªäœãããã«ã¯ãªãã¯ãããšãã¹ã¯ãªããç·šéãã€ã¢ãã°ããã¯ã¹ãéããŸãã
ã¹ã¯ãªãããã¡ã€ã«ãå®å šã«ç©ºã§ã¯ãªããæŽæ°æ©èœãå«ãŸããŠããããšãããããŸããåŸã§èª¬æããŸããä»ã¯åé€ããŠã次ã®ããã«èšè¿°ããŸãã
public var welcomeLabel : GUIStyle; //1 function OnGUI(){ //2 GUI.Label(new Rect(Screen.width / 2, 0, 50, 20),"Welcome",welcomeLabel); //3 }
å€æŽãä¿åãã[åç]ãã¯ãªãã¯ããŸãã
äžããèŠããšãããäžå€®ã§ã¯ãªããé»åã§æžããããWelcomããšããã»ãšãã©èªèã§ããªãåèªããããŸãã
ããããããã¯äœã§ããïŒ ãããããšããèšèãããã¯ãã§ãïŒ
å®éãããã¹ããæžãããŠããæ£æ¹åœ¢ã®å¹ ãåèªå šäœã«åãŸããªããšå®£èšãããããæåŸã®æåã¯å€±ãããŸããã
ãããããã¹ãŠã«ã€ããŠé çªã«è©±ããŸãããããã¬ã€ã¢ãŒãããªãã«ããŸãã
誰ããç解ããŠããªãå Žåã以äžã®ç¹ã¯ã³ãŒãå ã®ã³ã¡ã³ãã«å¯Ÿå¿ããŸãã
- ã¿ã€ãGUIStyleã®å€æ°welcomeLabelã [éå±€]ã¿ãã«ç§»åããGameObjectïŒGOïŒ-ã¡ãã¥ãŒãšèšå®ãéžæããŸããã¹ã¯ãªããã«æ°ããWelcome Labelãã£ãŒã«ãã衚瀺ãããŠããããšãããããŸãã å±éãããšãå€ãã®åãã£ãŒã«ãã«è¡šç€ºãããŠããããã«ãWebã§JavaScriptãšCSSãæ±ã£ã人ã¯ããããããããã®ããããã£ã®ç®çããã§ã«æšæž¬ããŠãããšæããŸãã
- OnGUIïŒïŒé¢æ°ã¯ãGUIã€ãã³ãã®ã¬ã³ããªã³ã°ãšåŠçã®ããã«åãã¬ãŒã ã§åŒã³åºãããŸã; GUIã«é¢é£ãããã¹ãŠã®ãã®ã¯ããã®é¢æ°ã§åŒã³åºãããå¿ èŠããããŸãã
- F. GUIã¯ã©ã¹ã®ã©ãã«ïŒïŒ ã ãã®é¢æ°ã®æåã®åŒæ°ã¯ã Rectæ§é äœãæž¡ããŸããå®éã«ã¯ã座æšx = Screen.width / 2ãã€ãŸãç»é¢ã®å¹ ã2ã§å²ã£ãå€ããããããã«ãå·Šäžé ã®x座æšãšy座æšãå¹ ãšé«ãã§äžããããæ£æ¹åœ¢ã§ããããã¹ããäžå€®ã«æããããã«ã2çªç®ã®åŒæ°ã¯ããã¹ãæååãWelcomeãã§ããã3çªç®ã®åŒæ°ã¯ãã£ãŒã«ãWelcome Labelã䜿çšããŠã©ãã«ã®ããŸããŸãªãã©ã¡ãŒã¿ãŒãèšå®ããã¹ã¿ã€ã«ã§ãã
[ããããã©ãã«]ãã£ãŒã«ããå±éãã次ã®ãªãã·ã§ã³ãèšå®ããŸãã
[åç]ãã¯ãªãã¯ããŠãçµæãã楜ãã¿ãã ããã
ã¬ãã¹ã³ã¯ãã§ã«ããªãé·ãã®ã§ãã©ã®èšå®ãåå ã§ãããã«ã€ããŠã¯èª¬æããŸãããããããè©ŠããŠã¿ãŠããã©ã³ãã®è²ãšãµã€ãºãå€æŽãããã¯ã¹ãã£ãé©çšããŸãããã¹ãŠãéåžžã«ã·ã³ãã«ã§çŽæçã§ãã
äœè«ã§éå§ããŸã
äžè¬ã«ãã¹ã¯ãªãããšãã£ã¿ãŒãšããŠãä»»æã®éçºç°å¢ã䜿çšã§ããŸãããã¹ãŠã®ã¹ã¯ãªããã¯ããããžã§ã¯ãã®Assetsãã©ã«ããŒã«äœæãããŸãã ããšãã°ãç¡æã®MonoDevelopéçºç°å¢ã䜿çšã§ããŸããããã¯äž»ã«CïŒããã³ãã®ä»ã®.NETèšèªã®ã³ãŒãã£ã³ã°ãç®çãšããŠããŸãããJSã§ãåæ§ã«äœ¿çšã§ããŸãã Unityãã£ã¹ããªãã¥ãŒã·ã§ã³ã«ãå«ãŸããŠããïŒã€ã³ã¹ããŒã«ããã«ã¯ãUnityã®ã€ã³ã¹ããŒã«ãéå§ããåã«ãã§ãã¯ããã¯ã¹ããªã³ã«ããå¿ èŠããããŸãïŒããã®ããã°ã©ã ã䜿çšããŠã¹ã¯ãªãããåžžã«éãã«ã¯ãïŒç·šéïŒ->ïŒããªãã¡ã¬ã³ã¹ïŒã«ç§»åããïŒå€éšã¹ã¯ãªãããšãã£ã¿ãŒïŒãã£ãŒã«ãã§ãšãã£ã¿ãŒãžã®ãã¹ãæå®ããåæãè¡ããŸããããžã§ã¯ããã¡ã€ã«ã§äœæãããã¹ãŠã®ã¹ã¯ãªããã¯ã[ã¢ã»ãã]-> [MonoDevelopãããžã§ã¯ãã®åæ]ãã¯ãªãã¯ããã ãã§ãïŒå¥ã®ã¹ã¯ãªãããäœæãããã³ã«ãã¿ã³ãæŒãå¿ èŠã¯ãããŸããã1åã¯ãªãã¯ããã ãã§ãè¿œå ã®ã¹ã¯ãªããããããžã§ã¯ããã¡ã€ã«ã«èªåçã«å«ãŸããŸãïŒã ç§ã¯ãããã¹ã¯ãªãŒã³ã·ã§ãããè¡ããŸããã§ãç§ã«ãšã£ãŠã¯ããã®ãšãã£ã¿ã®ãã¹ãŠã®å©ç¹ã説æããŸããã
æšæºãšãã£ã¿ãŒïŒ
MonoDevelopïŒ
äœè«çµäº
2.ãã¿ã³ãšGUISkin
ã¹ã¯ãªããã«é²ã¿ãä¿®æ£ããŸãã
public var welcomeLabel : GUIStyle; public var customSkin : GUISkin; //1 public var playGameRect : Rect; //2 public var optionsRect : Rect; //2 public var quitRect : Rect; //2 function OnGUI(){ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20),"Welcome",welcomeLabel); GUI.skin = customSkin; //3 GUI.Button(playGameRect,"Play Game"); //4 GUI.Button(optionsRect,"Options"); //4 GUI.Button(quitRect,"Quit"); //4 }
次ã«ãæ°ããGUISkinãäœæããAssets-> Create-> GUI SkinãMenu SkinãšåŒã³ãMenu and settingsãªããžã§ã¯ãã«ç§»åããŠãæ°ããäœæããMenu Skinãæ°ããCustom Skinãã£ãŒã«ãã«ãã©ãã°ããæ®ãã®ãã£ãŒã«ãã§æ¬¡ã®èšå®ãèšå®ããŸãïŒPlayã²ãŒã RectãOptions RectãQuit RectïŒïŒ
[åç]ãã¯ãªãã¯ãããšãçµæã¯æ¬¡ã®ããã«ãªããŸãã
[ãããžã§ã¯ã]ã¿ãã®ã¡ãã¥ãŒã¹ãã³ã«ç§»åãããã¿ã³ã®ãã©ã³ããµã€ãºããããã«å¢ãããŸããã€ãŸãã[ãã¿ã³]ãã£ãŒã«ããå±éãã[ãã©ã³ããµã€ãº]ã16ã«èšå®ããŸããããã¯ãã²ãŒã ã¢ãŒããçµäºããã«è¡ãããšãã§ããçµäºãããšãå€æŽãä¿åããããã¬ããããããã£ãå€æŽãããŸãã
ã¹ã¯ãªããã解æããŠã¿ãŸãããã
- GUISkin㯠ãåºæ¬çã«æšæºã®GUIæ§æã®å šäœéåã§ããããããå€æŽããããã®éåžžã«æè»ãªæ¹æ³ãå¯èœã«ããŸãã
- Rectã«ã€ããŠã¯ãã§ã«ç¥ã£ãŠããŸããããšãã£ã¿ãŒããå€æ°ïŒå€æ°ïŒãæ§æããæ©äŒãåŸãããã«ãé¢æ°ã®å€åŽã§ãããªãã¯ã¢ã¯ã»ã¹ä¿®é£Ÿåã䜿çšããŠå€æ°ã宣èšããããã«ãªããŸããã
- GUISkinã®èšå®ãGUIã¯ã©ã¹ã®ã¹ãã³å€æ°ã«å²ãåœãŠãŸãããã以éãã¯ã©ã¹ã®ãã¹ãŠã®é¢æ°ã¯ãã®ã¹ãã³ã䜿çšããŸããããæç¹ã§ã¹ã¯ãªããã§ã¹ãã³ã®äœ¿çšãåæ¢ããèšå®ãæšæºã«ãªã»ããããå Žåã¯ããã®åã«GUI.skin = nullãèšè¿°ããã ãã§ãã
- ButtonïŒïŒé¢æ°ã¯ãboolå€ãè¿ãããšãé€ããŠãLabelé¢æ°ãšæ¬è³ªçã«éãã¯ãããŸããïŒãã¿ã³ãã¯ãªãã¯ãããštrueãä»ã®ãã¹ãŠã®å Žåã¯falseïŒã
3.ãªãã·ã§ã³ãšã¹ã©ã€ããŒã¡ãã¥ãŒ
ç§ãã¡ã¯ïŒïŒæ»ãå€FCTãã¿ã³ã䜿çšããããã«ã¹ã¯ãªãããå€æŽããŸãã
public var welcomeLabel : GUIStyle; public var customSkin : GUISkin; public var playGameRect : Rect; public var optionsRect : Rect; public var quitRect : Rect; private var optionsMode = false; //1 public var _bulletImpulse : float = 300; //2 public var _shootDelay : float = 1; //2 function OnGUI(){ if(!optionsMode){ //1 GUI.Label(new Rect(Screen.width / 2, 0, 50, 20), "Welcome", welcomeLabel); GUI.skin = customSkin; GUI.Button(playGameRect,"Play Game"); if(GUI.Button(optionsRect,"Options")){ optionsMode = true; //1 } GUI.Button(quitRect,"Quit"); }else{ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20), "Options", welcomeLabel); GUI.skin = customSkin; //5 GUI.Label(new Rect(270, 75, 50, 20),"Bullet Impulse"); _bulletImpulse = GUI.HorizontalSlider(new Rect(50, 100, 500, 20), _bulletImpulse,10,700);//3 GUI.Label(new Rect(560, 95, 50, 20), _bulletImpulse.ToString());//4 GUI.Label(new Rect(270, 125, 50, 20),"Shoot Delay"); _shootDelay = GUI.HorizontalSlider(new Rect(50, 150, 500, 20), _shootDelay, 0.1, 3);//3 GUI.Label(new Rect(560, 145, 50, 20), _shootDelay.ToString());//4 if(GUI.Button(new Rect(20, 190, 100, 30),"<< Back")){ optionsMode = false; //1 } } }
- éåžžãç»é¢ã§ã¯1ã€ã®ãµãã¡ãã¥ãŒã®ã¿ãéãããšã«æ £ããŠããŸãããã¡ã€ã³ã¡ãã¥ãŒã®ã¿ãæ¶ãããã®å€æ°ã®åŸã«ç¶ããŸãã
- å®éãããã¯ã²ãŒã ã®ãªãã·ã§ã³ã§ããåŸã§ãããã«æ»ããŸãã
- æ©èœæ°Žå¹³ã¹ã©ã€ããŒïŒïŒã¹ã©ã€ããŒäžã®ã¹ã©ã€ãäœçœ®ã®å é»é»æµã®å€ã§ããã第äžåŒæ°- - ïŒïŒããã¯é©ãã ïŒæ°Žå¹³ã¹ã©ã€ããŒÂ«æã»ããæåã®åŒæ°ïŒã®RectïŒã¯ã³ã¡ã³ãããã«æ®ããŠåãã2çªç®ã®åŒæ°ã¯ãå³-å·Šã®å€ã¯ãã¹ããŒã¹ã®éãããã³æåŸã§ãå€ã®å Žåãé¢æ°ã¯ãå·Šãšå³ã®å€ã®éã«ããæµ®åå°æ°ç¹å€ãè¿ããŸãïŒã¹ã©ã€ããŒã¹ã©ã€ããŒã移åããå ŽåïŒã
- LabelïŒïŒé¢æ°ã®æåŸã®åŒæ°ã«æ³šæããŠãã ãã-ããã¯ãToStringïŒïŒé¢æ°ã«ãã£ãŠæååã«å€æãããfloatå€ã§ããããã¯éèŠã§ãã Unityã¹ã¯ãªããã³ã³ãã€ã©ã¯ãæ°å€ãæååèªäœã«å€æããæ¹æ³ãç¥ããããšã©ãŒãã¹ããŒããŸãã
- GUI.skinã¯å¥ã®ã¡ãã¥ãŒã«åãæ¿ãããšãªã»ããããããããããã¯çºçããŸãããæ°ããã¡ãã¥ãŒãæç»ããåã«customSkinãå²ãåœãŠãå¿ èŠããããŸã
ããŠãäœãèµ·ãã£ãã®ããèŠãŠã¿ãŸãããã[åç]ãš[ãªãã·ã§ã³]ãã¿ã³ãã¯ãªãã¯ããŸãã
ããããããã¯äœã§ããïŒ Bullet and Shootãšã¯äœã§ããïŒ åŒŸäžžã€ã³ãã«ã¹ãšã·ã¥ãŒãé 延ããªããã°ãªããŸããïŒ ç¹°ãè¿ããŸããããããã®***æ£æ¹åœ¢ã®å¹ ã¯ååã§ã¯ãããŸããã§ãããæ¬åœã«ã¹ã¯ãªããã«æ»ããããã§å¹ ãå€æŽããå¿ èŠããããŸãã
ããïŒ ããªãã§ãã ããïŒ Menu Skinãšããååã®çŽ æŽãããGUISkinããããŸãã ãã¬ã€ã¢ãŒããçµäºããã«ãããã«é²ã¿ã[ã©ãã«]ãã£ãŒã«ããå±éãã[ããã¹ãã¯ãªããã³ã°]ãªãã·ã§ã³ã§[ãªãŒããŒãããŒ]ãéžæãã[ã¯ãŒãã©ãã]ã®æšªã®ããã¯ã¹ããªãã«ããŸãã
4.ã²ãŒã ããã¬ã€ããŠçµäº
ä»ã®ãã¿ã³ã«ã€ã³ã¿ã©ã¯ãã£ãæ©èœãè¿œå ããŸãã
public var welcomeLabel : GUIStyle; public var customSkin : GUISkin; public var playGameRect : Rect; public var optionsRect : Rect; public var quitRect : Rect; private var optionsMode = false; public var _bulletImpulse : float = 300; public var _shootDelay : float = 1; function OnGUI(){ if(!optionsMode){ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20),"Welcome",welcomeLabel); GUI.skin = customSkin; if(GUI.Button(playGameRect,"Play Game")){ Application.LoadLevel("Test Scene"); //1 } if(GUI.Button(optionsRect,"Options")){ optionsMode = true; } if(GUI.Button(quitRect,"Quit")){ Application.Quit(); //2 } }else{ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20), "Options",welcomeLabel); GUI.skin = customSkin; GUI.Label(new Rect(270, 75, 50, 20),"Bullet Impulse"); _bulletImpulse = GUI.HorizontalSlider(new Rect(50, 100, 500, 20),_bulletImpulse,10,700); GUI.Label(new Rect(560, 95, 50, 20),_bulletImpulse.ToString()); GUI.Label(new Rect(270, 125, 50, 20),"Shoot Delay"); _shootDelay = GUI.HorizontalSlider(new Rect(50, 150, 500, 20),_shootDelay,0.1,3); GUI.Label(new Rect(560, 145, 50, 20),_shootDelay.ToString()); if(GUI.Button(new Rect(20, 190, 100, 30),"<< Back")){ optionsMode = false; } } }
ã²ãŒã "ïŒïŒ{public var welcomeLabel : GUIStyle; public var customSkin : GUISkin; public var playGameRect : Rect; public var optionsRect : Rect; public var quitRect : Rect; private var optionsMode = false; public var _bulletImpulse : float = 300; public var _shootDelay : float = 1; function OnGUI(){ if(!optionsMode){ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20),"Welcome",welcomeLabel); GUI.skin = customSkin; if(GUI.Button(playGameRect,"Play Game")){ Application.LoadLevel("Test Scene"); //1 } if(GUI.Button(optionsRect,"Options")){ optionsMode = true; } if(GUI.Button(quitRect,"Quit")){ Application.Quit(); //2 } }else{ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20), "Options",welcomeLabel); GUI.skin = customSkin; GUI.Label(new Rect(270, 75, 50, 20),"Bullet Impulse"); _bulletImpulse = GUI.HorizontalSlider(new Rect(50, 100, 500, 20),_bulletImpulse,10,700); GUI.Label(new Rect(560, 95, 50, 20),_bulletImpulse.ToString()); GUI.Label(new Rect(270, 125, 50, 20),"Shoot Delay"); _shootDelay = GUI.HorizontalSlider(new Rect(50, 150, 500, 20),_shootDelay,0.1,3); GUI.Label(new Rect(560, 145, 50, 20),_shootDelay.ToString()); if(GUI.Button(new Rect(20, 190, 100, 30),"<< Back")){ optionsMode = false; } } }
ãã¬ã€ã¢ãŒãã«å ¥ã£ãŠãããã®ãã¿ã³ãã¯ãªãã¯ããããšãããšãããããã³ã³ãœãŒã«ïŒãŠã£ã³ããŠ->ã³ã³ãœãŒã«ïŒã§ãã¬ã€ã²ãŒã ãã¯ãªãã¯ãããšãšã©ãŒã衚瀺ããããäœãããªãããã¯ãªãã¯ãããšäœãèµ·ãããªãã®ã§ããã®çç±ãèŠãŠã¿ãŸãããïŒ
- Applicationã¯ã©ã¹ã®LoadLevelïŒïŒã¯ã©ã¹ã¯ããTest Sceneããšããã·ãŒã³ãããŒãããŸãïŒ åå¿è
åãã®Unity3Dãã¥ãŒããªã¢ã«-ãã¥ãŒããªã¢ã«1ããã·ãŒã³ãåŒã³åºããããã«ïŒãã·ãŒã³çªå·ããã®é¢æ°ã«è»¢éããããšãã§ããŸãã 質åããããŸãïŒãã®çªå·ã¯ã©ãã§å
¥æã§ããŸããïŒ ç°¡åã§ãããŸã ä¿åããŠããªãå Žåã¯ã·ãŒã³ãä¿åããŸãã[ãã¡ã€ã«]-> [ã·ãŒã³ã«ååãä»ããŠä¿å...]ãéžæãã[ã¡ãã¥ãŒã·ãŒã³]ã«ååãä»ããŠã[ãã¡ã€ã«]-> [ãã«ãèšå®...
ã·ãŒã³ã®ååã®å³åŽã«ã¯ããã®ã·ãªã¢ã«çªå·ã衚瀺ãããŸãïŒããã©ã«ãã§ã¯ãã·ãŒã³çªå·0ãåžžã«æåã«ããŒããããŸãïŒã ãã¹ãã·ãŒã³ããã«ãèšå®ã«ç»é²ãããŠããªãã£ãããããã¹ãã·ãŒã³ãããŒãããããšãæãŸãªãã£ããšä»ã®èª°ãæšæž¬ããŸããã§ããããä»ã§ã¯ãã¹ãŠãæ£åžžã«ãªããŸãã [ãã«ãèšå®]ãŠã£ã³ããŠãéãããã¬ã€ã¢ãŒãã«å ¥ãã[ã²ãŒã ããã¬ã€]ãã¿ã³ãã¯ãªãã¯ããŸãã ãã£ãïŒ ã·ãŒã³ãèªã¿èŸŒãŸããŠããŸãïŒ
- ããããQuitãã¿ã³ã¯ãŸã æ©èœããŸããã å¿é ããªãã§ãã ããããããžã§ã¯ãããšãã£ã¿ãŒãŸãã¯Webãã¬ãŒã€ãŒã§èµ·åãããŠãæ©èœããŸããã ãã¿ã³ãæ©èœããããã«ã¯ããããžã§ã¯ããç¬ç«ããã¢ããªã±ãŒã·ã§ã³ã«ããå¿ èŠããããŸãããã®ããã«ã¯ãããã«ããããŠèµ·åããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãïŒãã«ãèšå®ïŒã«ç§»åããïŒãã«ããšå®è¡ïŒãã¿ã³ãã¯ãªãã¯ããŠãå®æããã¢ããªã±ãŒã·ã§ã³ãä¿åãããã©ã«ããŒãæå®ããä¿åããèšå®ãéžæããŠèµ·åããã¡ã€ã³ã¡ãã¥ãŒã確èªããŠãïŒçµäºïŒãã¯ãªãã¯ããŸããèŠããã¢ããªã±ãŒã·ã§ã³ãéããŸã
5. DontDestroyOnLoadããã³ãã®ä»ã®æªãèšè
æåã«ã Unity3Dåå¿è åããã¥ãŒããªã¢ã«-ãã¥ãŒããªã¢ã«1ã®ã¹ã¯ãªãããèŠãŠã䜿çšããèšå®ãšäœ¿çšããçç±ã確èªããŸãããã
public var bulletImpulse = 300; //1 public var shootSpeed; //2 public var bullet : GameObject; //3 public var lastShotTime : float; //4 function Start() { //5 lastShotTime = 0; } function Update () { //6 if (Input.GetKey(KeyCode.Mouse0)) { //7 if (Time.time>(lastShotTime + shootSpeed)){//8 var bull_clone : GameObject; //9 bull_clone = Instantiate(bullet, transform.position, transform.rotation);//10 Physics.IgnoreCollision(bull_clone.collider, collider);//11 bull_clone.rigidbody.AddForce(transform.forward*bulletImpulse, ForceMode.Impulse);//12 lastShotTime = Time.time;//13 } } }
//public var bulletImpulse = 300; //1 public var shootSpeed; //2 public var bullet : GameObject; //3 public var lastShotTime : float; //4 function Start() { //5 lastShotTime = 0; } function Update () { //6 if (Input.GetKey(KeyCode.Mouse0)) { //7 if (Time.time>(lastShotTime + shootSpeed)){//8 var bull_clone : GameObject; //9 bull_clone = Instantiate(bullet, transform.position, transform.rotation);//10 Physics.IgnoreCollision(bull_clone.collider, collider);//11 bull_clone.rigidbody.AddForce(transform.forward*bulletImpulse, ForceMode.Impulse);//12 lastShotTime = Time.time;//13 } } }
-
ãå°»ã蹎ãå¢ãã匟䞞ã«äŒéãããŸã - shootSpeedããã®ãã©ã¡ãŒã¿ãŒã«ã¯ããŸãè¯ãååã§ã¯ãããŸãã ããã¯æ¬è³ªçã«ã·ã§ããéã®é 延ã§ãããMainMenuã¹ã¯ãªããã§ã¯åŸã§ä»£ããã«ååŸãããªãã·ã§ã³ã§ã_shootDelayãšåŒã°ããŸã
- 匟䞞èªäœã¯ããã¬ãããŸãã¯ã·ãŒã³å ã®ãªããžã§ã¯ãã®ããããã§ã
- æåŸã®ã·ã§ããã®æé
- FIRST Updateã¡ãœããã®1ååã«StartïŒïŒãåŒã³åºãããŸã
- F- UpdateïŒïŒã¯ããã¹ãŠã®ãã¬ãŒã ã§åŒã³åºãããŸãïŒäžè¬ã«ãå ¬åŒããã¥ã¡ã³ãã§ã¯ãç©çåŠãšã®çžäºäœçšããããã¹ãŠã®é¢æ°ã¯ãç©çåŠã®ããŸããŸãªãã°ãåé¿ããããã«FixedUpdateïŒïŒé¢æ°ã§èšè¿°ããããšããå§ãããŸãããããã¯éåžžã«å°ããããããããžã§ã¯ã·ã§ã³ã«ãšã£ãŠéèŠã§ã¯ãããŸããïŒ
- ããŠã¹ã®å·Šãã¿ã³ãæŒãããå Žåã
- ãããŠãçŸåšã®æéãæåŸã®ã·ã§ããã®æé+ã·ã§ããéã®é 延ãããé·ãå Žåã
- GameObjectåã®å€æ°ã宣èšããŸãã
- Instantiate ïŒïŒã¯ ããªããžã§ã¯ãã®ã¯ããŒã³ãäœæããã¯ãŒã«ã空éã§æå®ãããäœçœ®ãšå転è§åºŠã§ãªããžã§ã¯ããè¿ããŸãã æåã®åŒæ°ã®åŒŸäžžã¶ã»ãªãŒããŒãããã¯ãã€ãŸãããªããžã§ã¯ããã³ããŒããããã«ã第2åŒæ°ç§ãã¡ã®ç®æ¡æžãã§ãç§ãã¡ã¯ã¯ã©ã¹ã«ã¢ããŒã«å€æ ïŒãã®å Žåã¯ã察象ãã¬ã€ã€ãŒïŒã¹ã¯ãªããã«æ·»ä»ãããã²ãŒã ãªããžã§ã¯ããå®éã®ã¯ã©ã¹ã§ã¯ã å€æããããåºã«ã²ãŒã ãªããžã§ã¯ãã®ç©ççãªäœçœ®ã«é¢ããæ å ±ãå¿ èŠãª2ã€ã®å€æ°ãååŸããŸãïŒposition-ã¯ãŒã«ã空éã§ã®äœçœ®ãä¿åããrotation-å転ã®è§åºŠãä¿åããŸãã
- Accessãªããžã§ã¯ãç©çåŠãšåŒãã§IgnoreCollision圌ã¯ã¹ã¯ãªããã«æ·»ä»ãããè¡çªåå éåšãªããžã§ã¯ãïŒãã¬ã€ã€ãŒïŒãšã®éã®è¡çªïŒã³ãªãžã§ã³ïŒãç¡èŠããããã«ãªãããããŠç§ãã¡ã®åŒŸäžžã®ã³ã©ã€ããŒã®ã¯ããŒã³ã¯ããã®ãã¹ãŠã¯ãããã2ã€ã®ãšã³ãã£ãã£éã§ã¯ãã¯ãç©çççžäºäœçšããªãããšããããšãæå³ããŸããã¬ãŒã€ãŒã¯åã«ããŒã«ãéãæããŸã-ã¯ããŒã³ã
- 匟䞞ã®åäœãªããžã§ã¯ããåç §ããŸããããã¯ãç©çã·ãã¥ã¬ãŒã·ã§ã³ãéããŠãªããžã§ã¯ãã®äœçœ®ãå¶åŸ¡ããç¹å®ã®ç©çå¹æïŒãã®å Žåã¯éåéïŒããªããžã§ã¯ãã«è¿œå ããAddForceïŒïŒé¢æ°ãåŒã³åºããŸããæåã®ãã©ã¡ãŒã¿ãŒã¯ããã¬ã€ã€ãŒã®å€æã«å¯ŸããŠåæ¹ã«åãããããã¯ãã«ã§ã'aã«éåéã®åŒ·åºŠãæãããšã2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯åã®ã¢ãŒãã§ã ã
- çŸåšã®æéãä¿åããŸã-ããã¯æåŸã®ã·ã§ããã®æéã§ã
ãã®ããããã®æ å ±ã®æµããåŠçãã2ã€ã®å€æ°ïŒbulletImpulseãšshootSpeedïŒã®ã¿ãå¿ èŠã§ãããå€ãã®äººããã§ã«æšæž¬ããŠããããã«ãGameObjectã®ã¡ãã¥ãŒãšèšå®ããŸãã¯ããã«é¢é£ä»ããããŠããã¹ã¯ãªããããããããååŸããå¿ èŠãããããšãããããŸãã
ããããããã¯ãªããšäžå¹žã§ããã Menu and settingsãªããžã§ã¯ãã®ã¹ã¯ãªããããå¿ èŠãªããŒã¿ãååŸããã«ã¯ãPlayerãªããžã§ã¯ããšåãã·ãŒã³ã«ååšããå¿ èŠããããå€ãã®äººãæ¢ã«æ°ã¥ããŠããããã«ãPlay Gameãã¿ã³ãã¯ãªãã¯ãããšãMenu Sceneã®ãã¹ãŠã®ãªããžã§ã¯ããç Žæ£ãããHierarchyã¿ãã«ãããŸã2çªç®ã®ã·ãŒã³ïŒãã¹ãã·ãŒã³ïŒã®ãªããžã§ã¯ãã衚瀺ãããŸãã
ãã®ç æ°ãåãããšã¯ãç§ãã¡ãæ©èœããã®ã«åœ¹ç«ã¡ãŸãDontDestroyOnLoadãïŒïŒ ã ã¹ã¯ãªããã®åæåæã«åŒã³åºãããAwakeïŒïŒé¢æ°ã§1ååŒã³åºãã ãã§ååã§ããããã¯ãäžçš®ã®ã³ã³ã¹ãã©ã¯ã¿ã§ãã
MainMenuã¹ã¯ãªããã«æ¬¡ã®é¢æ°ãè¿œå ããŸãã
function Awake(){ DontDestroyOnLoad(this); }
Playã¢ãŒãã«å ¥ããPlay Gameãã¯ãªãã¯ããŸãã ãã£ãããïŒ ã¡ãã¥ãŒã¯æ¶ããããã¹ãŠã®äžã«éããããŠããŸããããã¯ãã¡ãã¥ãŒãšèšå®ãªããžã§ã¯ããç Žå£ãããŠããªãããšãæå³ããŸãããŸãã[éå±€]ã¿ãã«ååšããããšãæå³ããŸãã
ããããã¡ãã¥ãŒã¯åžžã«è¡šç€ºãããŠããŸãïŒ ã泚æåã³ãããšæ Œéããå¿ èŠãããããã®ããã®ã¹ã¯ãªãããïŒãã®æåŸã®ïŒå€æŽããªãã§ãã ããã
public var welcomeLabel : GUIStyle; public var customSkin : GUISkin; public var playGameRect : Rect; public var optionsRect : Rect; public var quitRect : Rect; private var optionsMode = false; private var menuMode = true; //1 private var gameMode = false; //1 public var _bulletImpulse : float = 300; public var _shootDelay : float = 1; function Awake(){ DontDestroyOnLoad(this); } function OnGUI(){ if (Input.GetKey(KeyCode.Escape)){ //2 menuMode = true; //1 optionsMode = false; Time.timeScale = 0; //3 if(gameMode){ //1 var ml = GameObject.Find("Player").GetComponent(MouseLook); //4 ml.enabled = false; //4 } } if(menuMode){ if(!optionsMode){ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20), "Welcome",welcomeLabel); GUI.skin = customSkin; if(!gameMode){ //1 if(GUI.Button(playGameRect, "Play Game")){ menuMode = false; //1 gameMode = true; //1 Time.timeScale = 1; //3 Application.LoadLevel("Test Scene"); } }else{ if(GUI.Button(playGameRect,"Resume")){ var _ml = GameObject.Find("Player").GetComponent(MouseLook);//4 _ml.enabled = true; //4 Time.timeScale = 1; //3 menuMode = false; //1 } } if(GUI.Button(optionsRect,"Options")){ optionsMode = true; } if(GUI.Button(quitRect,"Quit")){ Application.Quit(); } }else{ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20),"Options",welcomeLabel); GUI.skin = customSkin; GUI.Label(new Rect(270, 75, 50, 20), "Bullet Impulse"); _bulletImpulse = GUI.HorizontalSlider(new Rect(50, 100, 500, 20), _bulletImpulse,10,700); GUI.Label(new Rect(560, 95, 50, 20), _bulletImpulse.ToString()); GUI.Label(new Rect(270, 125, 50, 20), "Shoot Delay"); _shootDelay = GUI.HorizontalSlider(new Rect(50, 150, 500, 20), _shootDelay,0.1,3); GUI.Label(new Rect(560, 145, 50, 20), _shootDelay.ToString()); if(GUI.Button(new Rect(20, 190, 100, 30), "<< Back")){ optionsMode = false; } } } }
//public var welcomeLabel : GUIStyle; public var customSkin : GUISkin; public var playGameRect : Rect; public var optionsRect : Rect; public var quitRect : Rect; private var optionsMode = false; private var menuMode = true; //1 private var gameMode = false; //1 public var _bulletImpulse : float = 300; public var _shootDelay : float = 1; function Awake(){ DontDestroyOnLoad(this); } function OnGUI(){ if (Input.GetKey(KeyCode.Escape)){ //2 menuMode = true; //1 optionsMode = false; Time.timeScale = 0; //3 if(gameMode){ //1 var ml = GameObject.Find("Player").GetComponent(MouseLook); //4 ml.enabled = false; //4 } } if(menuMode){ if(!optionsMode){ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20), "Welcome",welcomeLabel); GUI.skin = customSkin; if(!gameMode){ //1 if(GUI.Button(playGameRect, "Play Game")){ menuMode = false; //1 gameMode = true; //1 Time.timeScale = 1; //3 Application.LoadLevel("Test Scene"); } }else{ if(GUI.Button(playGameRect,"Resume")){ var _ml = GameObject.Find("Player").GetComponent(MouseLook);//4 _ml.enabled = true; //4 Time.timeScale = 1; //3 menuMode = false; //1 } } if(GUI.Button(optionsRect,"Options")){ optionsMode = true; } if(GUI.Button(quitRect,"Quit")){ Application.Quit(); } }else{ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20),"Options",welcomeLabel); GUI.skin = customSkin; GUI.Label(new Rect(270, 75, 50, 20), "Bullet Impulse"); _bulletImpulse = GUI.HorizontalSlider(new Rect(50, 100, 500, 20), _bulletImpulse,10,700); GUI.Label(new Rect(560, 95, 50, 20), _bulletImpulse.ToString()); GUI.Label(new Rect(270, 125, 50, 20), "Shoot Delay"); _shootDelay = GUI.HorizontalSlider(new Rect(50, 150, 500, 20), _shootDelay,0.1,3); GUI.Label(new Rect(560, 145, 50, 20), _shootDelay.ToString()); if(GUI.Button(new Rect(20, 190, 100, 30), "<< Back")){ optionsMode = false; } } } }
ã²ãŒã "ïŒïŒ{public var welcomeLabel : GUIStyle; public var customSkin : GUISkin; public var playGameRect : Rect; public var optionsRect : Rect; public var quitRect : Rect; private var optionsMode = false; private var menuMode = true; //1 private var gameMode = false; //1 public var _bulletImpulse : float = 300; public var _shootDelay : float = 1; function Awake(){ DontDestroyOnLoad(this); } function OnGUI(){ if (Input.GetKey(KeyCode.Escape)){ //2 menuMode = true; //1 optionsMode = false; Time.timeScale = 0; //3 if(gameMode){ //1 var ml = GameObject.Find("Player").GetComponent(MouseLook); //4 ml.enabled = false; //4 } } if(menuMode){ if(!optionsMode){ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20), "Welcome",welcomeLabel); GUI.skin = customSkin; if(!gameMode){ //1 if(GUI.Button(playGameRect, "Play Game")){ menuMode = false; //1 gameMode = true; //1 Time.timeScale = 1; //3 Application.LoadLevel("Test Scene"); } }else{ if(GUI.Button(playGameRect,"Resume")){ var _ml = GameObject.Find("Player").GetComponent(MouseLook);//4 _ml.enabled = true; //4 Time.timeScale = 1; //3 menuMode = false; //1 } } if(GUI.Button(optionsRect,"Options")){ optionsMode = true; } if(GUI.Button(quitRect,"Quit")){ Application.Quit(); } }else{ GUI.Label(new Rect(Screen.width / 2, 0, 50, 20),"Options",welcomeLabel); GUI.skin = customSkin; GUI.Label(new Rect(270, 75, 50, 20), "Bullet Impulse"); _bulletImpulse = GUI.HorizontalSlider(new Rect(50, 100, 500, 20), _bulletImpulse,10,700); GUI.Label(new Rect(560, 95, 50, 20), _bulletImpulse.ToString()); GUI.Label(new Rect(270, 125, 50, 20), "Shoot Delay"); _shootDelay = GUI.HorizontalSlider(new Rect(50, 150, 500, 20), _shootDelay,0.1,3); GUI.Label(new Rect(560, 145, 50, 20), _shootDelay.ToString()); if(GUI.Button(new Rect(20, 190, 100, 30), "<< Back")){ optionsMode = false; } } } }
- ã¡ãã¥ãŒã®æè»æ§ãé«ããã«ã¯ãçŸåšã®ç¶æ ãç¥ãå¿ èŠããããŸãã
- EscããŒãæŒããŠã¡ãã¥ãŒãåŒã³åºãæ©èœãã¹ã¯ãªããã«è¿œå ããŸãã
- ã²ãŒã äžã«ã¡ãã¥ãŒãåŒã³åºããšãäžæåæ¢ããå¿ èŠããããŸãããããè¡ãæãç°¡åãªæ¹æ³ã¯ã Timeã¯ã©ã¹ã®TimeScaleå€æ°ããªã»ããããããšã§ããæ¬è³ªçã«ããã®å€æ°ã¯ã²ãŒã ããã»ã¹ã®é床ãæ åœããŸããå€1ã¯éåžžã®é床ã§ã1æªæºã®å€ã¯moã1ãè¶ ãã-é«éã0-äžæåæ¢
- ããŠãå®éã«ã¹ã¯ãªããéã®çžäºäœçšã«å°éãããã®æ§é ã¯æ¬¡ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãïŒGameObjectã¯ã©ã¹ã®FindïŒïŒã¯ã©ã¹ã¯ãååã§GOãæ€çŽ¢ããŠãããè¿ãããã®åŸãè¿ãããGOïŒMouseLookã¯ã©ã¹ã§ã¯ã©ã¹ãèŠã€ããGetComponentïŒïŒé¢æ°ãç¶ããŸãïŒãããŠãããè¿ããboolã«ãã®ã¯ã©ã¹å ã®æå¹ãªå€æ°ã®å€ãå²ãåœãŠãŸããããã«ãããMouseLookã¹ã¯ãªãããæå¹ãŸãã¯ç¡å¹ã«ã§ããŸãïŒããããtrueãšfalseïŒã ã¡ã€ã³ã¡ãã¥ãŒã«ç§»åãããšãã«ãã¬ã€ã€ãŒãé ãåãããšãã§ããªãããã«ãããããã¹ãŠã®æäœãå¿ èŠã§ãïŒã²ãŒã ãäžæåæ¢ã¢ãŒãã«åãæ¿ããŠã圹ã«ç«ããªãããããããã®è¡ãã³ã¡ã³ãã¢ãŠãããŠç¢ºèªã§ããŸãïŒã
6.èšå®ãååŸãã
æåŸã«ãã¡ãã¥ãŒãšèšå®ãªããžã§ã¯ãããèšå®ãååŸããã ãã§ããã£ããã·ã¥ã©ã€ã³ã«å°éããŸããã Unity3Dãã¥ãŒããªã¢ã«ã®ã¹ã¯ãªãããåå¿è åãã«å€æŽãã-ãã¥ãŒããªã¢ã«1 ïŒ
//public var bulletImpulse = 300; //1 //public var shootSpeed : float = 1; //1 public var bullet : GameObject; public var lastShotTime : float; function Start() { lastShotTime = 0; } function FixedUpdate () { if (Input.GetKey(KeyCode.Mouse0)) { var go : GameObject = GameObject.Find("Menu and settings");//2 var shootSpeed : float = go.GetComponent(MainMenu)._shootDelay;//3 if (Time.time>(lastShotTime + shootSpeed)) { var bulletImpulse : float = go.GetComponent(MainMenu)._bulletImpulse; //3 var bull_clone : GameObject; bull_clone = Instantiate(bullet,transform.position,transform.rotation); Physics.IgnoreCollision(bull_clone.collider, collider); bull_clone.rigidbody.AddForce(transform.forward*bulletImpulse, ForceMode.Impulse); lastShotTime = Time.time; } } }
transform.rotationïŒã//public var bulletImpulse = 300; //1 //public var shootSpeed : float = 1; //1 public var bullet : GameObject; public var lastShotTime : float; function Start() { lastShotTime = 0; } function FixedUpdate () { if (Input.GetKey(KeyCode.Mouse0)) { var go : GameObject = GameObject.Find("Menu and settings");//2 var shootSpeed : float = go.GetComponent(MainMenu)._shootDelay;//3 if (Time.time>(lastShotTime + shootSpeed)) { var bulletImpulse : float = go.GetComponent(MainMenu)._bulletImpulse; //3 var bull_clone : GameObject; bull_clone = Instantiate(bullet,transform.position,transform.rotation); Physics.IgnoreCollision(bull_clone.collider, collider); bull_clone.rigidbody.AddForce(transform.forward*bulletImpulse, ForceMode.Impulse); lastShotTime = Time.time; } } }
- ããã§ã¯ãããã®å€æ°ã¯ããå¿ èŠãªãã®ã§ãå¥ã®ã¹ã¯ãªããããå€ãååŸããŸããæ確ã«ããããã«ã³ã¡ã³ãã¢ãŠãããŸããã
- ã¡ãã¥ãŒãšèšå®ãªããžã§ã¯ããååŸããŸãã
- MainMenuã³ã³ããŒãã³ããšãã®å€æ°ãåãåããŸãã
ãã¹ãŠãå®è¡ããŠç¢ºèªã§ããŸãã æãæãããªçæ°ã¯ããã·ã¥ãŒãé 延ããªãã·ã§ã³ãæå°éã«æãããšãã«å§ãŸããŸãããã·ã³ã¬ã³ããã®åŒŸäžžã®ããã«ãããŒã«ããã¬ã€ã€ãŒããé«é »åºŠã§é£ã³åºãã¯ãã§ãã ãŸããäžè¬çã«ãä»ãããªãã¯Unityã¹ã¯ãªããã®åãææããŠããã®ã§ãããªãèªèº«ããããç解ããã§ãããã
ãããã«
èšäºãèªãã åŸãäž»ã«Unityã®ã¹ã¯ãªãããã¡ã€ã³ã¡ãã¥ãŒãã¬ã³ããªã³ã°ããããããŒã«ã暪åãã«è»¢ããããã ãã«å¿ èŠã§ãããšèããå Žåãããªãã¯æ·±ãééããŠããŸããããã¯ã»ãã®äžæ»Žã§ãã 圌ãã¯ãã£ãšå€ãã®ããšãã§ããŸãã ããšãã°ã人工ç¥èœãããã°ã©ãã³ã°ããããéªšæ Œã¢ãã¡ãŒã·ã§ã³ãå¶åŸ¡ããããæçµçã«æ žç匟ãççºããããããããšãã§ããŸãããããã¯ãã¹ãŠããšã³ãžã³ãæäŸãããã®ã䜿çšããç¥èãšèœåã«äŸåããŸãã ãŸãããã®èšäºã¯ãUnityã§ã®ã¹ã¯ãªããäœæã®ãžã£ã³ã°ã«ããã¹ã¿ãŒãå§ãã人ã ã«åœ¹ç«ã¡ãåé²ããããã®ã€ã³ã»ã³ãã£ããäžãããšæããŸãã