ãã²ãŒã éçºã«ã¯æ°åŠãå¿ èŠããšèããããšã¯ãããŸãããïŒ
ã²ãŒã éçºãšèããšããããã°ã©ãã³ã°ããããã¶ã€ã³ããªã©ã®ã¹ãã«ãæãæµ®ãã¶ãããããŸãããããããå®éã«ã¯ã²ãŒã ã®åããå¶åŸ¡ãããããã£ã©ã¯ã¿ãŒãã¹ã ãŒãºã«ç§»åããããããããã«æ°åŠã䜿ãããŠããŸãã
ãšã¯ããããæ°åŠãèŠæã ããã²ãŒã éçºã¯ç¡çããâŠããšå¿é ããå¿ èŠã¯ãããŸãããåºæ¬çãªæ°åŠã®ç¥èãããã°ãå€ãã®ã²ãŒã ãäœãããšãã§ããŸãããå°éçãªèšç®ã¯ã²ãŒã ãšã³ãžã³ãã©ã€ãã©ãªããµããŒãããŠãããããšãå€ãã§ãã
ã¶ã£ã¡ããç§èªèº«ããããªã«æ°åŠã«é¢ããç¥èã¯æã¡åãããŠããŸããïŒ
ããã§ã¯ãåå¿è åãã«ãã²ãŒã éçºã§æ¬åœã«å¿ èŠãªæ°åŠã®ã¬ãã«ãããã©ã®ããã«æŽ»çšãããã®ãããåããããã解説ããŠãããŸãã
- ã²ãŒã éçºã«æ°åŠã¯å¿
èŠïŒæ±ããããæ°åŠã¬ãã«ãšå®è·µçãªæŽ»çšäŸ
- 1.ã²ãŒã éçºã«å¿ èŠãªæ°åŠã®åéãšã¬ãã«
- 2. Unityã§æ°åŠãã©ã®ããã«äœ¿ããããïŒïŒå
·äœäŸïŒ
- â 2Dã²ãŒã ã®ãã£ã©ã¯ã¿ãŒç§»åïŒåº§æšãšãã¯ãã«ïŒ
- â¡ã·ã¥ãŒãã£ã³ã°ã²ãŒã ã®åŒŸéèšç®ïŒäžè§é¢æ°ïŒ
- â¢3Dã²ãŒã ã®ã«ã¡ã©å¶åŸ¡ïŒè¡åãšãã¯ãã«ïŒ
- â£RPGã®ãã¡ãŒãžèšç®ïŒä¹±æ°ã»ç¢ºçïŒ
- â€ã¢ã¯ã·ã§ã³ã²ãŒã ã®ãžã£ã³ããšéåïŒç©çèšç®ïŒ
- 3. æ°åŠãèŠæã§ãUnityã§ã²ãŒã éçºã¯ã§ããïŒ
- 4. ã²ãŒã éçºã«åœ¹ç«ã€æ°åŠã®åºæ¬ïŒããã ãèŠããã°OKïŒïŒ
- 5. ã²ãŒã éçºã®ããã®æ°åŠãåŠã¶ããããã®æ¹æ³
- 6. ç·æ¬ïŒã²ãŒã éçºã«ãããæ°åŠã®éèŠæ§
ã²ãŒã éçºã«æ°åŠã¯å¿ èŠïŒæ±ããããæ°åŠã¬ãã«ãšå®è·µçãªæŽ»çšäŸ
1.ã²ãŒã éçºã«å¿ èŠãªæ°åŠã®åéãšã¬ãã«
ã²ãŒã éçºã§ã¯ãæ°åŠãããŸããŸãªå Žé¢ã§äœ¿ãããŸããããã¹ãŠã®æ°åŠãé«åºŠã«çè§£ããå¿ èŠã¯ãããŸãããã²ãŒã ã®çš®é¡ãéçºã®èŠæš¡ã«ãã£ãŠãå¿ èŠãªæ°åŠã®ã¬ãã«ã¯ç°ãªããŸãã
ããã§ã¯ãåå¿è åãã«ãã©ã®ã¬ãã«ã®æ°åŠãå¿ èŠãªã®ãïŒãã解説ããããšæããŸãã
â åçŽã¬ãã«ïŒåºç€çãªæ°åŠïŒ
ãã®ã¬ãã«ã§ã§ããããšïŒ 2Dã²ãŒã ãç°¡åãªããºã«ã²ãŒã ãäœãã
ã²ãŒã éçºã®åºæ¬ãšãªãæ°åŠã¯ãäžåŠæ ¡ã¬ãã«ã®èšç®ãã§ããã°ååãªããšãå€ãã§ããç¹ã«æ¬¡ã®ãããªæ°åŠã¯ãããã«åœ¹ç«ã¡ãŸãã
- ååæŒç®ïŒè¶³ãç®ã»åŒãç®ã»æãç®ã»å²ãç®ïŒ
- äŸïŒãã¬ã€ã€ãŒã®ã¹ã³ã¢èšç®ãã¢ã€ãã ã®äŸ¡æ Œèšå®ãHPã®æžå°
- å²åã»æ¯ç
- äŸïŒãã¡ãŒãžèšç®ïŒãæµã®HPã®10%ãåãããªã©ïŒãUIã®ã¹ã±ãŒãªã³ã°
- 座æšïŒX, YïŒãšãã¯ãã«ã®åºæ¬
- äŸïŒãã£ã©ã¯ã¿ãŒã®ç§»ååŠçãæµã®è¿œè·¡AI
- ä¹±æ°ïŒã©ã³ãã ãªå€ïŒ
- äŸïŒã¢ã€ãã ãããããæµã®è¡åãã¿ãŒã³
ã»ãšãã©ã®ã²ãŒã éçºããŒã«ïŒUnity, UnrealEngineïŒã«ã¯ã座æšã®ååŸããã¹ã³ã¢èšç®ããªã©ã®æ©èœãçšæãããŠãããããæ°åŠãèŠæã§ãåé¡ãªãã²ãŒã ãäœããŸãã
â¡äžçŽã¬ãã«ïŒã²ãŒã éçºã«åœ¹ç«ã€å¿çšæ°åŠïŒ
ãã®ã¬ãã«ã§ã§ããããšïŒ 2D/3Dã¢ã¯ã·ã§ã³ã²ãŒã ãã·ã¥ãŒãã£ã³ã°ã²ãŒã ãäœãã
ã²ãŒã ãå°ãè€éã«ãªããšã次ã®ãããªæ°åŠãå¿ èŠã«ãªã£ãŠããŸãã
- äžè§é¢æ°ïŒsin, cos, tanïŒ
- äŸïŒåŒŸäžžã®çºå°è§åºŠãã«ã¡ã©ã®å転ãåãæãè»é
- è¡åïŒ3Dã²ãŒã ã§å¿
é ïŒ
- äŸïŒ3Dãã£ã©ã¯ã¿ãŒã®å転ãã¹ã±ãŒã«å€æŽãã«ã¡ã©ã®åã
- ç©çèšç®ïŒåãéåãæ©æŠãªã©ïŒ
- äŸïŒãžã£ã³ãã®æåãç©äœã®èœäžãè¡çªå€å®
- 確çã»çµ±èš
- äŸïŒã¬ãã£ã®æåºçãæµAIã®ã©ã³ãã ãªåäœ
äžè§é¢æ°ãè¡åãšèããšé£ããæãããããããŸããããå®éã®ã²ãŒã éçºã§ã¯ ããšã³ãžã³ãèšç®ããŠãããã å Žåãã»ãšãã©ã§ãã
äŸãã°ãUnityã§ã¯ Mathf.Sin()ãªã©ã®é¢æ°ã䜿ãã°ç°¡åã«èšç®ã§ããŸãã
â¢äžçŽã¬ãã«ïŒããé«åºŠãªæ°åŠïŒ
ãã®ã¬ãã«ã§ã§ããããšïŒ ç©çãšã³ãžã³ã掻çšãããªã¢ã«ãªã²ãŒã ãAIã䜿ã£ãã²ãŒã ãäœãã
ããã¬ãã«ã®ã²ãŒã éçºã«ãªããšãããã«é«åºŠãªæ°åŠã䜿ãããŸãã
- 埮åç©å
- äŸïŒãªã¢ã«ãªåãïŒæµäœã·ãã¥ã¬ãŒã·ã§ã³ãèªç¶ãªã¢ãã¡ãŒã·ã§ã³ïŒ
- ç·åœ¢ä»£æ°ïŒãã¯ãã«ãè¡åã®å¿çšïŒ
- äŸïŒ3Dã°ã©ãã£ãã¯ã¹ã®ã¬ã³ããªã³ã°ãã¹ã±ã«ãã³ã¢ãã¡ãŒã·ã§ã³
- ãã¥ãŒã©ã«ãããã¯ãŒã¯ïŒAIã®åŠç¿ïŒ
- äŸïŒAIãã£ã©ã¯ã¿ãŒã®è¡åãã¿ãŒã³ãæ©æ¢°åŠç¿ã䜿ã£ãæµã®åŒ·å
ãã®ã¬ãã«ã®æ°åŠã¯ ãåŠã°ãªããŠãã²ãŒã éçºã¯ã§ããã ã®ã§å®å¿ããŠãã ãããé«åºŠãªèšç®ã¯ç©çãšã³ãžã³ãã©ã€ãã©ãªãèªåã§åŠçããŠãããŸãã
2. Unityã§æ°åŠãã©ã®ããã«äœ¿ããããïŒïŒå ·äœäŸïŒ
ããããã¯ãç§ãæ®æ®µãã䜿çšããŠããã²ãŒã ãšã³ãžã³UnityãåæãšããŠè§£èª¬ããŸãã
Unityã䜿ã£ãã²ãŒã éçºã§ã¯ãæ°åŠãããŸããŸãªå Žé¢ã§æŽ»çšãããŸãããããããèªåã§èšç®ããå¿ èŠã¯ããã®ïŒã ãšæããããããŸãããå®éã®ãšãããUnityã«ã¯æ°åŠãç°¡åã«æ±ãããã®æ©èœãè±å¯ã«çšæãããŠãããããæ°åŠãèŠæã§ãå®å¿ããŠã²ãŒã ãäœããŸãã
ããã§ã¯ãUnityã®ã³ãŒãã亀ããªããããæ°åŠãã©ã®ããã«ã²ãŒã ã«äœ¿ãããã®ãïŒã ãå ·äœçã«è§£èª¬ããŸãã
â 2Dã²ãŒã ã®ãã£ã©ã¯ã¿ãŒç§»åïŒåº§æšãšãã¯ãã«ïŒ
䜿çšããæ°åŠïŒ 座æšç³»ããã¯ãã«ãååæŒç®
2Dã¢ã¯ã·ã§ã³ã²ãŒã ã§ãã£ã©ã¯ã¿ãŒãç§»åãããã«ã¯ãX座æšãY座æšãå€æŽ ããŸããUnityã§ã¯ Transform.positionã䜿ã£ãŠç°¡åã«å¶åŸ¡ã§ããŸãã
Unityã®ã³ãŒãäŸïŒC#ïŒ
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float speed = 5f; // ç§»åé床
void Update()
{
float moveX = Input.GetAxis("Horizontal"); // å·Šå³ã®å
¥å
transform.position += new Vector3(moveX * speed * Time.deltaTime, 0, 0);
}
}
ãã®ã³ãŒãã§ã¯ããã¬ã€ã€ãŒã® X座æšïŒæšªæ¹åïŒ ã倿Žããããšã§ç§»åãå®çŸããŠããŸãã
ãŸãããã£ã©ã¯ã¿ãŒãæãã«ç§»å ãããå Žåã¯ããã¯ãã«ã䜿ã£ãŠæ¹åãæ±ºããŸãã
Vector3 direction = new Vector3(1, 1, 0).normalized; // æãå³äžã®æ¹å
transform.position += direction * speed * Time.deltaTime;
normalizedã䜿ãããšã§ãã©ã®æ¹åã§ãäžå®ã®ã¹ããŒãã§ç§»åã§ããŸãã
â¡ã·ã¥ãŒãã£ã³ã°ã²ãŒã ã®åŒŸéèšç®ïŒäžè§é¢æ°ïŒ
䜿çšããæ°åŠïŒ äžè§é¢æ°ïŒsin, cosïŒã座æšå€æ
ã·ã¥ãŒãã£ã³ã°ã²ãŒã ã§ã¯ã匟ãããã¬ã€ã€ãŒã®åããŠããæ¹åãã«é£ã°ãå¿ èŠããããŸãããã㯠äžè§é¢æ°ïŒsin, cosïŒ ã䜿ããšç°¡åã«å®çŸã§ããŸãã
Unityã®ã³ãŒãäŸ
Unityã§ã¯transform.rightã䜿ããšããªããžã§ã¯ããåããŠããæ¹å ã«åŒŸãçºå°ã§ããŸããã€ãŸããäžè§é¢æ°ãèªåã§èšç®ããªããŠãOKã£ãŠããšã§ããã
ãããç¹å®ã®è§åºŠã§åŒŸãçºå°ãããå Žåã¯Mathf.CosãMathf.Sinã䜿ããŸãã
float angle = 45f * Mathf.Deg2Rad; // è§åºŠãã©ãžã¢ã³ã«å€æ
Vector2 direction = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle));
rb.velocity = direction * speed;
ãã®æ¹æ³ã䜿ããšãä»»æã®è§åºŠã§åŒŸãçºå°ã§ããŸãã
â¢3Dã²ãŒã ã®ã«ã¡ã©å¶åŸ¡ïŒè¡åãšãã¯ãã«ïŒ
䜿çšããæ°åŠïŒ ãã¯ãã«ãè¡å倿
3Dã²ãŒã ã§ã¯ããã¬ã€ã€ãŒã®åŸãã«ã«ã¡ã©ãé
眮ãããã¬ã€ã€ãŒã®åãã«è¿œåŸãããããšãäžè¬çã§ãããã㯠è¡åèšç®ããã¯ãã« ã䜿ã£ãŠå¶åŸ¡ã§ããŸãããUnityã«ã¯ Transform.LookAt() ãšãã䟿å©ãªé¢æ°ãããã®ã§ç°¡åã«å®è£
ã§ããŸãã
Unityã®ã³ãŒãäŸ
ãã®ã³ãŒãã䜿ããšãã«ã¡ã©ãåžžã«ãã¬ã€ã€ãŒãèŠã€ãã圢ã§è¿œåŸããããã«ãªããŸãã
Unityã§ã¯ãã«ã¡ã©ã®å転ãç§»åã颿°ã䜿ã£ãŠç°¡åã«å¶åŸ¡ã§ãããããè¡åèšç®ãæèããå¿ èŠã¯ã»ãŒãããŸããã
â£RPGã®ãã¡ãŒãžèšç®ïŒä¹±æ°ã»ç¢ºçïŒ
䜿çšããæ°åŠïŒ ä¹±æ°ã確ç
RPGã§ã¯ãæ»ææã«ãã¯ãªãã£ã«ã«ãããããçºçããããšããããŸããUnityã§ã¯ãRandom.valueïŒ0ã1ã®ä¹±æ°ïŒ ã䜿ãããšã§ç¢ºççãªã€ãã³ããç°¡åã«å®è£ ã§ããŸãã
Unityã®ã³ãŒãäŸ
ãã®ã³ãŒãã§ã¯ã20%ã®ç¢ºçã§ãã¡ãŒãžã2åã«ãªãåŠçãããŠããŸãã
â€ã¢ã¯ã·ã§ã³ã²ãŒã ã®ãžã£ã³ããšéåïŒç©çèšç®ïŒ
䜿çšããæ°åŠïŒ ååŠãéåèšç®
Unityã«ã¯ ç©çãšã³ãžã³ãçµã¿èŸŒãŸããŠãããããèªåã§ç©çèšç®ãããå¿ èŠã¯ãããŸãããäŸãã°ããã£ã©ã¯ã¿ãŒããžã£ã³ããããå ŽåãRigidbody2Dã® AddForce()ã䜿ãã°ç°¡åã«å®è£ ã§ããŸãã
Unityã®ã³ãŒãäŸ
ãã®ã³ãŒãã§ã¯ãã¹ããŒã¹ããŒãæŒããšãã¬ã€ã€ãŒãäžæ¹åã«ãžã£ã³ãããŸãã
Unityã®ç©çãšã³ãžã³ã¯èªåã§éåãé©çšããŠããããããéåã®èšç®ãèªåã§è¡ãå¿ èŠã¯ãããŸããã
ãã®ããã«ãUnityã«ã¯æ°åŠãæèããã«äœ¿ãã䟿å©ãªæ©èœãå€ãçšæãããŠããŸããåºæ¬çãªèãæ¹ãçè§£ããŠããã°ãæ°åŠãèŠæã§ãåé¡ãªãã²ãŒã ãäœãããšãã§ããŸãã
3. æ°åŠãèŠæã§ãUnityã§ã²ãŒã éçºã¯ã§ããïŒ
ãã²ãŒã éçºã«ã¯æ°åŠãå¿ èŠããšèããšãæ°åŠãèŠæãªäººã¯äžå®ã«æãããããããŸãããããããUnityã«ã¯æ°åŠãæèããã«äœ¿ãã䟿å©ãªæ©èœããããããããŸãïŒ
ãã®ç« ã§ã¯ããæ°åŠãèŠæã§ãã²ãŒã éçºãç¶ããããã®æ¹æ³ãã玹ä»ããŸãã
â Unityã®äŸ¿å©ãªæ©èœã掻çšãã
Unityã«ã¯ãæ°åŠã®ç¥èããªããŠã䜿ãã䟿å©ãªé¢æ°ãããŒã«ãå€ãçšæãããŠããŸãã
(1) ç©çèšç®ã¯ Rigidbody ã«ä»»ãã
Unityã«ã¯ç©çãšã³ãžã³ãçµã¿èŸŒãŸããŠããããªããžã§ã¯ãã®åããç°¡åã«ã·ãã¥ã¬ãŒã·ã§ã³ã§ããŸãã
äŸãã°ããã£ã©ã¯ã¿ãŒããžã£ã³ãããéã®éåèšç®ããç©ãèœäžããåŠçã¯ãRigidbody2Dã䜿ãã°èªåã§åŠçããŠãããŸãã
æ°åŠçãªèšç®ãããªããŠããRigidbodyãéåãé©çšããŠãããã®ã§ãèœäžãèªç¶ã«åçŸãããŸãã
(2) è§åºŠãæ¹åã¯transformã䜿ãã°OKïŒ
3Dã²ãŒã ã§ãªããžã§ã¯ããå転ãããããç¹å®ã®æ¹åãåããããããã«ã¯è¡åèšç®ãäžè§é¢æ°ãå¿ èŠã§ãããUnityã«ã¯äŸ¿å©ãªé¢æ°ããããŸãã
- transform.LookAt(target.position); â ãªããžã§ã¯ããã¿ãŒã²ããã®æ¹åã«åãã
- Quaternion.Euler(0, 90, 0); â X/Y/Z軞ã®è§åºŠãæå®ããŠå転ããã
- transform.forward * speed; â çŸåšåããŠããæ¹åã«ç§»åããã
ãã®ãããªé¢æ°ã䜿ãããšã§ãè€éãªæ°åŠãæèããã«åŠçãã§ããããã«ãªã£ãŠããŸãã
â¡æ°åŠãèŠæã§ã䜿ããåŠç¿æ¹æ³
ãæ°åŠãèŠæã ããã²ãŒã éçºã¯é£ããã»ã»ã»ããšæããŠãã人ã§ãã以äžã®æ¹æ³ãããããã§ãã
(1) ãŸãã¯ãå ¬åŒããç¥ãã ãã§OKïŒ
æ°åŠã®ãã¹ãŠãçè§£ããå¿ èŠã¯ãããŸããããã²ãŒã ã§ãã䜿ãå ¬åŒã ãã èŠããŠããã°å€§äžå€«ã§ãïŒ
äŸãã°ã以äžã®ãããªã·ã³ãã«ãªå ¬åŒãç¥ã£ãŠããã ãã§ãã¹ã ãŒãºã«ã²ãŒã ãäœããŸãã
- é床 = è·é¢ ÷ æéïŒãã£ã©ã®ç§»åéåºŠãæ±ºããïŒ
- sin, cos ã䜿ããšè§åºŠã«åºã¥ããåããã§ããïŒåŒŸã®çºå°æ¹åïŒ
- ä¹±æ°ã§ã©ã³ãã ãªåããäœããïŒæµã®åºçŸããã¡ãŒãžèšç®ïŒ
â ãæ°åŠã®æå³ãæ·±ãçè§£ããããšããªãã ã®ãã³ãïŒç§ãæ£çŽçè§£ããŠãªãããšãå€ãã§ããå ¬åŒã ããããããšãã«äœ¿ãã ãšãã圢ã§èŠããŠããã°OKã
(2) Unityã®ãµã³ãã«ã³ãŒãã詊ããŠã¿ã
æ°åŠã®ç¥èããªããŠããUnityã§å®éã«åãããªããåŠã¶ã®ã广çã§ãã
äŸãã°ãã·ã¥ãŒãã£ã³ã°ã²ãŒã ãäœããããªããUnityå ¬åŒã®ãµã³ãã«ãããžã§ã¯ãã詊ããŠã¿ãã®ãè¯ãæ¹æ³ã§ãã
Unityã®å ¬åŒãµã³ãã«ãããžã§ã¯ãïŒç¡æïŒ
- FPS MicrogameïŒFPSã²ãŒã ã®ãµã³ãã«ïŒ
- Karting MicrogameïŒã«ãŒãã¬ãŒã¹ã®ãµã³ãã«ïŒ
- 2D PlatformerïŒ2Dã¢ã¯ã·ã§ã³ã®ãµã³ãã«ïŒ
ããããæ¹é ããªããããã©ããã£ãŠåããŠããã®ãïŒããçè§£ãããšãæ°åŠãèŠæã§ãæèŠçã«åŠã¹ãŸãã
UnityLearnã«ã¯ãåå¿è ã®æ¹ã察象ãšããæ§ã ãªãã¥ãŒããªã¢ã«ãçšæãããŠããã®ã§ãã©ãã©ãæãä»ããŠã¿ããã®ã¢ãªã§ãããã
(3) èŠèŠçã«åŠã¹ãããŒã«ã䜿ã
ãæ°åŒã ãèŠãŠãæå³ãããããªãïŒããšãã人ã¯ãèŠèŠçã«åŠã¹ãããŒã«ã䜿ãã®ãããããã§ãã
- DesmosïŒç¡æã®ãªã³ã©ã€ã³é¢æ°ã°ã©ãããŒã«ïŒ
- GeoGebraïŒ3Dã®æ°åŠãèŠèŠçã«åŠã¹ãïŒ
- PhETã·ãã¥ã¬ãŒã·ã§ã³ïŒç©çã»æ°åŠã®åããã·ãã¥ã¬ãŒã·ã§ã³ã§ããïŒ
äŸãã°ããäžè§é¢æ°ããã©ã®ããã«åãã«åœ±é¿ããã®ããã°ã©ãã§èŠãã°çŽæçã«çè§£ã§ããŸãã
â¢ã²ãŒã éçºãããªããå°ããã€æ°åŠãèŠãã
æåããæ°åŠãå®ç§ã«çè§£ããããšããå¿ èŠã¯ãããŸãããUnityã䜿ã£ãŠå®éã«ã²ãŒã ãäœããªãããå¿ èŠã«ãªã£ããšãã«å°ããã€åŠã¶ã®ãæã广çã§ãã
(1) ãŸãã¯ã·ã³ãã«ãªã²ãŒã ãäœã
ãããªãé«åºŠãª3Dã²ãŒã ãäœãã®ã§ã¯ãªãããæ°åŠã®ç¥èãã»ãŒäžèŠãªã²ãŒã ã ããå§ãããšè¯ãã§ãããã
- ç°¡åãª2Dã²ãŒã ïŒãããã¯åŽ©ãã2Dã·ã¥ãŒãã£ã³ã°ïŒ
- ç©çãšã³ãžã³ã䜿ã£ãã²ãŒã ïŒãã³ããŒã«ãããŒã«è»¢ããïŒ
ãã®èŸºãåå¿è ã®æ¹ã«ã¯ãããããããªãã§ããããã
â Unityã®æ©èœã䜿ãã°ãæ°åŠã®ç¥èããªããŠãäœããã²ãŒã ããããããããŸãïŒ
(2) å¿ èŠã«ãªã£ããæ°åŠã調ã¹ã
äŸãã°ãæµãã£ã©ããã¬ã€ã€ãŒã«åãã£ãŠåãããããšæã£ããšãã«ããæ¹åã®èšç®ã£ãŠã©ããããã ããïŒããšèª¿ã¹ãã°OKã§ãã
æåã«ãæ°åŠãå匷ããŠããã²ãŒã ãäœããã®ã§ã¯ãªãããã²ãŒã ãäœããªããå¿ èŠãªæ°åŠãèŠããã ã»ããæ«æããã«ç¶ããããŸãã
4. ã²ãŒã éçºã«åœ¹ç«ã€æ°åŠã®åºæ¬ïŒããã ãèŠããã°OKïŒïŒ
ãã²ãŒã éçºã«ã¯æ°åŠãå¿ èŠããšèšãããŠãããã¹ãŠã®æ°åŠãåŠã¶å¿ èŠã¯ãããŸãããå®éã«ã²ãŒã ãäœãããã§æäœéç¥ã£ãŠãããšäŸ¿å©ãªæ°åŠããåå¿è åãã«è§£èª¬ããŸãã
â 座æšïŒã²ãŒã ã®äžçãçè§£ããïŒ
1. 座æšç³»ãšã¯ïŒ
Unityã§ã¯ããªããžã§ã¯ãã®äœçœ®ã X, Y, Z ã®3ã€ã®æ°å€ïŒåº§æšïŒã§è¡šããŸãã
- 2Dã²ãŒã : XïŒæšªïŒãš YïŒçžŠïŒã§è¡šã
- 3Dã²ãŒã : XïŒæšªïŒãYïŒçžŠïŒãZïŒå¥¥è¡ãïŒã§è¡šã
äŸãã°ããã£ã©ã¯ã¿ãŒãç»é¢ã®äžå€®ã«ããå ŽåïŒ
transform.position = new Vector3(0, 0, 0); // (X=0, Y=0, Z=0)
ãã¬ã€ã€ãŒãå³ã«ç§»åãããã«ã¯ãX座æšãå¢ãããŸãã
transform.position += new Vector3(1, 0, 0);
ã²ãŒã éçºã§ã¯ãã座æšã®å€ãå€ããã ããã§ãªããžã§ã¯ããåãããŸãã
â¡ãã¯ãã«ïŒç§»åãæ¹åã®èšç®ïŒ
1. ãã¯ãã«ã£ãŠäœïŒ
ãã¯ãã«ãšã¯ãã倧ããããšãæ¹åããæã£ãæ°å€ã®ããšã§ãã
äŸãã°ïŒ
- (1, 0, 0) â å³ã«åãããã¯ãã«
- (0, 1, 0) â äžã«åãããã¯ãã«
Unityã§ã¯ããªããžã§ã¯ãã®ç§»åã«ãã¯ãã«ã䜿ããŸãã
2. ãã¯ãã«ã䜿ã£ãç§»åïŒãã¬ã€ã€ãŒã®ç§»åïŒ
Vector3 moveDirection = new Vector3(1, 0, 0); // 峿¹åã«ç§»å
transform.position += moveDirection * Time.deltaTime;
ãã©ã®æ¹åã«ãã©ããããé²ãããããã¯ãã«ã§è¡šããšäŸ¿å©ã§ãã
â¢äžè§é¢æ°ïŒãã£ã©ã®å転ã匟ã®çºå°ïŒ
1. è§åºŠã䜿ã£ãŠåãã
äŸãã°ãã·ã¥ãŒãã£ã³ã°ã²ãŒã ã§ãç¹å®ã®è§åºŠã§åŒŸãçºå°ãããå Žåãäžè§é¢æ°ã䜿ããŸãã
45åºŠã®æ¹åã«åŒŸãé£ã°ãããå ŽåïŒ
float angle = 45f * Mathf.Deg2Rad; // è§åºŠãã©ãžã¢ã³ã«å€æ
Vector2 direction = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle)); // æ¹åãã¯ãã«
rigidbody.velocity = direction * speed;
ãcosããšãsinãã䜿ãã°ãè§åºŠãæå®ããŠç§»åã§ããïŒ
â£ä¹±æ°ïŒæµã®åºçŸãã©ã³ãã ãªåãïŒ
ã²ãŒã ã§ã¯ãæµã®åºçŸäœçœ®ãã¢ã€ãã ã®å¹æãªã©ãã©ã³ãã ã«æ±ºããããšããããããŸãã
1. ä¹±æ°ã䜿ã£ãæµã®ã©ã³ãã åºçŸ
float randomX = Random.Range(-5f, 5f);
float randomY = Random.Range(0f, 3f);
Vector3 spawnPosition = new Vector3(randomX, randomY, 0);
Instantiate(enemyPrefab, spawnPosition, Quaternion.identity);
ãRandom.Range()ãã䜿ãã°ãç°¡åã«ã©ã³ãã ãªå€ãäœããïŒ
â€ç©çèšç®ïŒãžã£ã³ããéåã®åœ±é¿ïŒ
Unityã«ã¯ç©çãšã³ãžã³ãããã®ã§ãååŠã®ç¥èããªããŠãRigidbodyã䜿ãã°OKã§ãã
1. ãžã£ã³ãã®å®è£
rb.velocity = new Vector2(rb.velocity.x, 5f); // äžã«åãã£ãŠãžã£ã³ã
â Rigidbodyã䜿ãã°ãéåãèªåã§é©çšããŠãããã®ã§ãç©çã®èšç®ã¯äžèŠã§ãã
5. ã²ãŒã éçºã®ããã®æ°åŠãåŠã¶ããããã®æ¹æ³
ããã§ã¯ãããããã®ã²ãŒã éçºåŠç¿æ¹æ³ãšããŠUdemyãšããã°ã©ãã³ã°ã¹ã¯ãŒã«ãšãã2ã€ã®åŠç¿ææ®µã玹ä»ããŸãã
â Udemyã§èªåã®ããŒã¹ã§åŠã¶
Udemyãšã¯ïŒ
Udemyã¯ããªã³ã©ã€ã³ã§å¥œããªæéã«åŠç¿ã§ãããã©ãããã©ãŒã ã§ããã²ãŒã éçºã«é¢ããã³ãŒã¹ãè±å¯ã§ãUnityã®åºç€ããæ°åŠã掻çšããå¿çšãŸã§ åŠã¶ããšãã§ããŸãã
Udemyãããããããçç±
- èªåã®ããŒã¹ã§åŠã¹ãïŒå¥œããªæéã«å匷ã§ããïŒ
- è²·ãåãåãªã®ã§ã³ã¹ããè¯ãïŒã»ãŒã«æãªãæ°ååã§è²·ããïŒ
- ã²ãŒã éçºã«ç¹åããã³ãŒã¹ãå å®
ããããã®Unityã³ãŒã¹
Udemyã«ãããããããã®Unityã³ãŒã¹ã«ã€ããŠã¯äžèšã®èšäºã«ãŠç޹ä»ããŠããã®ã§ãæ¯éåèã«ããŠãã ããã
â ãŸãã¯ã»ãŒã«ãçã£ãŠãæ°ã«ãªãã³ãŒã¹ã1ã€è²·ã£ãŠã¿ãã®ãããããã§ãã
â¡ããã°ã©ãã³ã°ã¹ã¯ãŒã«ã§çæéã§ç¿åŸãã
ããã°ã©ãã³ã°ã¹ã¯ãŒã«ãšã¯ïŒ
ããã°ã©ãã³ã°ã¹ã¯ãŒã«ã¯ãè¬åž«ããçŽæ¥åŠã¹ãåŠç¿ã¹ã¿ã€ã«ã§ãã
æ°åŠãèŠæã§ãã質åããªããåŠç¿ã§ããã®ã§ãçæéã§å¹çããã¹ãã«ã身ã«ã€ããã人ã«ãããã ã§ãã
ããã°ã©ãã³ã°ã¹ã¯ãŒã«ã®ã¡ãªãã
- 質åãã§ããã®ã§ãã€ãŸããã«ãã
- ã«ãªãã¥ã©ã ãçµãŸããŠããã®ã§ãåŠç¿ã®æ¹åæ§ã«è¿·ããªã
- å°±è·ã»è»¢è·ã®ãµããŒããããã¹ã¯ãŒã«ãå€ã
ããããã®ã¹ã¯ãŒã«
ããããã®ãªã³ã©ã€ã³ã¹ã¯ãŒã«ã«ã€ããŠããäžèšã®èšäºã«ãŠç޹ä»ããŠããã®ã§ããããæ¬è °ãå ¥ããŠã²ãŒã éçºãåŠãã§ã¿ããå Žåã«ãã§ãã¯ããŠã¿ãŠãã ããã
â è²»çšã¯ãããããçæéã§ã²ãŒã éçºã®ã¹ãã«ã身ã«ã€ããããªãã¹ã¯ãŒã«ãæé©ã§ãã
â¢ã©ã¡ããéžã¶ã¹ãïŒ
| åŠç¿ã¹ã¿ã€ã« | Udemy | ããã°ã©ãã³ã°ã¹ã¯ãŒã« |
|---|---|---|
| è²»çš | å®ãïŒã»ãŒã«æãªãæ°ååïŒ | é«ãïŒæ°äžåãæ°åäžåïŒ |
| åŠç¿ããŒã¹ | èªåã®ããŒã¹ã§OK | ã¹ã±ãžã¥ãŒã«ç®¡çãå¿ èŠ |
| 質åã»ãµããŒã | åºæ¬çã«èªå·±è§£æ±º | è¬åž«ã«è³ªåã§ãã |
| åããŠãã人 | ã³ã¹ããæããŠåŠã³ãã人 | çæéã§ãã£ããåŠã³ãã人 |
ããŸãã¯Udemyã§ç¬åŠãããã£ãšåŠã³ãããªã£ããã¹ã¯ãŒã«ãæ€èšããã ãšããæµããããããã§ãïŒ
6. ç·æ¬ïŒã²ãŒã éçºã«ãããæ°åŠã®éèŠæ§
ãããŸã§ãUnityã䜿ã£ãã²ãŒã éçºã«åœ¹ç«ã€æ°åŠã®åºæ¬çã«ã€ããŠè§£èª¬ããŠããŸããã
ãã²ãŒã éçºã«æ°åŠãå¿ èŠããšèããšé£ããæãããããããŸããããå®éã«å¿ èŠãªã®ã¯åºæ¬çãªæŠå¿µã ãã§ããããã¹ãŠã®æ°åŠãçè§£ããå¿ èŠã¯ãããŸããã
â ã²ãŒã éçºã«å¿ èŠãªæ°åŠã®ãŸãšã
ä»ååŠãã å å®¹ãæ¯ãè¿ããšãã²ãŒã éçºã§éèŠãªæ°åŠã¯ä»¥äžã®ããã«æŽçã§ããŸãã
| æ°åŠã®åé | 掻çšäŸ |
|---|---|
| åº§æš | ãªããžã§ã¯ãã®äœçœ®ç®¡çïŒ2Dã»3D空éïŒ |
| ãã¯ãã« | ãã£ã©ã®ç§»åãæ¹åã®èšç® |
| äžè§é¢æ° | è§åºŠã䜿ã£ãç§»åïŒåŒŸã®çºå°ãã«ã¡ã©ã®åè»¢ïŒ |
| ä¹±æ° | æµã®ã¹ããŒã³äœçœ®ãã¢ã€ãã ã®ã©ã³ãã é 眮 |
| ç©çèšç® | ãžã£ã³ããéåãè¡çªåŠç |
ãæ°åŠããšèããšè€éãªæ°åŒãæãæµ®ãã¹ãã¡ã§ãããUnityã§ã¯ãããã®æ°åŠãçŽæçã«æ±ããæ©èœãçšæãããŠãããããé£ããèããªããŠã倧äžå€«ã§ãã
â¡ã²ãŒã éçºã«æ°åŠã掻ããã³ã
1. å¿ èŠãªãšãã«åŠã¶
æåããæ°åŠãå®ç§ã«çè§£ããããšããã®ã§ã¯ãªããã²ãŒã ãäœããªããå°ããã€åŠã¶ã®ããã¹ãã§ãã
ãããããåããäœãããããšæã£ããšãã«ããã®åããäœãã®ã«å¿ èŠãªæ°åŠã調ã¹ããšããæµãã§é²ãããšãå®è·µçãªç¥èã身ã«ã€ããŸãã
2. Unityã®æ©èœã掻çšãã
Unityã«ã¯ãæ°åŠã®ç¥èããªããŠã䜿ãã䟿å©ãªæ©èœïŒTransformãVector3ãPhysicsãªã©ïŒãè±å¯ã«çšæãããŠããŸãã
æå㯠ããšããããåãããŠã¿ãã ããšãåªå ããçè§£ã远ãã€ããªããŠãå®è£ ããŠã¿ãã®ã倧åã§ãã
3. ã²ãŒã ãäœããªããå¿çšãã
ä»å玹ä»ãããã¥ãŒããªã¢ã«ã®ããã«ãç°¡åãªã²ãŒã ãäœããªããæ°åŠã掻çšããç·Žç¿ ããããšãç¥èãå®çãããããªããŸãã
äŸãã°ã次ã®ãããªå¿çšãèããŠã¿ããšãããã«çè§£ãæ·±ãŸããŸãã
- æµããã¬ã€ã€ãŒã«åãã£ãŠå éããïŒé床ã®èª¿æŽïŒ
- 匟ã®è»éãæŸç©ç·ã«ããïŒéåã®èæ ®ïŒ
- ã«ã¡ã©ããã¬ã€ã€ãŒã远åŸããïŒäœçœ®è£éã®æŽ»çšïŒ
â¢ãŸãšãïŒæ°åŠã峿¹ã«ã€ããã°ãã²ãŒã éçºã®å¹ ãåºããïŒ
ãã²ãŒã éçºãããããã©ãæ°åŠãèŠæã ããç¡çããã»ã»ã»ããšæã£ãŠãã人ããåºæ¬çãªæ°åŠã®ç¥èã ãã§ååã«ã²ãŒã ãäœããããšãåãã£ãã®ã§ã¯ãªãã§ããããïŒ
æ°åŠã¯ã²ãŒã ã®åããããèªç¶ã«ãããé¢çœãããããã®åŒ·åãªããŒã«ã§ãã
æåã¯èŠææèããããããããŸããããå°ããã€å®è·µãéããããšã§ãæ°ã¥ãã°æ°åŠãåœããåã®ããã«äœ¿ãããªããããã«ãªããŸãã
ãæ°åŠã䜿ãããªããŠããã£ãšé¢çœãã²ãŒã ãäœãããïŒã
ãããªæ°æã¡ãå°ãã§ãèœçããããæ¬¡ã®ã¹ããããžé²ãæºåã¯ã§ããŠããŸãã
è²ã ãšè©Šè¡é¯èª€ããŠãã²ãŒã éçºã楜ããã§ãã ããã




