一回の移動で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;
}
最終更新:2015年06月19日 22:57