Exemple #1
0
    public override State Update()
    {
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
        IceSlime1   iceSlime1   = (IceSlime1)iceSlime1AI.getCharacter();
        GameObject  myBody      = iceSlime1.GetGameObject();
        float       distance    = Vector3.Distance(myBody.transform.position, iceSlime1.currentTarget.transform.position);

        //如果有目标在视野内,则移动向目标,直到可以攻击到目标
        if (distance < iceSlime1.getAttr().getAttackRange())
        {
            myBody.GetComponent <Rigidbody2D>().velocity = Vector3.zero;
            return(State.SUCESSED);
        }

        Room1 room = (Room1)myBody.GetComponentInParent(typeof(Room1));
        float dx   = myBody.transform.position.x;
        float dy   = myBody.transform.position.y;

        if (dx >= room.transform.position.x + room.max_X || dx <= room.transform.position.x - room.max_X)
        {
            myBody.GetComponent <Rigidbody2D>().velocity = new Vector2(0, myBody.GetComponent <Rigidbody2D>().velocity.y);
        }
        if (dy >= room.transform.position.y + room.max_Y || dy <= room.transform.position.y - room.max_Y)
        {
            myBody.GetComponent <Rigidbody2D>().velocity = new Vector2(myBody.GetComponent <Rigidbody2D>().velocity.x, 0);
        }

        Vector3 dir = (iceSlime1.currentTarget.transform.position - myBody.transform.position).normalized;

        myBody.GetComponent <Rigidbody2D>().velocity = dir * GetAI().getCharacter().getAttr().getSpeed() * Time.deltaTime;
        return(State.RUNNING);
    }
Exemple #2
0
    private float iceBulletSpeed = 250; //冰霜弹的速度

    public override void Enter()
    {
        base.Enter();
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
        IceSlime1   iceSlime1   = (IceSlime1)iceSlime1AI.getCharacter();

        attackRate        = iceSlime1.getAttr().getAttackRate();
        iceBullet         = iceSlime1.GetIceBullet();
        currentAttackRate = 0;
    }
Exemple #3
0
 public override void Enter()
 {
     base.Enter();
     if (childrenStates.Count == 0)
     {
         IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
         childrenStates.Add(iceSlime1AI.GetLaunchIceBulletState());
         iceSlime1AI.GetLaunchIceBulletState().currentState = State.NONE;
     }
 }
Exemple #4
0
    public override void Enter()
    {
        base.Enter();

        //第一次初始化
        if (childrenStates.Count == 0)
        {
            IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
            childrenStates.Add(iceSlime1AI.GetMoveToEnemyState());
        }
    }
Exemple #5
0
    private float eyeViewDistance = 15;//视野长度

    public override void Enter()
    {
        base.Enter();
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();

        if (childrenStates.Count == 0)
        {
            AddChild(iceSlime1AI.GetConditionHavaEnemy());
            iceSlime1AI.GetConditionHavaEnemy().currentState = State.NONE;
            AddChild(iceSlime1AI.GetMoveToEnemy());
            iceSlime1AI.GetMoveToEnemy().currentState = State.NONE;
        }
    }
Exemple #6
0
    public override State Update()
    {
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
        IceSlime1   iceSlime1   = (IceSlime1)iceSlime1AI.getCharacter();
        GameObject  myBody      = iceSlime1.GetGameObject();

        attackRange = iceSlime1.getAttr().getAttackRange();
        float distance = Vector3.Distance(myBody.transform.position, iceSlime1.currentTarget.transform.position);

        if (distance < attackRange)
        {
            return(State.SUCESSED);
        }
        return(State.FAILED);
    }
Exemple #7
0
    public override State Update()
    {
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
        IceSlime1   iceSlime1   = (IceSlime1)iceSlime1AI.getCharacter();
        GameObject  myBody      = iceSlime1.GetGameObject();

        if (iceSlime1.currentTarget != null)
        {
            return(State.SUCESSED);
        }

        iceSlime1.targets = Physics2D.OverlapCircleAll(myBody.transform.position, eyeViewDistance, LayerMask.GetMask("Player"));
        Collider2D[] targets = iceSlime1.targets;
        if (targets != null && targets.Length > 0)
        {
            iceSlime1.currentTarget = targets[0];
            return(State.SUCESSED);
        }
        return(State.FAILED);
    }
Exemple #8
0
    public override State Update()
    {
        IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI();
        IceSlime1   iceSlime1   = (IceSlime1)iceSlime1AI.getCharacter();
        GameObject  myBody      = iceSlime1.GetGameObject();

        if (currentAttackRate < attackRate)
        {
            //准备发射
            currentAttackRate += Time.deltaTime;
            currentState       = State.RUNNING;
        }
        else
        {
            GameObject go           = Object.Instantiate(iceBullet, myBody.transform.position, Quaternion.identity);
            Vector3    iceBulletDir = (iceSlime1.currentTarget.transform.position - myBody.transform.position).normalized;
            go.GetComponent <Rigidbody2D>().velocity = iceBulletDir * iceBulletSpeed * Time.deltaTime;
            go.GetComponent <IceBullet>().SetOwner(iceSlime1);

            return(State.SUCESSED);
        }
        return(State.RUNNING);
    }