Beispiel #1
0
    public override State Update()
    {
        IceSlime2AI iceSlime2AI = (IceSlime2AI)GetAI();
        IceSlime2   iceSlime2   = (IceSlime2)iceSlime2AI.getCharacter();
        GameObject  myBody      = iceSlime2.GetGameObject();
        float       distance    = Vector3.Distance(myBody.transform.position, iceSlime2.currentTarget.transform.position);

        //如果有目标在视野内,则移动向目标,直到可以攻击到目标
        if (distance < iceSlime2.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 = (iceSlime2.currentTarget.transform.position - myBody.transform.position).normalized;

        myBody.GetComponent <Rigidbody2D>().velocity = dir * GetAI().getCharacter().getAttr().getSpeed() * Time.deltaTime;
        return(State.RUNNING);
    }
Beispiel #2
0
 public override void Enter()
 {
     base.Enter();
     if (childrenStates.Count == 0)
     {
         IceSlime2AI iceSlime2AI = (IceSlime2AI)GetAI();
         childrenStates.Add(iceSlime2AI.GetLaunchIceLaserState());
         iceSlime2AI.GetLaunchIceLaserState().currentState = State.NONE;
     }
 }
Beispiel #3
0
    public override State Update()
    {
        IceSlime2AI  iceSlime2AI  = (IceSlime2AI)GetAI();
        IceSlime2    iceSlime2    = (IceSlime2)iceSlime2AI.getCharacter();
        GameObject   myBody       = iceSlime2.GetGameObject();
        LineRenderer lineRenderer = myBody.GetComponent <LineRenderer>();
        Vector3      startPos     = Vector3.zero;
        Vector3      endPos       = Vector3.zero;

        if (currentAttackRate < attackRate)
        {
            //准备发射
            currentAttackRate += Time.deltaTime;
            startPos           = myBody.transform.position;
            endPos             = iceSlime2.currentTarget.transform.position;
            lineRenderer.SetPosition(0, startPos);
            lineRenderer.SetPosition(1, endPos);
            isFire = false;
        }
        else
        {
            startPos = Vector3.zero;
            endPos   = Vector3.zero;
            lineRenderer.SetPosition(0, startPos);
            lineRenderer.SetPosition(1, endPos);
            if (!isFire)
            {
                //发射
                iIceLaser = Object.Instantiate(iceLaser, myBody.transform.position, Quaternion.identity);
                iIceLaser.GetComponent <IceLaser>().SetOwner(iceSlime2);
                float   angle = Vector3.Angle(myBody.transform.up, (iceSlime2.currentTarget.transform.position - myBody.transform.position).normalized);
                Vector3 cro   = Vector3.Cross(myBody.transform.up, (iceSlime2.currentTarget.transform.position - myBody.transform.position).normalized);
                float   dot   = Vector3.Dot(cro.normalized, myBody.transform.forward);
                angle *= dot;
                iIceLaser.transform.localRotation = Quaternion.Euler(new Vector3(0, 0, angle));
                iIceLaser.GetComponent <Rigidbody2D>().velocity = iIceLaser.transform.up * iceLaserExpandSpeed * Time.deltaTime;
                isFire = true;
            }
            else
            {
                if (iIceLaser.gameObject == null)
                {
                    if (currentRecoverTime < recoverTime)
                    {
                        currentRecoverTime += Time.deltaTime;
                    }
                    else
                    {
                        return(State.SUCESSED);
                    }
                }
            }
        }
        return(State.RUNNING);
    }
Beispiel #4
0
 public override void Enter()
 {
     base.Enter();
     //第一次初始化
     if (childrenStates.Count == 0)
     {
         IceSlime2AI iceSlime2AI = (IceSlime2AI)GetAI();
         childrenStates.Add(iceSlime2AI.GetMoveToTheEnemyState());
         iceSlime2AI.GetMoveToTheEnemyState().currentState = State.NONE;
     }
 }
Beispiel #5
0
    // Update is called once per frame
    public override State Update()
    {
        IceSlime2AI iceSlime2AI = (IceSlime2AI)GetAI();
        IceSlime2   iceSlime2   = (IceSlime2)iceSlime2AI.getCharacter();
        GameObject  myBody      = iceSlime2.GetGameObject();

        float distance = Vector3.Distance(myBody.transform.position, iceSlime2.currentTarget.transform.position);

        if (distance < iceSlime2.getAttr().getAttackRange())
        {
            return(State.SUCESSED);
        }
        return(State.FAILED);
    }
Beispiel #6
0
    public override void Enter()
    {
        base.Enter();
        IceSlime2AI iceSlime2AI = (IceSlime2AI)GetAI();

        if (childrenStates.Count == 0)
        {
            AddChild(iceSlime2AI.GetConditionHavaEnemy());
            AddChild(iceSlime2AI.GetDistanceCondition());
            AddChild(iceSlime2AI.GetLaunchIceLaser());
            iceSlime2AI.GetConditionHavaEnemy().currentState = State.NONE;
            iceSlime2AI.GetDistanceCondition().currentState  = State.NONE;
            iceSlime2AI.GetLaunchIceLaser().currentState     = State.NONE;
        }
    }
Beispiel #7
0
    public override void Enter()
    {
        base.Enter();
        IceSlime2AI iceSlime2AI = (IceSlime2AI)GetAI();
        IceSlime2   iceSlime2   = (IceSlime2)iceSlime2AI.getCharacter();
        GameObject  myBody      = iceSlime2.GetGameObject();

        attackRate         = iceSlime2.getAttr().getAttackRate();
        iceLaser           = iceSlime2.GetIceLaser();
        currentRecoverTime = 0;
        currentAttackRate  = 0;
        LineRenderer lineRenderer = myBody.GetComponent <LineRenderer>();
        Vector3      startPos     = Vector3.zero;
        Vector3      endPos       = Vector3.zero;

        lineRenderer.SetPosition(0, startPos);
        lineRenderer.SetPosition(1, endPos);
    }
Beispiel #8
0
    public override void Enter()
    {
        base.Enter();

        IceSlime2AI iceSlime2AI = (IceSlime2AI)GetAI();

        if (childrenStates.Count == 0)
        {
            AddChild(iceSlime2AI.GetConditionHavaEnemy());
            Decorator_NotNode decorator_NotNode = new Decorator_NotNode();
            AddChild(decorator_NotNode);
            decorator_NotNode.AddChild(iceSlime2AI.GetDistanceCondition());
            iceSlime2AI.GetDistanceCondition().currentState = State.NONE;
            decorator_NotNode.currentState = State.NONE;
            AddChild(iceSlime2AI.GetMoveToTheEnemy());
            iceSlime2AI.GetConditionHavaEnemy().currentState = State.NONE;
            iceSlime2AI.GetMoveToTheEnemy().currentState     = State.NONE;
        }
    }
Beispiel #9
0
    public override State Update()
    {
        IceSlime2AI iceSlime2AI = (IceSlime2AI)GetAI();
        IceSlime2   iceSlime2   = (IceSlime2)iceSlime2AI.getCharacter();
        GameObject  myBody      = iceSlime2.GetGameObject();

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

        iceSlime2.targets = Physics2D.OverlapCircleAll(myBody.transform.position, eyeViewDistance, LayerMask.GetMask("Player"));
        Collider2D[] targets = iceSlime2.targets;
        if (targets != null && targets.Length > 0)
        {
            iceSlime2.currentTarget = targets[0];
            return(State.SUCESSED);
        }
        return(State.FAILED);
    }