void Update() //업데이트문 전체 추가 { if (Input.GetMouseButtonDown(0) || (Input.touchCount > 2 && Input.GetTouch(0).phase == TouchPhase.Began)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; //레이케스트와 충돌한 대상의 레이어가 Click, Block, Enemy 인지 체크한다. if (Physics.Raycast(ray, out hitInfo, 100f, layerMask)) { //광선과 충돌한 대상의 레이어 정보를 맴버변수에 담는다. int layer = hitInfo.transform.gameObject.layer; if (layer == LayerMask.NameToLayer(clickLayer)) { attackpoint++; fsmEnemy = hitInfo.collider.transform.GetComponent <FSMEnemy>(); Vector3 dest = hitInfo.point; movePoint.transform.position = dest; movePoint.gameObject.SetActive(true); //FSMBase 의 SetState 메소드를 호출한다. if (attackpoint % 2 == 1) { SetState(CharacterState.Attack1); } else if (attackpoint % 2 == 0) { SetState(CharacterState.Attack2); } } } } }
// Use this for initialization void Start() { enemy = GetComponent <FSMEnemy>(); colliders = enemy.Colliders; player = GameSceneManager.Instance.Player; stringBuilder = new StringBuilder(64); }
//부활 딜레이 public void ReviveEvent() { //현재 자신의 상태가 대기 또는 공격 상태일 경우 if (CHState == CH_STATE.MS_Wait || CHState == CH_STATE.MS_Attack) { string enemyLayer = "Enemy"; int layerMask = LayerMask.GetMask(enemyLayer); Collider[] colliders = Physics.OverlapSphere(transform.position, 3.0f, layerMask); // 3.0 반지름만큼 적 레이어를 확인하여 충돌자 배열에 집어넣음 int Count = 0; //반복문을 돌면서 죽은 마리수를 확인 for (int i = 0; i < colliders.Length; ++i) { FSMEnemy enemy = colliders[i].GetComponent<FSMEnemy>(); if (enemy.IsDead()) { Count++; } } //3명 이상이라면 부활 가능이므로 부활 코루틴 실행 if (Count > 2) SetState(CH_STATE.MS_Revive); } }
// Use this for initialization void Start() { fsmEnemy = this.GetComponent <FSMEnemy>(); max_Health = fsmEnemy.maxHP; cur_Health = fsmEnemy.currentHP; InvokeRepeating("decreasehealth", 1f, 1f); }
//gets the stats of FSM behaviour tree public void InspectFSM(FSMEnemy t_character) { TreeStats charStats = t_character.stats; NodesEvalText.text = "" + charStats.getNodes(); ConditionsCheckText.text = "" + charStats.getConditions(); ActionsPerformText.text = "" + charStats.getActions(); }
private void OnTriggerEnter(Collider other) { if (other.CompareTag("Enemy")) { FSMEnemy enemy = other.GetComponent <FSMEnemy>(); enemy.TakeDamage(); } }
private void OnTriggerEnter(Collider other) { if (other.CompareTag("Enemy")) { IsAttack = true; } if (Player.IsWhirlwind() && Player.m_Anim.GetCurrentAnimatorStateInfo(0).IsName("WhirlwindShot") && other.CompareTag("Enemy")) { FSMEnemy Enemy = other.GetComponent <FSMEnemy>(); Enemy.TakeDamage(); } }
public FSMEnemy Initialize(Enemy enemy) { FSMEnemy fsmCopy = Instantiate(this); for (int i = 0; i < serializedStates.Length; ++i) { EnemyState stateCopy = Instantiate(serializedStates[i]); stateCopy.Initialize(i, enemy); fsmCopy.states.Add(stateCopy.Name, stateCopy); } fsmCopy.currentStateName = ""; return(fsmCopy); }
protected virtual void Awake() { data = DataTableManager.singleton.GetEnemyData(typeID); rb2d = GetComponent <Rigidbody2D>(); defaultDrag = rb2d.drag; defaultMass = rb2d.mass; statistics = new StatisticSystem(data.Attributes, statusModifiers); statistics[StatisticType.Hp] = statistics[StatisticType.MaxHp]; if (fsm) { fsm = fsm.Initialize(this); } }
public void OnRevive() { string enemyLayer = "Enemy"; int layerMask = LayerMask.GetMask(enemyLayer); Collider[] colliders = Physics.OverlapSphere(transform.position, 3.0f, layerMask); for (int i = 0; i < colliders.Length; ++i) { FSMEnemy enemy = colliders[i].GetComponent <FSMEnemy>(); if (enemy.CHState == CH_STATE.MS_Dead) { enemy.gameObject.SetActive(false); enemy.gameObject.SetActive(true); } } }
public void OnBashAttack() { MemoryPoolManager.Instance.CreateObject("BashEffect", this.transform); StartCoroutine(mainCamera.PlayShake(0.3f, 0.25f)); int layerMask; layerMask = LayerMask.GetMask(player.enemyLayer); Collider[] colliders = Physics.OverlapSphere(this.transform.position, 2.0f, layerMask); for (int i = 0; i < colliders.Length; ++i) { FSMEnemy fsmEnemy = colliders[i].GetComponent <FSMEnemy>(); fsmEnemy.TakeDamage(); } }
void Update() { if (Input.touchCount > 0) { touchesOld = new GameObject[touchList.Count]; touchList.CopyTo(touchesOld); touchList.Clear(); foreach (Touch touch in Input.touches) { Ray ray = Camera.main.ScreenPointToRay(touch.position); RaycastHit hit; if (Physics.Raycast(ray, out hit, 100f, layerMask)) { int layer = hit.transform.gameObject.layer; GameObject recipient = hit.transform.gameObject; touchList.Add(recipient); if (touch.phase == TouchPhase.Began && layer == LayerMask.NameToLayer(enemyLayer)) { attackpoint++; fsmEnemy = hit.collider.transform.GetComponent <FSMEnemy>(); Vector3 dest = hit.point; movePoint.transform.position = dest; movePoint.gameObject.SetActive(true); Debug.Log("Click"); if (attackpoint % 2 == 1) { SetState(CharacterState.Attack1); } else if (attackpoint % 2 == 0) { SetState(CharacterState.Attack2); } } } } } }