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); }
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); }
// 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); }
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); }
// Use this for initialization void Start() { for (int i = 0; i < iceSlimeBody.Count; i++) { IceSlime iceSlime = new IceSlime(iceSlimeBody[i], new IceSlimeAI(), new IceSlimeAttr(30, 5, 300, 1, 25f, new IceSlimeAttrStrategy()), ice); iceSlimeBody[i].SetActive(false); remainEnemys.Add(iceSlime); } for (int i = 0; i < iceSlime1Body.Count; i++) { IceSlime1 iceSlime1 = new IceSlime1(iceSlime1Body[i], new IceSlime1AI(), new IceSlime1Attr(30, 5, 300, 1, 8f, 8f, new IceSlime1AttrStrategy()), iceBullet); remainEnemys.Add(iceSlime1); iceSlime1Body[i].SetActive(false); } for (int i = 0; i < iceSlime2Body.Count; i++) { IceSlime2 iceSlime2 = new IceSlime2(iceSlime2Body[i], new IceSlime2AI(), new IceSlime2Attr(30, 5, 300, 1, 20, new IceSlime2AttrStrategy()), iceLaser); remainEnemys.Add(iceSlime2); iceSlime2Body[i].SetActive(false); } InitEnemys(); inDoor.SetActive(true); inDoor.GetComponent <SpriteRenderer>().sprite = CloseDoorSprite; inDoor.GetComponent <InDoor>().SetRoom(this); outDoor.SetActive(true); outDoor.GetComponent <SpriteRenderer>().sprite = CloseDoorSprite; outDoor.tag = "Wall"; outDoor.layer = LayerMask.NameToLayer("Wall"); for (int i = 0; i < prePos.Length; i++) { prePos[i] = -1; } for (int i = 0; i < spawnPostions.Count; i++) { GameObject iTarget = Instantiate(target, spawnPostions[i].transform.position, Quaternion.identity); targets.Add(iTarget); } }
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); }
public void SetCharacter(IceSlime2 owner) { this.owner = owner; }
public void SetOwner(IceSlime2 owner) { this.owner = owner; }