AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

ゼビウスもどき開発(5)

f:id:yasu9780:20160126062307j:plain

進捗

  • 対地攻撃が可能
  • 地上敵の上では照準が赤くなる
  • 地上敵の爆破後はクレータになる
  • バキュラ追加(3面に配置)
  • ザカート追加
  • 4面にアンドアジェネシス追加(まだ攻撃はできない)
  • キャラチップを16x16に変更

残項目

ブラスター

地上攻撃のブラスターは、弾が照準まで届く前はBoxCollider2Dのenableをfalseにして、triggerを無効にしている。照準まで届いたらenableをtrueにして、地上敵とのtriggerを有効にして、破壊している。

	void Update () {
		min = Camera.main.ViewportToWorldPoint (new Vector2 (0, 0));
		max = Camera.main.ViewportToWorldPoint (new Vector2 (1, 1));
		if(transform.position.y > max.y || transform.position.y < min.y)
		{
			GetComponent<BoxCollider2D>().enabled=false;
			Destroy(gameObject);
		}
		else
		if( transform.position.y>startPos.y+3.4f )
		{
			GetComponent<BoxCollider2D>().enabled=false;
			Destroy(gameObject);
		}
		else
		if( transform.position.y>=startPos.y+2.6f )
		{
			GetComponent<BoxCollider2D>().enabled=true;
	        float xpos = transform.position.x+0f * speed*Time.deltaTime;
	        float ypos = transform.position.y+1f * speed*Time.deltaTime;
			Vector3 playerPos = new Vector3 (xpos, ypos,0f);
			transform.position = playerPos;
		}
		else
		{
			GetComponent<BoxCollider2D>().enabled=false;
	        float xpos = transform.position.x+0f * speed*Time.deltaTime;
	        float ypos = transform.position.y+1f * speed*Time.deltaTime;
			Vector3 playerPos = new Vector3 (xpos, ypos,0f);
			transform.position = playerPos;
		}
		if(sr && (animStart+(int)animIndex)<=animEnd)
		{
			sr.sprite = GM.sp2[animStart+(int)animIndex];
			animIndex+=2f*speed*Time.deltaTime;
		}
	}

照準は、地上敵とonTriggerが起きている間は赤くするが、FixedUpdateで毎回元に戻している。
本来は、OnTriggerExit2Dで、照準を戻せばいいのだけど、地上敵を攻撃している場合、破壊してDestroyするのでOnTriggerExitが発生しない場面があるので、こういう仕様にしている。
Unityの実行順序は、

FixedUpdate → Physics → OnMouse → Update → LastUpdate

となるので、FixedUpdateでいったん照準を戻しても、Physicsで、OnTriggerStayが発生していれば、再度赤を点灯させることができる。