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); }
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; }
public override void Enter() { base.Enter(); if (childrenStates.Count == 0) { IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI(); childrenStates.Add(iceSlime1AI.GetLaunchIceBulletState()); iceSlime1AI.GetLaunchIceBulletState().currentState = State.NONE; } }
public override void Enter() { base.Enter(); //第一次初始化 if (childrenStates.Count == 0) { IceSlime1AI iceSlime1AI = (IceSlime1AI)GetAI(); childrenStates.Add(iceSlime1AI.GetMoveToEnemyState()); } }
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; } }
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); }
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); }
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); }