2D カーソルキーでのスムーズな移動

一回の移動で3移動する前提

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;
}

タグ:

unity
最終更新:2015年06月19日 22:57