diff --git a/Assets/02.Scripts/Character/Player/Combat/CombatMovement.cs b/Assets/02.Scripts/Character/Player/Combat/CombatMovement.cs index c749e3817..f198c91a1 100644 --- a/Assets/02.Scripts/Character/Player/Combat/CombatMovement.cs +++ b/Assets/02.Scripts/Character/Player/Combat/CombatMovement.cs @@ -82,9 +82,15 @@ namespace BlueWater.Players.Combat } } + [field: SerializeField, DisableIf("@true")] public Vector3 PushDirection { get; private set; } + + [field: SerializeField, DisableIf("@true")] public float PushPower { get; private set; } - public float PushReductionCoefficient { get; private set; } + + [field: SerializeField] + public float PushPowerReduction { get; private set; } = 20f; + private Vector3 _finalVelocity; // Dash @@ -139,28 +145,9 @@ namespace BlueWater.Players.Combat private void FixedUpdate() { - if (!IsMoveEnabled) return; + if (!CanMove()) return; - if (!_isDashing && _comboAttackable?.CurrentComboAttackCount <= 0 && _skillHandler?.IsActivatingSkill == false) - { - var velocityDirection = _inputDirection; - if (_stunnable?.IsStunned == true) - { - velocityDirection = Vector3.zero; - } - else - { - CurrentDirection = velocityDirection; - } - - IsMoving = velocityDirection != Vector3.zero; - _finalVelocity = velocityDirection * (MoveSpeed * MoveSpeedCoefficient); - var pushVelocity = PushDirection * PushPower; - _finalVelocity += pushVelocity; - Rigidbody.linearVelocity = _finalVelocity; - } - - PushPower = Mathf.Max(0, PushPower - PushReductionCoefficient * Time.deltaTime); + Move(); } private void OnApplicationQuit() @@ -224,29 +211,63 @@ namespace BlueWater.Players.Combat // Move public bool CanMove() { - if (!IsMoveEnabled || IsDashing) return false; - - var isActivatingSkill = _skillHandler?.IsActivatingSkill ?? false; - var isStunned = _stunnable?.IsStunned ?? false; - // if (isStunned) + return IsMoveEnabled; + + // if (!IsMoveEnabled || IsDashing) return false; + // + // var isActivatingSkill = _skillHandler?.IsActivatingSkill ?? false; + // var isStunned = _stunnable?.IsStunned ?? false; + // // if (isStunned) + // // { + // // IsMoving = false; + // // } + // var isAttacking = _comboAttackable?.CurrentComboAttackCount > 0; + // + // var canMove = !isActivatingSkill && !isStunned && !isAttacking; + // if (!canMove) // { + // if (!Rigidbody.isKinematic) + // { + // Rigidbody.linearVelocity = Vector3.zero; + // } // IsMoving = false; // } - var isAttacking = _comboAttackable?.CurrentComboAttackCount > 0; - - var canMove = !isActivatingSkill && !isStunned && !isAttacking; - if (!canMove) - { - if (!Rigidbody.isKinematic) - { - Rigidbody.linearVelocity = Vector3.zero; - } - IsMoving = false; - } - - return canMove; + // + // return canMove; } + public void Move() + { + if (!_isDashing && _comboAttackable?.CurrentComboAttackCount <= 0 && _skillHandler?.IsActivatingSkill == false) + { + var velocityDirection = _inputDirection; + if (_stunnable?.IsStunned == true) + { + velocityDirection = Vector3.zero; + } + else + { + CurrentDirection = velocityDirection; + } + + IsMoving = velocityDirection != Vector3.zero; + _finalVelocity = velocityDirection * (MoveSpeed * MoveSpeedCoefficient); + var pushVelocity = PushDirection * PushPower; + _finalVelocity += pushVelocity; + if (!Rigidbody.isKinematic) + { + Rigidbody.linearVelocity = _finalVelocity; + } + } + + PushPower = Mathf.Max(0, PushPower - PushPowerReduction * Time.deltaTime); + + // CurrentDirection = _inputDirection; + // IsMoving = _inputDirection != Vector3.zero; + // var finalVelocity = _inputDirection * (MoveSpeed * MoveSpeedCoefficient); + // Rigidbody.linearVelocity = finalVelocity; + } + public void AddForce(Vector3 force, ForceMode forceMode) { if (IsDashing) return; @@ -254,12 +275,10 @@ namespace BlueWater.Players.Combat Rigidbody.AddForce(force, forceMode); } - public void Move() + public void SetPush(Vector3 pushDirection, float pushPower) { - CurrentDirection = _inputDirection; - IsMoving = _inputDirection != Vector3.zero; - var finalVelocity = _inputDirection * (MoveSpeed * MoveSpeedCoefficient); - Rigidbody.linearVelocity = finalVelocity; + PushDirection = pushDirection; + PushPower = pushPower; } // Dash diff --git a/Assets/02.Scripts/Character/Player/Tycoon/TycoonMovement.cs b/Assets/02.Scripts/Character/Player/Tycoon/TycoonMovement.cs index cb09995bc..6721879d3 100644 --- a/Assets/02.Scripts/Character/Player/Tycoon/TycoonMovement.cs +++ b/Assets/02.Scripts/Character/Player/Tycoon/TycoonMovement.cs @@ -49,7 +49,11 @@ namespace BlueWater.Players.Tycoons _currentDirection = value; } } - + + public Vector3 PushDirection { get; private set; } + public float PushPower { get; private set; } + public float PushPowerReduction { get; private set; } + private float _finalSpeed; #endregion @@ -126,6 +130,11 @@ namespace BlueWater.Players.Tycoons Rigidbody.AddForce(force, forceMode); } + public void SetPush(Vector3 pushDirection, float pushPower) + { + throw new System.NotImplementedException(); + } + public void Move() { CurrentDirection = _inputDirection; diff --git a/Assets/02.Scripts/Interface/IPhysicMovable.cs b/Assets/02.Scripts/Interface/IPhysicMovable.cs index 8de979ef7..2a076207b 100644 --- a/Assets/02.Scripts/Interface/IPhysicMovable.cs +++ b/Assets/02.Scripts/Interface/IPhysicMovable.cs @@ -10,12 +10,16 @@ namespace BlueWater.Interfaces bool IsMoveEnabled { get; } bool IsMoving { get; } Vector3 CurrentDirection { get; } - + Vector3 PushDirection { get; } + float PushPower { get; } + float PushPowerReduction { get; } + void SetMoveSpeedCoefficient(float value); void ResetMoveSpeedCoefficient(); void SetCurrentDirection(Vector3 normalDirection); bool CanMove(); void Move(); void AddForce(Vector3 force, ForceMode forceMode); + void SetPush(Vector3 pushDirection, float pushPower); } } \ No newline at end of file diff --git a/Assets/02.Scripts/ProjectileController.cs b/Assets/02.Scripts/ProjectileController.cs index aee263766..1d88631be 100644 --- a/Assets/02.Scripts/ProjectileController.cs +++ b/Assets/02.Scripts/ProjectileController.cs @@ -38,15 +38,37 @@ namespace BlueWater [SerializeField] private LayerMask _targetLayer; + + [Title("슬로우 설정")] + [SerializeField] + private bool _isSlowedMoveSpeed; + [SerializeField, ShowIf("@_isSlowedMoveSpeed")] + private float _slowDuration; + + [SerializeField, ShowIf("@_isSlowedMoveSpeed")] + private float _moveSpeedCoefficient; + + [Title("푸쉬 설정")] + [SerializeField] + private bool _isPushed; + + [SerializeField, ShowIf("@_isPushed")] + private float _pushPower; + + [Title("효과음 설정")] + [SerializeField] + private string _awakeSfxName; + + [SerializeField] + private string _attackSfxName; + + [Title("자동 파괴 옵션")] [SerializeField] private bool _useAutoDestroy = true; [SerializeField, ShowIf("@_useAutoDestroy")] private float _autoDestroyTime = 10f; - - [SerializeField] - private string _awakeSfxName; public float SphereRadius { get; private set; } @@ -120,7 +142,11 @@ namespace BlueWater element.transform.SetParent(null); Destroy(element.gameObject, 2f); } - + + if (!string.IsNullOrEmpty(_attackSfxName)) + { + AudioManager.Instance.PlaySfx(_attackSfxName); + } var impactParticle = Instantiate(ImpactParticle, transform.position, Quaternion.identity); // TODO : HitBox가 레이어로 설정되어있으도, 부모 객체 Player를 계속 가져오는 버그가 있음 var iDamageable = hitCollider.GetComponentInParent(); @@ -128,6 +154,22 @@ namespace BlueWater { iDamageable.TakeDamage(_attackDamage); OnHitAction?.Invoke(); + + if (_isSlowedMoveSpeed) + { + var slowable = hitCollider.GetComponentInParent(); + slowable?.SlowMoveSpeed(_slowDuration, _moveSpeedCoefficient); + } + + if (_isPushed) + { + var physicMovable = hitCollider.GetComponentInParent(); + if (physicMovable != null) + { + var pushDirection = hitCollider.transform.position - transform.position; + physicMovable.SetPush(pushDirection.normalized, _pushPower); + } + } } Destroy(_projectilePrefab, 3f); @@ -161,8 +203,28 @@ namespace BlueWater iDamageable.TakeDamage(_attackDamage); OnHitAction?.Invoke(); + + if (_isSlowedMoveSpeed) + { + var slowable = _hitColliders[i].GetComponentInParent(); + slowable?.SlowMoveSpeed(_slowDuration, _moveSpeedCoefficient); + } + + if (_isPushed) + { + var physicMovable = _hitColliders[i].GetComponentInParent(); + if (physicMovable != null) + { + var pushDirection = _hitColliders[i].transform.position - transform.position; + physicMovable.SetPush(pushDirection.normalized, _pushPower); + } + } } + if (!string.IsNullOrEmpty(_attackSfxName)) + { + AudioManager.Instance.PlaySfx(_attackSfxName); + } var impactParticle = Instantiate(ImpactParticle, transform.position, Quaternion.identity); Destroy(_projectilePrefab, 3f); @@ -181,6 +243,28 @@ namespace BlueWater OnHitAction = onHitAction; } + /// + /// 파티클이 충돌할 때, 슬로우 효과를 적용할 때 사용 + /// + /// 슬로우 효과 지속시간 + /// 값이 1f일 때, 기본 이동속도\n0.3f라면, 70%감소 효과 (기존 속도의 30%) + public void SetSlowMoveSpeed(float slowDuration, float moveSpeedCoefficient) + { + _isSlowedMoveSpeed = true; + _slowDuration = slowDuration; + _moveSpeedCoefficient = moveSpeedCoefficient; + } + + /// + /// 파티클이 충돌할 때, 밀어내는 효과를 적용할 때 사용 + /// + /// hit되는 캐릭터의 moveSpeed를 고려해서 적용 + public void SetPush(float pushPower) + { + _isPushed = true; + _pushPower = pushPower; + } + public void AddForce(Vector3 force, ForceMode forceMode) => _rigidbody.AddForce(force, forceMode); } } \ No newline at end of file diff --git a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/BullChargeData.asset b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/BullChargeData.asset index 9118dbd92..a3c85918c 100644 --- a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/BullChargeData.asset +++ b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/BullChargeData.asset @@ -25,5 +25,5 @@ MonoBehaviour: m_Bits: 67584 k__BackingField: 25 k__BackingField: 3 - k__BackingField: 10 + k__BackingField: 12 k__BackingField: 0.05 diff --git a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/HammerSlamData.asset b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/HammerSlamData.asset index 999bb30b8..9c614bda1 100644 --- a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/HammerSlamData.asset +++ b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/HammerSlamData.asset @@ -24,5 +24,5 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 67584 k__BackingField: 3 - k__BackingField: 5 + k__BackingField: 10 k__BackingField: 0.05 diff --git a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/MeteorSwingData.asset b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/MeteorSwingData.asset index ae757761f..0c6be8778 100644 --- a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/MeteorSwingData.asset +++ b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/MeteorSwingData.asset @@ -29,5 +29,5 @@ MonoBehaviour: k__BackingField: 1 k__BackingField: 90 k__BackingField: 10 - k__BackingField: 5 + k__BackingField: 15 k__BackingField: 0.1 diff --git a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/SkyFallSmashData.asset b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/SkyFallSmashData.asset index 810d828a7..da54e0275 100644 --- a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/SkyFallSmashData.asset +++ b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/Rhinoceros/SkyFallSmashData.asset @@ -32,6 +32,6 @@ MonoBehaviour: k__BackingField: serializedVersion: 2 rgba: 4288949504 - k__BackingField: 10 + k__BackingField: 20 k__BackingField: 3 k__BackingField: 1 diff --git a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/SandMole/SingleRollData.asset b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/SandMole/SingleRollData.asset index 5683684bb..52ccf41b5 100644 --- a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/SandMole/SingleRollData.asset +++ b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/SandMole/SingleRollData.asset @@ -30,7 +30,7 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 64 k__BackingField: 40 - k__BackingField: 8 + k__BackingField: 12 k__BackingField: 3 k__BackingField: 200 k__BackingField: 5 diff --git a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/TitanSlime/JumpSlamData.asset b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/TitanSlime/JumpSlamData.asset index 3d6652c62..57c1306a7 100644 --- a/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/TitanSlime/JumpSlamData.asset +++ b/Assets/02.Scripts/ScriptableObject/Skill/Enemy/Boss/TitanSlime/JumpSlamData.asset @@ -28,4 +28,4 @@ MonoBehaviour: k__BackingField: 2 k__BackingField: 3 k__BackingField: 0.5 - k__BackingField: 3 + k__BackingField: 10 diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/BullCharge.cs b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/BullCharge.cs index 7004d903e..921c8bd7a 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/BullCharge.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/BullCharge.cs @@ -133,9 +133,10 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros.Skills var hitVector = raycastHit.transform.position - SkillUser.transform.position; hitVector.y = 0f; var hitDirection = hitVector.normalized; - var cross = Vector3.Cross(hitDirection, transform.forward); - var addForceDirection = cross.y >= 0f ? Quaternion.Euler(0, -90, 0) * transform.forward : Quaternion.Euler(0, 90, 0) * transform.forward; - iPhysicMovable.AddForce(addForceDirection * _bullChargeData.PushPower, ForceMode.Impulse); + iPhysicMovable.SetPush(hitDirection, _bullChargeData.PushPower); + // var cross = Vector3.Cross(hitDirection, transform.forward); + // var addForceDirection = cross.y >= 0f ? Quaternion.Euler(0, -90, 0) * transform.forward : Quaternion.Euler(0, 90, 0) * transform.forward; + // iPhysicMovable.AddForce(addForceDirection * _bullChargeData.PushPower, ForceMode.Impulse); } totalDistanceCovered += moveDistance; diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/Data/SeismicThrustData.cs b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/Data/SeismicThrustData.cs index e8edc9233..024647fef 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/Data/SeismicThrustData.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/Data/SeismicThrustData.cs @@ -11,9 +11,6 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros.Skills [field: SerializeField] public GameObject SeismicThrustParticle { get; private set; } - [field: SerializeField, Tooltip("공격했을 때, 타겟을 밀어내는 힘")] - public float PushPower { get; private set; } = 20f; - [field: SerializeField, Tooltip("공격했을 때, 타겟의 기절 지속시간")] public float StunDuration { get; private set; } = 0.15f; diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/HammerSlam.cs b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/HammerSlam.cs index 1f73409a4..2a9f6ddc3 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/HammerSlam.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/HammerSlam.cs @@ -120,7 +120,7 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros.Skills var hitVector = hitCollider.transform.position - SkillUser.transform.position; hitVector.y = 0f; var hitDirection = hitVector.normalized; - iPhysicMovable.AddForce(hitDirection * _hammerSlamData.PushPower, ForceMode.Impulse); + iPhysicMovable.SetPush(hitDirection, _hammerSlamData.PushPower); } HideIndicator(); diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/MeteorSwing.cs b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/MeteorSwing.cs index d2e353734..590ff37ef 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/MeteorSwing.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/MeteorSwing.cs @@ -130,7 +130,7 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros.Skills iStunnable?.TryStun(_meteorSwingData.StunDuration); var iPhysicMovable = hitCollider.GetComponentInParent(); - iPhysicMovable?.AddForce(attackDirection * _meteorSwingData.PushPower, ForceMode.Impulse); + iPhysicMovable?.SetPush(attackDirection, _meteorSwingData.PushPower); } HideIndicator(); diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/SeismicThrust.cs b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/SeismicThrust.cs index 81352f476..6f1ec93ba 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/SeismicThrust.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/SeismicThrust.cs @@ -113,9 +113,6 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros.Skills var iSlowable = raycastHit.transform.GetComponentInParent(); iSlowable?.TrySlowMoveSpeed(_seismicThrustData.SlowDuration, _seismicThrustData.SlowCoefficient); - - var iPhysicMovable = raycastHit.transform.GetComponentInParent(); - iPhysicMovable?.AddForce(transform.forward * _seismicThrustData.PushPower, ForceMode.Impulse); } HideIndicator(); diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/SkyFallSmash.cs b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/SkyFallSmash.cs index 2e0547940..548a02188 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/SkyFallSmash.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/Rhinoceros/SkyFallSmash.cs @@ -198,9 +198,9 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros.Skills { var hitCollider = HitColliders[i]; var iStunnable = hitCollider.transform.GetComponentInParent(); - if (iStunnable != null) + if (iStunnable != null && iStunnable.CanStun()) { - iStunnable.TryStun(_skyFallSmashData.StunDuration); + iStunnable.Stun(_skyFallSmashData.StunDuration); var iPhysicMovable = hitCollider.GetComponentInParent(); var hitVector = hitCollider.transform.position - transform.position; @@ -210,8 +210,7 @@ namespace BlueWater.Enemies.Bosses.Rhinoceros.Skills var hitDistance = hitVector.magnitude; var powerCoefficient = stunRange - hitDistance; var addForcePower = powerCoefficient / stunRange * _skyFallSmashData.PushPowerCoefficient; - - iPhysicMovable.AddForce(hitDirection * addForcePower, ForceMode.Impulse); + iPhysicMovable.SetPush(hitDirection, addForcePower); } } diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/Data/MultiThrowSpikesData.cs b/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/Data/MultiThrowSpikesData.cs index fc5396281..0c466c1c9 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/Data/MultiThrowSpikesData.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/Data/MultiThrowSpikesData.cs @@ -16,5 +16,14 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills [field: SerializeField] public float ProjectileSpeed { get; private set; } = 25f; + + [field: SerializeField] + public float PushPower { get; private set; } = 3.5f; + + [field: SerializeField] + public float SlowDuration { get; private set; } = 3f; + + [field: SerializeField] + public float MoveSpeedCoefficient { get; private set; } = 0.3f; } } \ No newline at end of file diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/Data/SpikeBarrageData.cs b/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/Data/SpikeBarrageData.cs index b5457978c..155c06c89 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/Data/SpikeBarrageData.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/Data/SpikeBarrageData.cs @@ -28,5 +28,14 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills [field: SerializeField] public float ProjectileSpeed { get; private set; } = 25f; + + [field: SerializeField] + public float PushPower { get; private set; } = 3.5f; + + [field: SerializeField] + public float SlowDuration { get; private set; } = 3f; + + [field: SerializeField] + public float MoveSpeedCoefficient { get; private set; } = 0.3f; } } \ No newline at end of file diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/MultiThrowSpikes.cs b/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/MultiThrowSpikes.cs index 5fb6dd72a..997d9a6a6 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/MultiThrowSpikes.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/MultiThrowSpikes.cs @@ -66,6 +66,8 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills var projectile = Instantiate(_multiThrowSpikesData.SpikePrefab, startPosition, rotation, _particleInstantiateLocation).GetComponent(); projectile.Initialize(_multiThrowSpikesData.Damage, _multiThrowSpikesData.TargetLayer); + projectile.SetPush(_multiThrowSpikesData.PushPower); + projectile.SetSlowMoveSpeed(_multiThrowSpikesData.SlowDuration, _multiThrowSpikesData.MoveSpeedCoefficient); projectile.AddForce(projectile.transform.forward * _multiThrowSpikesData.ProjectileSpeed, ForceMode.Impulse); yield return waitForSeconds; diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/SingleRoll.cs b/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/SingleRoll.cs index 95a178bb6..99db7a7e7 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/SingleRoll.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/SingleRoll.cs @@ -165,11 +165,12 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills var hitVector = hitCollider.transform.position - SkillUser.transform.position; hitVector.y = 0f; var hitDirection = hitVector.normalized; - var cross = Vector3.Cross(hitDirection, transform.forward); - var addForceDirection = cross.y >= 0f - ? Quaternion.Euler(0, -90, 0) * transform.forward - : Quaternion.Euler(0, 90, 0) * transform.forward; - iPhysicMovable.AddForce(addForceDirection * _singleRollData.PushPower, ForceMode.Impulse); + iPhysicMovable.SetPush(hitDirection, _singleRollData.PushPower); + // var cross = Vector3.Cross(hitDirection, transform.forward); + // var addForceDirection = cross.y >= 0f + // ? Quaternion.Euler(0, -90, 0) * transform.forward + // : Quaternion.Euler(0, 90, 0) * transform.forward; + // iPhysicMovable.AddForce(addForceDirection * _singleRollData.PushPower, ForceMode.Impulse); } _userRigidbody.MovePosition(skillUserPosition + targetDirection * moveDistance); diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/SpikeBarrage.cs b/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/SpikeBarrage.cs index e18cfbfd1..6b7528e83 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/SpikeBarrage.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/SandMole/SpikeBarrage.cs @@ -101,6 +101,8 @@ namespace BlueWater.Enemies.Bosses.SandMole.Skills var spike = Instantiate(_spikeBarrageData.SpikePrefab, spikeSpawnPosition, rotation, _particleInstantiateLocation).GetComponent(); spike.Initialize(_spikeBarrageData.Damage, _spikeBarrageData.TargetLayer); + spike.SetPush(_spikeBarrageData.PushPower); + spike.SetSlowMoveSpeed(_spikeBarrageData.SlowDuration, _spikeBarrageData.MoveSpeedCoefficient); spike.AddForce(spike.transform.forward * _spikeBarrageData.ProjectileSpeed, ForceMode.Impulse); yield return spikeInterval; diff --git a/Assets/02.Scripts/Skill/Enemy/Boss/TitanSlime/JumpSlam.cs b/Assets/02.Scripts/Skill/Enemy/Boss/TitanSlime/JumpSlam.cs index a0a13832f..d89e0f35e 100644 --- a/Assets/02.Scripts/Skill/Enemy/Boss/TitanSlime/JumpSlam.cs +++ b/Assets/02.Scripts/Skill/Enemy/Boss/TitanSlime/JumpSlam.cs @@ -262,7 +262,7 @@ namespace BlueWater.Enemies.Bosses.TitanSlime.Skills iSlowable?.TrySlowMoveSpeed(_jumpSlamData.SlowDuration, _jumpSlamData.SlowCoefficient); var iPhysicMovable = hitCollider.GetComponentInParent(); - iPhysicMovable?.AddForce(targetDirection * _jumpSlamData.PushPower, ForceMode.Impulse); + iPhysicMovable?.SetPush(targetDirection, _jumpSlamData.PushPower); } } }