ãUnityãFlappy Birdã©ã¤ã¯ãªããã²ã¼ã ãä½æããéã®ã¡ã¢
[Unity]Flappy Birdã©ã¤ã¯ãªã²ã¼ã 試ä½ã§ç´¹ä»ããFlappy Birdã©ã¤ã¯ãªã²ã¼ã ãä½æããã¨ãã®æé ãç´¹ä»ãã¾ãã
tsubakit1.hateblo.jp
åãããªãäºãããã°ããã®ããã°ã@tsubaki_t1ã«é£çµ¡ãããã¨
è¶
åã³ã¾ãï¼ãã£ã¼ãããã¯ã»ããï¼ã
ãã®ããã¸ã§ã¯ãã®ã½ã¼ã¹ã³ã¼ãã¯ããã§å ¬éãã¦ã¾ãã
- ã¤ã¡ã¼ã¸ãã¾ã¨ãã
- é³¥ãã¸ã£ã³ãããã
- å³ã«ç§»åããå¦ç
- æ¿ãç¡éã«åºç¾ããã
- ã¹ã³ã¢ã®è¿½å
- ã¹ã³ã¢ã®è¡¨ç¤º
- ã²ã¼ã ãªã¼ãã¼ãä½ã
- å°é¢ãç¨æãã¦ã¹ã¯ãã¼ã«ãã
- èæ¯ãå¤éã¹ã¯ãã¼ã«ããã
- ã²ã¼ã ãªã¼ãã¼ããã®ãªãã©ã¤
- é¢é£
ã¤ã¡ã¼ã¸ãã¾ã¨ãã
ã¾ãèªåãä½ããã®ãã¤ã¡ã¼ã¸ãããä»åã®å ´åã¯Flappy Bird
ã¤ã¡ã¼ã¸ãããè¦ç´ ãå解ãã¦ç¾
åãã¦ã¿ãã

- éãå³ï¼åºå®ï¼ã«ç§»å
- éã¯ã¸ã£ã³ããã
- å管ã®ééããããã¨ã¹ã³ã¢
- å管ã®ééã¯ã©ã³ãã ãªä½ç½®ã«ãã£ãæ°ããã
- å管ãå°é¢ã«è§¦ãã¨ã²ã¼ã ãªã¼ãã¼
- ç»åã表示
- éãã¸ã£ã³ãã§ä¸ä¸ã«ç§»å
- éï¼ãããã¯å管ï¼ãå³ã«ç§»å
- å管ãç¡éã«çæ
- çææã«åº§æ¨ã調æ´
- å管ã¨ã®éã¯æ¥è§¦ãã
- å管ã®éãééããå¤å®
- ã¹ã³ã¢ã®å ç®å¶å¾¡
- ã¹ã³ã¢ã®è¡¨ç¤º
- ã²ã¼ã ãªã¼ãã¼ææä½ãå¹ããªããªã
çµµä½ã
ã¾ãã¯èªåã®ã¤ã¡ã¼ã¸ãã¦ããçµµãä½ã£ã¦ã¿ããä¸æ¦çµµãä½ãåããã¦ã¿ãã®ããã®æã®ç°¡åãªã²ã¼ã ãä½ãå ´åã¯ä¸çªããããããã
ä»åã¯Angry Chicken Learnããç´ æãæåãããéã§ãªãã®ãæ®å¿µã ããéã®ç»åããªãã®ã§ä»æ¹ããªãããããªãã¯ãã¡ã¤ã³ãªã®ã§ã使ç¨ãåé¡ãªããã
æå ¥ããç»åãSpriteã«ãªã£ã¦ããªãã£ãã®ã§TextureTypeããSpriteã«å¤æ´ã確ã2Dã¢ã¼ãã§å®è¡ãã¦ããã°èªåã§ãªãã®ã ããä½æ ã3Dã¢ã¼ãã§ããã¸ã§ã¯ããä½ã£ã¦ããããã確èªããã¨Cameraã®ProjectionãPerspectiveï¼3Dã¢ã¼ãï¼ã ã£ãã®ã§Orthographicï¼2Dã¢ã¼ãï¼ã«å¤æ´ãã¦ããããã®è¾ºãã¯ããã¸ã§ã¯ãä½ãæã«2Dã¢ã¼ãè¨å®ãã¦ãã°æ²»ãããºãªã®ã ãã

å¾ã¯Player_Fly0ï¼é³¥ã®ç»åï¼ã¨boadï¼æ¿ã®ç»åï¼ãã·ã¼ã³ã«é©å½ã«é ç½®ãã¦çµµä½ããé©å½ã«ä¸¦ã¹ã¦å¤§ä½ã¤ã¡ã¼ã¸éãã®ç»åãåºæ¥ãã

ä½ã£ããå®éã«ï¼æåãAnimationï¼ã§åããã¦ã¿ã¦èª¿æ´ãããåãããã¨ã§å®éã®åä½ã¤ã¡ã¼ã¸ãæ´ãã ããæ°ããã¢ã¤ãã£ã¢ãè¦ã¤ããããåé¡ç¹ãçºè¦åºæ¥ãã
ä»åã®å ´åã¯æ¿ã®ééãä¸ä¸ãã¦ãä»ã®å ´æã«ééãçºçããªããã¨ãæ¡ä»¶ã«ãªã£ã¦ããã®ã§ããã®ãããã確èªãåããã¦ãããã¡ã«ä¸¡æ¹é¸æããã®ãé¢åã«ãªã£ã¦ããã®ã§ãæ¿ãªãã¸ã§ã¯ãã®ä¸ã«æ¿ç»åãé ç½®ããäºã«ãããããã§æ¿ãªãã¸ã§ã¯ããåããã°æ¿ç»åï¼æã¨ãåãããã

é³¥ãã¸ã£ã³ãããã
ã¨ããããé ç½®ããã®ã§é³¥ãã¸ã£ã³ããããäºã«ãããè¨æ¶ã§ã¯å²ã¨æ©æã«ä¸ä¸ãã¦ããæ°ãããã®ã§ã大ãããããªãå°ãããã¦èª¿æ´ï¼ããã¯ã¹ï¼1mãå°ããæ¹ãæ©æã«åãã大ããã¨é ãï¼ãããããªãã§ãé³¥ã1mãªã®ã¯ããããã®ã§20cmããããç®æããé¢åãããã®ã§é©å½ãªGameObjectï¼å½årootï¼ã«å ¥ãã¦ãrootã®scaleä¸æ°ã«0.2ã«ãããããã§æ¿ã®ç»åãä¸ç·ã«å°ããåºæ¥ãã
å¾ã¯ã¸ã£ã³ãå¦çã®å®è£
ã
ã¸ã£ã³ãå¦çã¯
- è½ä¸
- å ¥åãåãä»ãã
- ã¸ã£ã³ã
Inspectorã®Add Componentãã¿ã³ã®æ¤ç´¢ãã¿ã³ã«rigidbodyã¨æã£ã¦rigidbody2dãé¸æãæè¿ã³ã³ãã¼ãã³ããD&Dãããã¡ãã¥ã¼ããé¸æãããããã³ããã®ã»ãã楽ãªäºã«æ°ã¥ããã追å ãããè½ä¸ããã確èªãã¦ã¿ããããOKã

å ¥åãåãããã¸ã£ã³ãããæ©è½ã追å ãããPlayerController.csã¨ãé©å½ãªC#ã¹ã¯ãªãããä½ã£ã¦é©å½ãªå ´æã«é ç½®ãã¿ãããããããã©ã°ãç«ã¦ãå¦çã追å ãããããã§ãã¿ã³ãæ¼ããã¦ããã¿ã¤ãã³ã°ã®ã¿isJumpRequestãtrueã«ãªããï¼â»1ï¼
private bool isJumpRequest;
void Update ()
{
if( Input.GetMouseButtonDown (0) ){
isJumpRequest = true;
}
}
Updateã®ä¸ã®æ¹ã«ä»¥ä¸ã®å¦çã追å ãã¦ãããããã§isJumpRequestãtrueãªãï¼ãã¿ã³ãæ¼ãããç¬éãªãï¼ã¸ã£ã³ãããããã«ãªãã
ä»ä½ã£ãã¹ã¯ãªãããé³¥ã«ä½æããã¹ã¯ãªãã(PlayerController.cs)ãã¢ã¿ãããã¦ãåä½ã確èªã
public float power = 2;
void FixedUpdate ()
{
if (isJumpRequest) {
isJumpRequest = false;
rigidbody2D.velocity = Vector3.up * power;
}
}
å²ã¨ä¸æãæãã«é£ãã§ãããã

(â»1)rigidbodyã¯Updateã¨ç°ãªãã¿ã¤ãã³ã°ã§åä½ãã¦ãããããUpdateã«rigidbody2dã®å¦çãè¨è¿°ããã¨ç¨ã«å¤±æããããã®ãããUpdateã§ã¯ãã©ã°ç«ã¦ã®ã¿ãè¡ãã
å³ã«ç§»åããå¦ç
å³ã«ç§»åããå¦çã ããæ¿èªä½ãå·¦ã«åãããã¨ã«ãããéã«é³¥ãåããã¦ãè¯ãã£ãã®ã ããç¡éã«ç§»åããã®ãæ°æã¡æªã話ãªã®ã§(â»2)ãèæ¯ã®å¤éã¹ã¯ãã¼ã«ãã³ããã®ã»ãããããããã£ã¦è©±ãããã
æ¿ãªãã¸ã§ã¯ãã«box collider2dã追å ãã¦å½ããå¤å®ã追å ããé³¥ã¨ã®å¤å®ã確ä¿ãåããããã«æ¿ãªãã¸ã§ã¯ãã«rigidbody2dã追å ããï¼â»3ï¼ãããã§ä¸ä¸ã®ã³ã©ã¤ãã¼ãæ¿ãªãã¸ã§ã¯ãä¸ã¤ã¨ãã¦è¨ç®ãããã
ãæ¿ããªãã¸ã§ã¯ãã«å·¦ã«ç§»åããå¦çãè¨è¿°ãããMoveBoad.csãç¨æãã¦ãä¸ã«è¨è¿°ã追å ã
ãã ã³ã³ã§ä¸ã¤åé¡ãçºçãããã©ããrigidbody2dã¯FixedUpdateã®ã¿ã¤ãã³ã°ã§velocityãä¸æ¸ãããã°æåãããã¯åºæ¥ãã¨ãã£ã訳ã§ã¯ç¡ãããããé³¥ã¨è¡çªããå ´åæ¿ã転ãã£ã¦ãã¾ãããã®å¯¾çã«rigidbody2dã«ãgravity scaleã0ããMassã1000ãããï¼ã¨ã«ãã大ããæ°ï¼ããFixedAngleã«ãã§ãã¯ããè¨å®ããã
public float speed = 1;
void FixedUpdate ()
{
rigidbody2D.velocity = -Vector2.right * speed;
}

(â»2)å®éã¯rigidbodyã®æ°çã«å°é¢ããèæ¯åãããæ¹ãå¹ççã ããä¸å®è·é¢ã§ãã¬ã¤ã¤ã¼ã®ä½ç½®ãåæåããã®ãé¢åã ã£ãã®ã§èæ¯ã移åããæ¹ãé¸æã
(â»3)å¥ã«è¦ããªãããã«æããããããªãããrigidbodyããªãå ´åã«ã³ã©ã¤ãã¼ãåããã¨æ¯åè¨ç®ãèµ°ãããããå ´åã«ãã£ã¦ã¯è´å½çãªã¹ãã¤ã¯ãå¼ã¶ã
æ¿ãç¡éã«åºç¾ããã
æ¿ãå®æçã«é ç½®ããå¦çã追å ãããæ¹æ³ã¯åç´ã«ä¸å®æéãã¨ã«Instantateï¼çæï¼ãç¯å²å¤ã«ç§»åãããåé¤ããã
ã¾ãã¯ä¸å®æéãã¨ã«ãªãã¸ã§ã¯ããé ç½®ããå¦çãè¨è¿°ãããBoadManager.csãç¨æããå¦çãè¨è¿°ãåç´ã«Instantateãæ¸ããªãã®ã¯ããã®å¦çãæ¡å¼µãããäºãå¤ãããï¼â»4ï¼ã
ããã§æå®ããboadObjectã«ã¯ãã¬ããåããæ¿ãªãã¸ã§ã¯ããé ç½®ããã
public GameObject boadObject;
void LocalInstantate ()
{
// ãªãã¸ã§ã¯ãã®çæãã¦åãªãã¸ã§ã¯ãã«ç»é²
GameObject obj = (GameObject)GameObject.Instantiate(boadObject) ;
obj.transform.parent = transform;
// 座æ¨ãè¨å®.
float y = Random.Range (3f, 10f);
obj.transform.localPosition = new Vector3(0, y, 0);
}
ãã®éãã¹ã§è¦ªãªãã¸ã§ã¯ããscaleãå¤æ´ãã¦ããäºãå¿ãã¦ãã®ã¾ã¾ãã¬ããåãã¦ãã¾ã£ããããçææã«ãã®ããã大ããªæ¿ãªãã¸ã§ã¯ããåºç¾ããã¦ãã¾ã£ãï¼â»5ï¼ãããã¯ãã¬ããåãããªãã¸ã§ã¯ããä¸æ¦rootç´ä¸ã«ç§»åããã¦ããApplyãããã¨ã§åé¡ãåé¿ããã
ãã®ã³ã¼ãã§æ¿ãªãã¸ã§ã¯ããçæããå ´æã¯ãBoadManagerãã¢ã¿ãããããªãã¸ã§ã¯ãã®ä¸3~10ãããã®ä½ç½®ããã®ï¼ã10ã®å¤ã¯çµµä½ãä¸ã«æ¿ãªãã¸ã§ã¯ããä¸ä¸ã«åããã¦ç»é¢å ã«åã¾ãä½ç½®ã§æ±ºããã

ä½æ¥ãå®äºãããé©å½ãªã²ã¼ã ãªãã¸ã§ã¯ãï¼å½åï¼æ¿ããã¼ã¸ã£ã¼ï¼ãä½ã£ã¦BoadManagerãç»é²ããæ¿ãã¬ãããboadObjectã«ç»é²ãåçããã°ã²ã¼ã æ¿ãªãã¸ã§ã¯ããå®æçã«æµããããã«ãªãã
ç»é¢å¤ã«åºããåé¤ããå¦çãä½æãããç»é¢å¤å¤å®ãOnBecameInvisibleãä½ç½®å¤å®çã è²ã ã¨ããããä»åã¯ç§»åããç©ã«Rendererãç¡ãã®ã§OnTriggerExit2Dã使ç¨ãã¦å¤å®ããã
float nextSpawnTime = 0;
float interval = 2;
void Update()
{
if( nextSpawnTime < Time.timeSinceLevelLoad)
{
nextSpawnTime = Time.timeSinceLevelLoad + interval;
LocalInstantate();
}
}
å ã»ã©ä½æããæ¿ã®ç®¡çãªãã¸ã§ã¯ãã«boxcollider2dã追å ããisTriggerãã«ãã§ãã¯ãboxcollider2dã®centerãsizeã使ãç»é¢å¤ã¨ãªãä½ç½®ã«å¤å®ãé ç½®ã

å¾ã¯ä¸ã®å¦çãBoadManagerã«è¿½å ãããOnTriggerEnter2Dã§ã¯ãªãOnTriggerExit2Dãªã®ã¯åãã¦ããªããªãã¸ã§ã¯ãã«åå¿ãããªãããã
void OnTriggerExit2D (Collider2D cal)
{
Destroy (cal.attachedRigidbody.gameObject);
}

(â»4)大æµã®å ´åããã®å¾ãã©ã¡ã¼ã¿è¿½å ããªãã¸ã§ã¯ãã®åç §é¢é£ã®å¦çãå ¥ããããå¥ã¡ã½ããã«ããã»ããè¯ã
(â»5)GameObject.Instantiateã¯ä¸æ¦ãªãã¸ã§ã¯ããã°ãã¼ãã«ã¹ã±ã¼ã«ã«é ç½®ããããã親ãªãã¸ã§ã¯ããscaleãå¤æ´ãã¦ããå ´åããªãã¸ã§ã¯ãã®å¤§ãããå¤åãã¦ãã¾ãã
ã¹ã³ã¢ã®è¿½å
æ¿ã®ééãæããã¨ã¹ã³ã¢ãå ç®ããä»çµã¿ã追å ããã
æ¿ã¨æ¿ã®éã«box collider2Dãä»ãããªãã¸ã§ã¯ãã追å ãã¦ãIs Triggerã«ãã§ãã¯ãå ¥ãããå½ç¶ãã®ãªãã¸ã§ã¯ãã¯æ¿ãªãã¸ã§ã¯ãã¨åãããã«ãããããã«ãæ¿ãªãã¸ã§ã¯ãä¸ã«é ç½®ãã¦ããã

ã¹ã³ã¢ã¯ãã£ããä½ã£ãã®ã§NotificationObjectã«ç»é²ãã¦ãããã¹ã³ã¢ãã²ã¼ã ã¹ãã¼ãããã¬ã¤ã¤ã¼çã®æ å ±ã¯NotificationObjectã§å¶å¾¡ãã¦ããã¨é£æºã楽ã ãinspectorãã確èªåºæ¥ãªããªã£ã¦ãã¾ãåé¡ã¯ãããâ¦
ãã¬ã¤ã¤ã¼ãééããéã«ã¹ã³ã¢ãçºçããä»çµã¿ãä½æãããAddScore.csã追å ãã¦æ¥è§¦æã«ã¹ã³ã¢è¿½å ããããå ã»ã©ã¤ãã£ãæ£ã¨æ£ã®éã®å½ããå¤å®ã«è¿½å ãã¦ããã°ãééæèªåã§ã¹ã³ã¢ãå ç®ãããã
public class GameController : SingletonMonoBehaviour<GameController>
{
public NotificationObject<int> score = new NotificationObject<int>(0);
void OnDestroy()
{
score.Dispose();
}
}
void OnTriggerEnter2D(Collider2D cal)
{
GameController.Instance.score.Value += 1;
}
ä¸ã¤æ³¨æãªã®ããåç´ã«å¤å®ã ããåãã¨ãã¬ã¤ã¤ã¼ä»¥å¤ãééããå ´åãã«ã¦ã³ãããã¦ãã¾ãç¹ã ã対çã«ééãããã®ãPlayerã¿ã°ã®å ´åã®ã¿ã¹ã³ã¢ãå ç®ããããã«è¨è¿°ãã¦ããã°ééãã¯ç¡ãããå½ç¶ãã®å¦çã追å ããããã¬ã¤ã¤ã¼ã¯Playerã¿ã°ã«è¨å®ãã¦ããå¿ è¦ãããããªã®ã§ãä¸ã®ã³ã¼ããä¸ã®ããã«å¤æ´ããã
void OnTriggerEnter2D(Collider2D cal)
{
if( cal.CompareTag("Player") ){
GameController.Instance.score.Value += 1;
}
}

ã¹ã³ã¢ã®è¡¨ç¤º
ç¾ç¶ã§ã¯ã¹ã³ã¢ãè¦ããªãã®ã§ã¹ã³ã¢ã表示ããã
3DTextã§ç»é¢ã®çãä¸ã«æ°åãé ç½®ã ScoreLabel.csãä½æãä½æãã3DTextã«ã¢ã¿ãããGameController.Instance.scoreã¨æ¥ç¶ãå¤æ´éç¥ãåãåãå¦çãè¨è¿°ãããããã§æ°å¤ãå¤æ´ããå ´åã®ã¿æ°å¤ãå¤æ´ããå¦çãèµ°ãã
NotificationObjectã®ç¹æ§ã§ãDestroyããéã¯ï¼ä¾ãã°ã·ã¼ã³åãæ¿ãã§GameControllerãå ã«ç ´æ£ããã¦ããå¯è½æ§ãèãï¼GameController.Instanceãäºåã«ãã§ãã¯ãæ¢ã«ç ´æ£ããã¦ããå ´åã¯ã¤ãã³ããã¤ãã§ã«å ¨ã¦ç ´æ£ããã¦ããã®ã§æ°ã«ããç ´æ£ã
Startã§ã¤ãã³ãç»é²åã«GameController.Instance.scoreã§ã©ãã«ãã¢ãããã¼ããã¦ããã®ã¯ãå¤ãåæååã»åæåå¾ã®ä¸¡æ¹ã«å¯¾å¿ããããã
void Start ()
{
// äºåã«æ´æ°.
UpdateScoreLabel (GameController.Instance.score.Value);
// å¤æ´éç¥ãç»é².
GameController.Instance.score.changed += UpdateScoreLabel;
}void OnDestroy ()
{
// ç»é²ããå¤æ´éç¥ã解é¤.
if (GameController.Instance != null) {
GameController.Instance.score.changed -= ChangeScore;
}
}void ChangeScore (int score){}
ChangeScoreã«ã©ãã«ãæ´æ°ããå¦çãæ´æ°ãããNotificationObjectã«ç»é²ããã¤ãã³ãã¯"Changeå¤æ°å"ã¿ããã«ååãçµ±ä¸ãã¦ããã¨è¯ãããã
void ChangeScore (int score)
{
GetComponent<TextMesh>().text = score.ToString ();
}

ã²ã¼ã ãªã¼ãã¼ãä½ã
ãã¬ã¤ã¨ã²ã¼ã ãªã¼ãã¼ã®ã¹ãã¼ããä½ããenumã§ã¹ãã¼ããå®ç¾©ãã¦ããã¦ããã®å®ç¾©ãã·ã³ã°ã«ãã³ã®GameControllerã«æãããå¤æ´éç¥ãåããããããã«NotificationObjectã§ç»é²ããã
GameController.csã«ã¹ãã¼ãã®å®ç¾©ï¼GameStateï¼ã追å ããNotificationObject<GameState> gameStateã追å ããã
public enum GameState
{
Title,
Play,
GameOver
}
public NotificationObject<GameState> gameState = new NotificationObject<GameState>( GameState.Play );
å¿ããã«OnDestroyã§åé¤ãã対象ã«è¿½å ãã¦ããã
void OnDestroy()
{
score.Dispose();
gameState.Dispose(); //<- 追å .
}
PlayerController.csã«å£ã¨æ¥è§¦ããæã«ã¹ãã¼ããGameOverã«ããå¦çã追å ãããã§ãã¬ã¤ã¤ã¼ãå£ã¨æ¥è§¦ãããã²ã¼ã ã¹ãã¼ããGameoverã¸ç§»è¡ããã
void OnCollisionEnter2D (Collision2D cal)
{
GameController.Instance.gameState.Value = GameController.GameState.GameOver;
}
ã¹ãã¼ãã®ç¶æ
ã§æåã®å¤ãããªãã¸ã§ã¯ãã«ã¹ãã¼ãå¤æ´éç¥ãåããå¦çã追å ããåã
å¿
è¦ãªå¦çãè¨è¿°ãã¦ããã
ãã¬ã¤ã¤ã¼ã®å ´åã¯ã²ã¼ã ãªã¼ãã¼æã«å
¥åãå¹ããªãããã
PlayerController.csã«ä¸ã®å¦çãè¨è¿°
void Start ()
{
// éç¥ã®ç»é²ï¼å®åæï¼
ChangeGameState (GameController.Instance.gameState.Value);
GameController.Instance.gameState.changed += ChangeGameState;
}
void OnDestroy ()
{
// éç¥ã®è§£é¤ï¼å®åæï¼
if (GameController.Instance != null)
GameController.Instance.gameState.changed -= ChangeGameState;
}
void ChangeGameState (GameController.GameState state)
{
switch (state) {
case GameController.GameState.GameOver:
// ã²ã¼ã ãªã¼ãã¼ï¼updateãåæ¢ãã¦å ¥åãåãä»ããªããã
enabled = false;
break;
}
}
å°é¢ãç¨æãã¦ã¹ã¯ãã¼ã«ãã
ãã£ãããªã®ã§å°é¢ãç¨æãããã¹ã¯ãã¼ã«ããèæ¯ãä½ãã«ã¯ãã¹ãã©ã¤ãã並ã¹ã¦ç·ç§»åãã¨ããã¯ã¹ãã£ã®UVãã¹ã¯ãã¼ã«ããæãã¤ãããä»åã¯ãã¯ã¹ãã£ã®UV移åãé¸æãå¤éã¹ã¯ãã¼ã«ãããããããªãã¹ãã©ã¤ãã®UV移åã¯ç¾ç¶åºæ¥ãªãã®ã§(â»7)ãQUADã使ç¨ãã¦å®ç¾ããã

ã¡ãã¥ã¼>Create Other>QUADã§Quadãç¨æãã¦ãã¹ã¯ãã¼ã«ãããç»åãD&Dã§ç»é²ãããä»åã®å ´åã¯Images>Stageã®ä¸ã«ããboxã使ç¨ãååã¯å°é¢ã¨ã§ããã¦ãããå°é¢ãªãã¸ã§ã¯ãã®ã¹ã±ã¼ã«ã®xãï¼ã«ãã¦æ¨ªã«ï¼åã«å¼ã伸ã°ããshaderã®tilingã3ã«ããããã1åãã表示ãããªãå ´åã¯ããã¯ã¹ãã£ã®wrapModeãRepeatã«ãªã£ã¦ããªãã
shaderã¯unlit>Textureã使ç¨ãããéæã使ããããªãã°unlit>Transparentã使ã(â»9)
public float speed = 1;
float current;
void Update () {
current += Time.deltaTime * speed;
renderer.material.SetTextureOffset("_MainTex", new Vector2(current, 0));
}



(â»8)ãããã¨æãã°ã¹ãã©ã¤ãã§ãã¹ã¯ãã¼ã«åºæ¥ãã«ã¯åºæ¥ãã
(â»9)ããã©ã¼ãã³ã¹ã¯Texture >>>>> Transparent ãªã®ã§ãå¯è½ãªéãTextureã使ãã¨è¯ãã
èæ¯ãå¤éã¹ã¯ãã¼ã«ããã
ç»é¢ã®å¥¥è¡ããä½ãããå¤éã¹ã¯ãã¼ã«ãããã奥ã®ãã®ã¯é ããæåã®ç©ã¯é«éã§åä½ããã®ã§ãç»é¢å¥¥ã«ã¹ã¯ãã¼ã«ããæ¿ãé ç½®ããã¹ãã¼ããä½éã«è¨å®ãããèæ¯ã®å ´åã¯å½ããå¤å®ãä¸è¦ãªã®ã§ã³ã©ã¤ãã¼ã¯å¤ãã¦ããã

ã¹ã¯ãã¼ã«å¦çã«ã¯speedãè¨å®ãã¦ããã®ã§ããããå¤æ´ããã°OKããã®éãå½ããå¤å®ã¯ä¸è¦ãªã®ã§å¤ãã¦ããã
ã²ã¼ã ãªã¼ãã¼ããã®ãªãã©ã¤
ã²ã¼ã ãªã¼ãã¼å¾ã«ã²ã¼ã ããªãã©ã¤ããå¦çã追å ãããããã¯StateãGameOverã®æä½ããã®ã¢ã¯ã·ã§ã³ã§ç¾å¨ã®ã·ã¼ã³ãèªã¿ç´ãã°è¯ãã
ä»åã¯GUIãé¸æãé©å½ãªã¹ã¯ãªããï¼GUIController.csï¼ãä½æããä¸ã®ã³ã¼ããè¨è¿°ããããããããã¢ãªGUIãçµã¿ããå ´åãå¤æ´éç¥ã§ãªã¶ã«ãç»é¢ãLoadLevelAditiveã«ãããããã®ã¿ã¤ãã³ã°ã§ä¸ããé£ã³åºãã¢ãã¡ã¼ã·ã§ã³ããããããã
void OnGUI ()
{
switch (GameController.Instance.gameState.Value) {
case GameController.GameState.GameOver:
GUIGameOver ();
break;
}
}void GUIGameOver ()
{
float x = Screen.width * 0.1f;
float y = Screen.height * 0.6f;
if (GUI.Button (new Rect (x, y, Screen.width - (x * 2), Screen.height * 0.3f), "RETRY")) {
Application.LoadLevel (Application.loadedLevel);
}
}
æ¬å½ã¯å°åãã«ããããã¨ããã£ããã©ã
é¢åã«ãªã£ãã®ã§ä¸æ°ã«å ¬éã
é³ã¨ããã§ã¼ãã¨ãã§ã¯ãã¨ãåãå¤ãã¯â¦åé¿ãããã°
é¢é£
tsubakit1.hateblo.jp
tsubakit1.hateblo.jp
ãªãæ¢ãã¦ã¿ãã¨Flappy Birdã®Unity3dåç¾ãã¥ã¼ããªã¢ã«ã¯æ¢ã«è²ã
ã¨ãã模æ§ã
ããããããæ¹ãå°ããã¤ç°ãªãã®ã§ãå®è£
ãè¦æ¯ã¹ãã®ãé¢ç½ãããããã¾ããã
Unity Tutorial: A Complete 2d Game (ClonyBird) - 1/7
How To Make Level Generation Like Flappy Bird In Unity3D
Flappy Bird Clone in Unity - Asset Package Download
Unity3D 㧠FlappyBird ã£ã½ãã²ã¼ã ãä½æãã¦ã¿ã ãã®1
ãUnityãFlappyBirdåæâéæº码