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

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

SpriteでMapを動的に表示する(5)

f:id:yasu9780:20150618151344p:plain

スライムを増やして、プレイヤーも追加。
プレイヤーはカーソルキーで移動。
キーを押すと、24dot移動しますが、移動自体はコルーチンを使って、スムーズに移動。
コルーチンで移動中に、キー入力を見てると斜めに移動できるので、
コルーチンで移動中はキーは見ない。
移動可能かどうかはLinecastで判定してるけど、重くないのかな?
昔ながらに配列で持ってもいいとは思いますが。

void Update () {
	if(!isMove) return;
	float ax = Input.GetAxisRaw("Horizontal");
	float ay = Input.GetAxisRaw("Vertical");
	if(ax!=0 || ay!=0 )
	{
		Vector2 start=rb2D.position;
		Vector2 end  =start + new Vector2(3*ax,3*ay);
		if( move(end) )
		{
    			StartCoroutine(SmoothMovement(end));
		}
	}
}
bool move(Vector2 end)
{
	Vector2 start=rb2D.position;
	boxCollider.enabled = false;
	RaycastHit2D hit = Physics2D.Linecast(start,end, blockingLayer);
	boxCollider.enabled = true;
	if(hit.transform==null) return true;
	return false;
}
private IEnumerator SmoothMovement(Vector2 end)
{
	isMove=false;
	float sqrRemainingDistance = (rb2D.position-end).sqrMagnitude;
	while(sqrRemainingDistance > float.Epsilon)
	{
		Vector2 newPostion = Vector2.MoveTowards(rb2D.position, end, inverseMoveTime * Time.deltaTime);
		rb2D.MovePosition (newPostion);
		sqrRemainingDistance = (rb2D.position - end).sqrMagnitude;
		yield return null;
	}
	isMove=true;
}
広告を非表示にする