diff --git a/Assets/Editor/EnemyControllerEditor.cs b/Assets/Editor/EnemyControllerEditor.cs index a541a08c..23ac07cc 100644 --- a/Assets/Editor/EnemyControllerEditor.cs +++ b/Assets/Editor/EnemyControllerEditor.cs @@ -49,6 +49,7 @@ public class EnemyControllerEditor : Editor EditorGUILayout.EndVertical(); EditorGUILayout.Space(); + GUI.backgroundColor= Color.clear; EditorGUILayout.LabelField("상태 변경", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); diff --git a/Assets/JYY/Animation/Attack01 Slice.anim b/Assets/JYY/Animation/Attack01 Slice.anim new file mode 100644 index 00000000..184b56f3 --- /dev/null +++ b/Assets/JYY/Animation/Attack01 Slice.anim @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c054cfe0f3d250e8f5168491f5f2aa7d31d54ba59d41a48448e9618b4a721ac +size 1176525 diff --git a/Assets/JYY/Animation/Attack01 Slice.anim.meta b/Assets/JYY/Animation/Attack01 Slice.anim.meta new file mode 100644 index 00000000..801b8710 --- /dev/null +++ b/Assets/JYY/Animation/Attack01 Slice.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df0c94f0a0eae85438a0bfc0deea8791 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/JYY/Animation/Attack01.anim b/Assets/JYY/Animation/Attack01.anim index 1ef5a7d3..4c7820cf 100644 --- a/Assets/JYY/Animation/Attack01.anim +++ b/Assets/JYY/Animation/Attack01.anim @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e2aa72b30900d21e8cf508b9617b00b6e6bf78e23031768464d7d85da67c5d7 -size 1565170 +oid sha256:cd6ac1fc9497bc8702854aa01c3f1d8e7c63b28e389c2cca00708008b3103aa0 +size 1562661 diff --git a/Assets/JYY/Animation/Attack01.anim.meta b/Assets/JYY/Animation/Attack01.anim.meta index f8e8feff..fb2b6293 100644 --- a/Assets/JYY/Animation/Attack01.anim.meta +++ b/Assets/JYY/Animation/Attack01.anim.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: 6019f1b4a095b0b4396f5561a51fee89 -timeCreated: 1544605028 -licenseType: Store +guid: 34b2cc555a0977644ab2d9e2350a939d NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/JYY/Animation/Attack02.anim b/Assets/JYY/Animation/Attack02.anim index c2dda702..7fe953bc 100644 --- a/Assets/JYY/Animation/Attack02.anim +++ b/Assets/JYY/Animation/Attack02.anim @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a63148e99ba21c92b2213dcd7a7f95f214a7392e7f715f4c57466afe01f07e0 -size 552838 +oid sha256:8255597ac6e2a3bcb03f27639eea553fb9c64e7600a8867ee75ebaee10f8b4e5 +size 1412497 diff --git a/Assets/JYY/Animation/ShakeSword.anim b/Assets/JYY/Animation/ShakeSword.anim new file mode 100644 index 00000000..ec0baa4d --- /dev/null +++ b/Assets/JYY/Animation/ShakeSword.anim @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a90fe33bc8ca56649ae0d4bc09a37bbd8a0c1312ba47f84aafe8472e01d997d +size 349048 diff --git a/Assets/JYY/Animation/ShakeSword.anim.meta b/Assets/JYY/Animation/ShakeSword.anim.meta new file mode 100644 index 00000000..93237a33 --- /dev/null +++ b/Assets/JYY/Animation/ShakeSword.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8cda71f7a8c35a448a6e9999adab5bc1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/JYY/Animation/WindUp.anim b/Assets/JYY/Animation/WindUp.anim new file mode 100644 index 00000000..9a251781 --- /dev/null +++ b/Assets/JYY/Animation/WindUp.anim @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e1f5016d3194277ee4c9aedbbd639245bcdaaa846dd4dcc57a02824d78c99b9 +size 657165 diff --git a/Assets/JYY/Animation/WindUp.anim.meta b/Assets/JYY/Animation/WindUp.anim.meta new file mode 100644 index 00000000..610608f3 --- /dev/null +++ b/Assets/JYY/Animation/WindUp.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d4a1a2c3f67c5c45a3a85dbf83e008b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/JYY/Animator/PldDogControl.controller b/Assets/JYY/Animator/PldDogControl.controller index 8d2b4c43..8646c482 100644 --- a/Assets/JYY/Animator/PldDogControl.controller +++ b/Assets/JYY/Animator/PldDogControl.controller @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b5015c4f10bdf0cda20134ebf518f7847a0d6d39e7317fe45f409ab4a1a00ee -size 13146 +oid sha256:b2373e809a0fe3bb4802767be4e9316f9c3911dcf2b4ad9d3fa7969434773cb7 +size 21110 diff --git a/Assets/JYY/Scenes/MonsterTest.unity b/Assets/JYY/Scenes/MonsterTest.unity index 92364e75..060987cc 100644 --- a/Assets/JYY/Scenes/MonsterTest.unity +++ b/Assets/JYY/Scenes/MonsterTest.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f53e08854b36e3c0ebe9a5efbafa9f4c1ceb557ad34f4bc2ef099519af06757f -size 95972 +oid sha256:7b1c6e41543c3607b246fcee1f2073d80b57afb1b314b1f2bb9aad1e0f168192 +size 95980 diff --git a/Assets/Scripts/Character/Enemy/EnemyAnimatorStateAttack.cs b/Assets/Scripts/Character/Enemy/EnemyAnimatorStateAttack.cs new file mode 100644 index 00000000..91bdc4a1 --- /dev/null +++ b/Assets/Scripts/Character/Enemy/EnemyAnimatorStateAttack.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class EnemyAnimatorStateAttack : StateMachineBehaviour +{ + // OnStateExit is called when a transition ends and the state machine finishes evaluating this state + // override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) + // { + // animator.gameObject.GetComponent().SetState(EnemyState.Trace); + // } + + +} diff --git a/Assets/Scripts/Character/Enemy/EnemyAnimatorStateAttack.cs.meta b/Assets/Scripts/Character/Enemy/EnemyAnimatorStateAttack.cs.meta new file mode 100644 index 00000000..032dac99 --- /dev/null +++ b/Assets/Scripts/Character/Enemy/EnemyAnimatorStateAttack.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5765847dbef51e4f9bccde712eeda30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Character/Enemy/EnemyController.cs b/Assets/Scripts/Character/Enemy/EnemyController.cs index 32667a49..611addf7 100644 --- a/Assets/Scripts/Character/Enemy/EnemyController.cs +++ b/Assets/Scripts/Character/Enemy/EnemyController.cs @@ -20,9 +20,12 @@ public abstract class EnemyController : CharacterBase public float WalkSpeed => walkSpeed; public float RunSpeed => runSpeed; + public Transform TraceTargetTransform { get; private set; } + [SerializeField] private float walkSpeed = 5; [SerializeField] private float runSpeed = 8; + // ----- // 상태 변수 private EnemyStateIdle _enemyStateIdle; @@ -86,15 +89,16 @@ public abstract class EnemyController : CharacterBase #region 적 탐지 // 일정 반경에 플레이어가 진입하면 플레이어 소리를 감지했다고 판단 + // TODO : 상태 변경시 바로 앞에 플레이어가 있으면 찾지 못하는 이슈 있음 public Transform DetectPlayerInCircle() { var hitColliders = Physics.OverlapSphere(transform.position, detectCircleRadius, targetLayerMask); if (hitColliders.Length > 0) { - return hitColliders[0].transform; + TraceTargetTransform = hitColliders[0].transform; + return TraceTargetTransform; } - return null; } diff --git a/Assets/Scripts/Character/Enemy/EnemyState/EnemyStateAttack.cs b/Assets/Scripts/Character/Enemy/EnemyState/EnemyStateAttack.cs index c320385b..4aaf7099 100644 --- a/Assets/Scripts/Character/Enemy/EnemyState/EnemyStateAttack.cs +++ b/Assets/Scripts/Character/Enemy/EnemyState/EnemyStateAttack.cs @@ -4,39 +4,52 @@ using UnityEngine; public class EnemyStateAttack : IEnemyState { private EnemyController _enemyController; + private Animator _animator; + private Coroutine _attackRoutine; public void Enter(EnemyController enemyController) { _enemyController = enemyController; - _enemyController.EnemyAnimator.SetTrigger("Attack"); + _animator = _enemyController.EnemyAnimator; + + _animator.SetBool("Attack", true); + _attackRoutine = _enemyController.StartCoroutine(AttackSequence()); } public void Update() { - _enemyController.SetState(EnemyState.Trace); } - // private IEnumerator AttackSequence() - // { - // // 1. 전조 이펙트 생성 - // - // // 2. 검을 들어올리는 애니메이션 재생 - // - // // 3. 대기(전조와 검 들어올리는 애니메이션을 위함) - // - // // 4. 전조 제거 - // - // // 회전 초기화 - // - // // 5. 검 휘두르기 - // - // // 6. 공격 판정 발생 - // - // // 7. 상태 전환 - // } + private IEnumerator AttackSequence() + { + // 1. 전조 이펙트 생성 + + // 2. 검을 들어올림 + yield return new WaitForSeconds(3f); + + // 3. 대기(전조와 검 들어올리는 애니메이션을 위함) + + // 4. 전조 제거 + + // 5. 검 휘두르기 + _animator.SetTrigger("VertiSlash"); + + // 6. 공격 판정 발생 + + yield return new WaitForSeconds(1f); + // 7. 애니메이션 트리거 종료 -> 애니메이터 상태 머신으로 처리 + _enemyController.SetState(EnemyState.Trace); + } public void Exit() { + if (_attackRoutine != null) + { + _enemyController.StopCoroutine(_attackRoutine); + _attackRoutine = null; + } + _animator.SetBool("Attack", false); + _animator = null; _enemyController = null; } } \ No newline at end of file diff --git a/Assets/Scripts/Character/Enemy/EnemyState/EnemyStateTrace.cs b/Assets/Scripts/Character/Enemy/EnemyState/EnemyStateTrace.cs index def7ceb2..9b8e7f3f 100644 --- a/Assets/Scripts/Character/Enemy/EnemyState/EnemyStateTrace.cs +++ b/Assets/Scripts/Character/Enemy/EnemyState/EnemyStateTrace.cs @@ -15,7 +15,7 @@ public class EnemyStateTrace : IEnemyState { _enemyController = enemyController; - _detectPlayerTransform = _enemyController.DetectPlayerInCircle(); + _detectPlayerTransform = _enemyController.TraceTargetTransform; if (!_detectPlayerTransform) { _enemyController.SetState(EnemyState.Idle);