public void StartCoolTimer(SkillType _skillType, float _coolTime) { skillCheckInfo[(int)_skillType].state = SkillState.End; skillCheckInfo[(int)_skillType].coolTimer = _coolTime; fsmPlyer.SetState(CharacterBasicState.Idle, CharacterAnimationState.Idle); }
public override bool Execute(GameObject target) { FSMPlayer player = target.GetComponent <FSMPlayer>(); if (player != null) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit HitInfo; if (Physics.Raycast(ray, out HitInfo, 100f, player.Layer)) { int layer = HitInfo.transform.gameObject.layer; //클릭한 레이어의 값 if (layer == LayerMask.NameToLayer(player.clickLayer)) //땅을 클릭했을 때 { Vector3 dest = HitInfo.point; //마우스로 찍은 위치 player.Point.transform.position = dest; if (!player.IsWhirlwind()) { player.SetState(CH_STATE.Run); //휠윈드 상태가 아닐 때는 달리자 } return(true); } else if (layer == LayerMask.NameToLayer(player.enemyLayer)) //적을 클릭 했을 때 { player.Enemy = HitInfo.collider.GetComponent <FSMEnemy>(); //적의 컴퍼넌트를 가져온다. player.Point.SetParent(player.Enemy.transform); player.Point.transform.localPosition = Vector3.zero; if (!player.IsWhirlwind() && !player.Enemy.IsDead()) { if (Vector3.Distance(player.transform.position, player.Point.transform.position) <= player.State.AttackRange) { player.SetState(CH_STATE.Attack); } else { player.SetState(CH_STATE.AttackRun); } } return(false); } } } return(true); }
public void PlayWhirlwind() { if (CommonSkill(0, false, true)) { SoundManager.Instance.PlaySFX("Whirlwind_start", 0.3f); player.SetState(CH_STATE.Whirlwind); } }
private void UpdateMoving() { // Check This character able to move if (fsmPlyer.IsAbleToMove() == false) { return; } float h = Input.GetAxisRaw("Horizontal"); float v = Input.GetAxisRaw("Vertical"); if (h == 0.0f && v == 0.0f) { fsmPlyer.SetState(CharacterBasicState.Idle, CharacterAnimationState.Idle); return; } Vector3 movement = (transform.forward * v) + (transform.right * h); CharacterAnimationState animState = CharacterAnimationState.Moving_F; bool isFrondSide = (Input.GetKey(KeyCode.W)) ? true : false; float moveAngle = Vector3.Angle(movement, transform.right); float moveSpeed = (Input.GetKey(KeyCode.W)) ? moveSpeed_forward : moveSpeed_side; //Debug.Log(moveAngle); if (180.0f <= moveAngle) { animState = CharacterAnimationState.Moving_L; } else if (135.0f <= moveAngle) { if (isFrondSide) { animState = CharacterAnimationState.Moving_FL; } else { animState = CharacterAnimationState.Moving_BL; } } else if (90.0f <= moveAngle) { if (isFrondSide) { animState = CharacterAnimationState.Moving_F; } else { animState = CharacterAnimationState.Moving_B; } } else if (45.0f <= moveAngle) { if (isFrondSide) { animState = CharacterAnimationState.Moving_FR; } else { animState = CharacterAnimationState.Moving_BR; } } else if (0.0f <= moveAngle) { animState = CharacterAnimationState.Moving_R; } movement = movement.normalized * moveSpeed * Time.fixedDeltaTime; transform.position += movement; fsmPlyer.SetState(CharacterBasicState.Moving, animState); }