//普通怪物的血条 public void ShowHpBar(GameObject go) { hpBarGo.SetActive(true); //显示普通怪血条 bossHpBarGo.SetActive(false); //隐藏Boss血条 //修改血条属性, Enermy enermy = go.GetComponent <Enermy>(); hpSlider = hpBarGo.transform.GetComponent <UISlider>(); nameLabel = hpBarGo.transform.GetComponentInChildren <UILabel>(); nameLabel.text = enermy.monsterName; GameObject deadMarkGo = hpBarGo.transform.Find("DeadMark").gameObject; int hp = enermy.hp > 0 ? enermy.hp : 0; //Debug.Log("ShowHpBar hp=" + hp); hpSlider.value = hp / enermy.OriginHp; if (!enermy.isDead) //敌人未死亡 { deadMarkGo.SetActive(false); } else //敌人已死亡 { deadMarkGo.SetActive(true); //注意:因为该脚本绑定在多个gameObject上,所以会对多个gameObject判断 if (this.gameObject.activeInHierarchy) { StartCoroutine("DestroyHpBar"); } } }
void TakeDamageResponse(string guid, int hp, int hurtNum) { GameObject enermyGo = null; enermyGoDict.TryGetValue(guid, out enermyGo); HUDText hudText = null; if (null != enermyGo) { if (enermyGo.GetComponent <Enermy>()) { Enermy enermy = enermyGo.GetComponent <Enermy>(); if (enermy == null) { Debug.LogError("the enermy is not exist!"); return; } enermy.isSyncEnermy = false; hudText = enermy.hudText; } else if (enermyGo.GetComponent <Boss>()) { Boss boss = enermyGo.GetComponent <Boss>(); if (boss == null) { Debug.LogError("the boss is not exist!"); return; } boss.isSyncBoss = false; hudText = boss.hudText; } } }
public void SetAttack(Enermy e) { checkEnermy = false; attack = true; animator.SetBool ("attack", true); targetMon = e; }
// needed to reset status when monster dead public void ResetAttack() { checkEnermy = true; attack = false; animator.SetBool ("attack", false); targetMon = null; }
void SpawnEnermy() { int ranEnermy = UnityEngine.Random.Range(0, 3); // L M S 비행기 세가지 종류 int ranPoint = UnityEngine.Random.Range(0, 9); //다섯가지 포인트 + 4가지 우측좌측 추가 //프리팹 생성 GameObject enermy = objectManager.MakeObj(enermyObjs[ranEnermy]); /*Instantiate(enermyObjs[ranEnermy], * spawnPoints[ranPoint].position, * spawnPoints[ranPoint].rotation);*/ enermy.transform.position = spawnPoints[ranPoint].position; Rigidbody2D r2d = enermy.GetComponent <Rigidbody2D>(); Enermy enermyLogic = enermy.GetComponent <Enermy>(); enermyLogic.player = player; enermyLogic.objectManager = objectManager; if (ranPoint == 5 || ranPoint == 6) //Right Spawn { enermy.transform.Rotate(Vector3.back * 45); r2d.velocity = new Vector2(enermyLogic.speed * (-1), -1); } else if (ranPoint == 7 || ranPoint == 8) //Left Spawn { enermy.transform.Rotate(Vector3.forward * 45); r2d.velocity = new Vector2(enermyLogic.speed, -1); } else // Front Spawn { r2d.velocity = new Vector2(0, enermyLogic.speed * (-1)); } }
public override void OnRobotDeath(RobotDeathEvent e) { if (e.Name == target.name) { target = null; } }
void UpdateTarget() { if (GameManager.endGame) { return; } GameObject[] enermies = GameObject.FindGameObjectsWithTag("Enermy"); float shortestDir = Mathf.Infinity; GameObject nearestEnermy = null; foreach (var enermy in enermies) { float dis = Vector3.Distance(transform.position, enermy.transform.position); if (dis < shortestDir) { nearestEnermy = enermy; shortestDir = dis; } } if (nearestEnermy != null && shortestDir <= range) { target = nearestEnermy.transform; targetEnermy = nearestEnermy.GetComponent <Enermy>(); } else { target = null; } }
void Damage(Transform enermy) { Enermy e = enermy.GetComponent <Enermy>(); if (e != null) { e.TakeDamage(dame); } }
public void Init(Vector3 vel, float dmg, Vector3 pos, Enermy par) { velocity = vel; damage = dmg; position = pos; parent = par; transform.position = position; }
public void Init(Transform t, Vector3 vel, float dmg, Vector3 pos, Enermy par) { target = t; velocity = vel; position = pos; parent = par; damage = dmg; speed = vel.magnitude; }
public bool CheckRangeAttack() { if( !bInit) { Debug.Log("AttackDetect doesn't initial"); } enermiesInAttRange.Clear(); bDetect = false; targetEnermy = null; RaycastHit hit; Vector3 orig = new Vector3 (transform.position.x, transform.position.y + fHeight, transform.position.z); for(int i = -8; i < 8; i+=2) { Vector3 v = new Vector3 (); Vector3 p = Vector3.Cross (Vector3.up, transform.forward.normalized); v = transform.forward.normalized * nRange + (p.normalized * i); Debug.DrawRay(orig, v, Color.red); if ( Physics.Raycast (orig, (v.normalized), out hit, nRange)) { if (hit.collider.gameObject.layer == collideLayer) { Enermy target = hit.collider.gameObject.GetComponent<Enermy>(); if( target && !target.IsDead() ) { targetEnermy = hit.collider.gameObject.GetComponent<Enermy>(); bDetect = true; } bool bFound = false; foreach(Enermy e in enermiesInAttRange) { if( e== target) bFound = true; } if(!bFound){ enermiesInAttRange.Add(target); Debug.Log("the Enermy Added in the list"); } } } } return enermiesInAttRange.Count > 0; }
protected override void OnStart() { enermiesInAttRange = new List<Enermy>(); checkEnermy = true; monLayer = LayerMask.NameToLayer ("Monster"); animator = GetComponent<Animator> (); collider = GetComponent<CapsuleCollider> (); targetMon = null; currentBaseState = 0; attdetect = GetComponent<AttackDetect>(); attdetect.Init(7,collider.height /2, monLayer); StartCoroutine (CheckRangeAttack ()); }
public override void OnScannedRobot(ScannedRobotEvent e) { if (!IsTeammate(e.Name)) { target = new Enermy(e); double firePower = Math.Min((600 / e.Distance), 3); if (Energy < firePower) { fsm.enqueEvent(FiniteStateMachine.Events.lowEnergy); } if (e.Energy == 0 || (e.Energy < 45 && e.Energy < Energy)) { fsm.enqueEvent(FiniteStateMachine.Events.ramable); } if (e.Energy > 45 || e.Energy > Energy) { fsm.enqueEvent(FiniteStateMachine.Events.notRamable); } if (Energy > firePower) { fsm.enqueEvent(FiniteStateMachine.Events.highEnergy); } fsm.Transition(); if (fsm.gameState == FiniteStateMachine.GameState.attack) { Attack(e, firePower); } if (fsm.gameState == FiniteStateMachine.GameState.ram) { Ram(e, firePower); } if (fsm.gameState == FiniteStateMachine.GameState.flee) { Flee(e, firePower); } } else { if (e.Distance < 80) { moveDirection *= -1; } } }
//SyncEnermyHpResponse void SyncEnermyHpResponse(Dictionary <byte, object> parameters) { object o = null; string guid = ""; parameters.TryGetValue((byte)ParameterCode.EnermyHp, out o); int hp = (int)o; parameters.TryGetValue((byte)ParameterCode.EnermyGuid, out o); guid = o.ToString(); parameters.TryGetValue((byte)ParameterCode.EnermyHurtNum, out o); int hurtNum = (int)o; Debug.Log("SyncEnermyHpResponse hurtNum/hp=" + hurtNum + "/" + hp); GameObject enermyGo = null; enermyGoDict.TryGetValue(guid, out enermyGo); if (enermyGo != null) { if (enermyGo.GetComponent <Enermy>()) //普通怪物 { Enermy enermy = enermyGo.GetComponent <Enermy>(); if (enermy == null) { Debug.LogError("the enermy is not exist!"); return; } enermy.hp = hp; enermy.isSyncEnermy = false; HpBarController.Instance.ShowHpBar(enermyGo);//显示敌人血条 } else if (enermyGo.GetComponent <Boss>()) { Boss boss = enermyGo.GetComponent <Boss>(); if (boss == null) { Debug.LogError("the boss is not exist!"); return; } boss.hp = hp; boss.isSyncBoss = false; HpBarController.Instance.ShowBossHpBar(enermyGo);//显示敌人血条 } } }
public void Attack(Enermy sender, float dmg) { if (!isProtect) { hp -= dmg; isProtect = true; m_source.clip = hitSound; m_source.Play(); m_velocity = Vector3.zero; centerSprite.transform.DOShakePosition(1f, 0.5f); var seq = DOTween.Sequence(); seq.Append(centerSprite.DOColor(Color.gray, 0.5f).SetEase(Ease.InOutCubic)); seq.Append(centerSprite.DOColor(Color.white, 0.5f).SetEase(Ease.InOutCubic)); seq.Append(centerSprite.DOColor(Color.gray, 0.5f).SetEase(Ease.InOutCubic)); seq.Append(centerSprite.DOColor(Color.white, 0.5f).SetEase(Ease.InOutCubic)); seq.Append(centerSprite.DOColor(Color.gray, 0.5f).SetEase(Ease.InOutCubic)); seq.Append(centerSprite.DOColor(Color.white, 0.5f).SetEase(Ease.InOutCubic)); seq.AppendCallback(delegate { isProtect = false; }); var hitE = Instantiate(hitEffect); hitE.transform.parent = transform; hitE.transform.localPosition = Vector3.zero; if (hp <= 0 && hp > -10f) { Subtitles.show("You're died. But in this prototype. You can keep playing."); } } else { m_source.clip = hitSound; m_source.Play(); var hitE = Instantiate(hitEffect); hitE.transform.parent = transform; hitE.transform.localPosition = Vector3.zero; } }
/* * * Estimate Distance Between This(player) to Target(Enermy) * return value = Distance */ public float EstimateDistance(Player From, Enermy To) { if (From == null) { Debug.Log("Player value is Null "); return(99.0f); } float result = 0.0f; Vector3 playerPos = From.transform.position; Vector3 targetPos = To.transform.position; //result = Mathf.Sqrt( // Mathf.Abs(playerPos.x - targetPos.x)+ Mathf.Abs(playerPos.y - targetPos.y)+ Mathf.Abs(playerPos.z - targetPos.z) ); // result = playerPos - targetPos; Debug.Log("result Distance : " + result); return(result); }
public void Init(float explosionDuration, float dmg, Vector3 pos, Enermy par) { velocity = Vector3.zero; position = pos; parent = par; damage = dmg; var col = GetComponent <CircleCollider2D>(); if (col != null) { float radius = col.radius; col.radius = radius * 0.5f; DOTween.To(() => col.radius, (x) => col.radius = x, radius, explosionDuration).OnComplete(delegate() { col.enabled = false; Destroy(gameObject, 10f); }); } transform.position = position; }
public void SetEnermyHPUI(Enermy enermy) { UILabel txtHp = Tools.GetComponentInChildByPath<UILabel>(mGobjTargetUI, "hp/txt"); txtHp.text = enermy.hpCur + "/" + enermy.hpMax; UISlider sliderHp = Tools.GetComponentInChildByPath<UISlider>(mGobjTargetUI, "hp"); sliderHp.value = (float)enermy.hpCur / enermy.hpMax; }
private void Start() { enermy = GetComponent <Enermy>(); target = Path.paths[0]; }
void Boom() { if (!Input.GetButton("Fire2")) { return; } if (isBoomTime) { return; } if (boom == 0) { return; } boom--; isBoomTime = true; gameManager.UpdateBoomIcon(boom); //Effect Visible boomEffect.SetActive(true); Invoke("OffBoomEffect", 4f); //Remove Enermy //FindGameGobject s WithTag => 게임 내에 태그를 가진 오브젝트 들을불러오는 함수 //GameObject[] enermyArr = GameObject.FindGameObjectsWithTag("Enermy"); // find 계열 함수는 성능하락을 유발 GameObject[] enemiesL = objectManager.GetPool("EnemyL"); GameObject[] enemiesM = objectManager.GetPool("EnemyM"); GameObject[] enemiesS = objectManager.GetPool("EnemyS"); for (int i = 0; i < enemiesL.Length; i++) { /*Enermy eneLogic = enermyArr[i].GetComponent<Enermy>(); * eneLogic.OnHit(1000);*/ if (enemiesL[i].activeSelf) { Enermy eneLogic = enemiesL[i].GetComponent <Enermy>(); eneLogic.OnHit(1000); } } for (int i = 0; i < enemiesM.Length; i++) { if (enemiesM[i].activeSelf) { Enermy eneLogic = enemiesM[i].GetComponent <Enermy>(); eneLogic.OnHit(1000); } //Enermy eneLogic = enermyArr[i].GetComponent<Enermy>(); //eneLogic.OnHit(1000); } for (int i = 0; i < enemiesS.Length; i++) { if (enemiesS[i].activeSelf) { Enermy eneLogic = enemiesS[i].GetComponent <Enermy>(); eneLogic.OnHit(1000); } //Enermy eneLogic = enermyArr[i].GetComponent<Enermy>(); //eneLogic.OnHit(1000); } //Remove Bullet //GameObject[] bullets = GameObject.FindGameObjectsWithTag("EnermyBullet"); GameObject[] bulletsA = objectManager.GetPool("BulletEnemyA"); GameObject[] bulletsB = objectManager.GetPool("BulletEnemyB"); for (int i = 0; i < bulletsA.Length; i++) { if (bulletsA[i].activeSelf) { bulletsA[i].SetActive(false); } //Destroy(bullets[i]); } for (int i = 0; i < bulletsB.Length; i++) { if (bulletsB[i].activeSelf) { bulletsB[i].SetActive(false); } //Destroy(bullets[i]); } }
public void EnermyDead(Enermy e) { enermyList.Remove(e); deadEnermyList.Add(e); }
public void RegisterEnermy(Enermy e) { enermyList.Add(e); }
public void Reset() { bDetect = false; enermiesInAttRange.Clear(); targetEnermy = null; }
void OnControllerColliderHit(ControllerColliderHit hit) { if(hit.moveDirection.y < 0 && Mathf.Abs(hit.moveDirection.x) < 0.3f ){ g_gobjCurStepOn = hit.gameObject; } // killed when hit enermy if(hit.collider.CompareTag("enermy")){ isInBattleState = true; Enermy enermy = hit.collider.gameObject.GetComponent<Enermy>(); curTarget = enermy; updataState(new IActorAction(EFSMAction.HERO_ATTACK)); gameView.ShowTrargetUI(); enermy.curTarget = this; enermy.updataState(new IActorAction(EFSMAction.NPC_ATTACK)); } }
void GiveDamage(Enermy gameObject, int push) { Vector3 forceDir = gameObject.transform.position - transform.position; gameObject.ApplyDamage( forceDir.normalized * 10, defaultDMG); Debug.Log ("Player is Sending DMG : " + defaultDMG.ToString ()); }
public void Start() { obj = GameObject.Find("Enermy"); _Enermy = obj.GetComponent <Enermy> (); }