float dx=0;
float dy=1f;
bool isMove=true;
bool isDead=false;
float fireTimer=0;
private BoxCollider2D boxCollider;
private Rigidbody2D rb2D;
private float inverseMoveTime;
void Start () {
boxCollider = GetComponent <BoxCollider2D> ();
rb2D = GetComponent <Rigidbody2D> ();
inverseMoveTime = 1f / moveTime;
transform.position=new Vector2( Random.Range(1,15)*3-1.5f, Random.Range(1,9)*3+1.5f);
player = GameObject.FindWithTag("Player").GetComponent<Player>();
fire=Resources.Load<GameObject>("fire");
}
void Update () {
if(isDead==true) return;
fireTimer++;
if(fireTimer>=400 && (dx!=0 || dy!=0) )
{
fireTimer=0;
GameObject tmp=GameObject.Instantiate( fire, rb2D.position+new Vector2(dx,dy) , Quaternion.identity) as GameObject;
tmp.GetComponent<fire>().dx=dx;
tmp.GetComponent<fire>().dy=dy;
}
if(isMove==false ) return;
count++;
if( Random.Range(1,1000)<990 && this.name.IndexOf("Slime")!=-1 ) return;
Vector2 start=rb2D.position;
Vector2 end =start + new Vector2(1.5f*dx,1.5f*dy);
int dd = Random.Range(1,3);
if(dd==2) dd=-1;
if( move(end) )
{
if( count>5 && Random.Range(1,100)<90 )
{
if(dx==0)
{
end =start + new Vector2(3*dd,0);
if( move(end) )
{
dx=dd;dy=0;
count=0;
}
}
else
{
end =start + new Vector2(0,3*dd);
if( move(end) )
{
dx=0;dy=dd;
count=0;
}
}
}
end =start + new Vector2(3*dx,3*dy);
StartCoroutine(SmoothMovement(end));
}
else
{
if(dx==0) { dx=dd;dy=0; }
else if(dy==0) { dx=0;dy=dd; }
}
}
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月21日 10:18