diff --git a/BlueWater/Assets/01.Scenes/02.Combat.unity b/BlueWater/Assets/01.Scenes/02.Combat.unity index 3d7898251..6f7e682f6 100644 --- a/BlueWater/Assets/01.Scenes/02.Combat.unity +++ b/BlueWater/Assets/01.Scenes/02.Combat.unity @@ -876255,11 +876255,6 @@ PrefabInstance: propertyPath: m_TagString value: CombatPlayer objectReference: {fileID: 0} - - target: {fileID: 7729150195808218711, guid: d9472bd7185627847ae4d5b1d3d3bb8a, - type: 3} - propertyPath: m_Mass - value: 10 - objectReference: {fileID: 0} - target: {fileID: 8934240191915016273, guid: d9472bd7185627847ae4d5b1d3d3bb8a, type: 3} propertyPath: m_LocalPosition.x diff --git a/BlueWater/Assets/02.Scripts/Character/CombatPlayer/CombatPlayerController.cs b/BlueWater/Assets/02.Scripts/Character/CombatPlayer/CombatPlayerController.cs index e111b7735..931cb60f2 100644 --- a/BlueWater/Assets/02.Scripts/Character/CombatPlayer/CombatPlayerController.cs +++ b/BlueWater/Assets/02.Scripts/Character/CombatPlayer/CombatPlayerController.cs @@ -19,6 +19,7 @@ namespace BlueWaterProject { public PlayerInput playerInput; public Transform visualLook; + public SpriteRenderer spriteRenderer; public Animator animator; public PhysicsMovement movement; } @@ -33,8 +34,11 @@ namespace BlueWaterProject [Range(1, 21), Tooltip("한 번에 공격 가능한 개체 수")] public int maxHitNum = 10; - [Range(0f, 100f), Tooltip("공격 데미지")] - public float attackDamage = 10f; + [Range(0f, 100f), Tooltip("첫 번째 공격 데미지")] + public float firstAttackDamage = 10f; + + [Range(0f, 100f), Tooltip("두 번째 공격 데미지")] + public float secondAttackDamage = 15f; [Range(0.1f, 2f), Tooltip("콤보 공격 포함 총 걸리는 시간")] public float attackTime = 0.7f; @@ -64,7 +68,6 @@ namespace BlueWaterProject public bool isUsingSkill; } - [DisableIf("@true")] [Serializable] public class CurrentValue { @@ -104,6 +107,8 @@ namespace BlueWaterProject public static readonly int ZDirectionHash = Animator.StringToHash("zDirection"); public static readonly int IsAttackingHash = Animator.StringToHash("isAttacking"); public static readonly int IsActivateMainSkillHash = Animator.StringToHash("isActivateMainSkill"); + + private static readonly int IsHitHash = Shader.PropertyToID("_IsHit"); #endregion @@ -247,6 +252,8 @@ namespace BlueWaterProject Die(); return; } + + StartCoroutine(nameof(FlashWhiteCoroutine)); } public void Die() @@ -255,7 +262,7 @@ namespace BlueWaterProject } public float GetCurrentHp() => MyCurrentValue.currentHp; - + #endregion /*********************************************************************** @@ -318,13 +325,13 @@ namespace BlueWaterProject if (isComboAttacked && MyComponents.animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= attackTimingNormalized[1]) { MoveToCurrentDirection(10f); - AttackTiming(); + AttackTiming(MyCharacterOption.secondAttackDamage); isAttacked = true; } else if (!isComboAttacked && MyComponents.animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= attackTimingNormalized[0]) { MoveToCurrentDirection(1f); - AttackTiming(); + AttackTiming(MyCharacterOption.firstAttackDamage); isAttacked = true; } } @@ -350,11 +357,11 @@ namespace BlueWaterProject CancelComboAttack(); } - public void AttackTiming() + public void AttackTiming(float damage) { var attackDirection = MyComponents.movement.GetPreviousMoveDirection(); - var size = Physics.OverlapSphereNonAlloc(transform.position, MyCharacterOption.attackRange, MyCurrentValue.hitColliders, MyCharacterOption.targetLayer); - + var size = Physics.OverlapSphereNonAlloc(transform.position, MyCharacterOption.attackRange, MyCurrentValue.hitColliders, MyCharacterOption.targetLayer, QueryTriggerInteraction.Collide); + for (var i = 0; i < size; i++) { var targetDirection = (MyCurrentValue.hitColliders[i].transform.position - transform.position).normalized; @@ -365,7 +372,7 @@ namespace BlueWaterProject if (MyCurrentValue.hitColliders[i].gameObject.layer == LayerMask.NameToLayer("Enemy")) { var iDamageable = MyCurrentValue.hitColliders[i].transform.GetComponent(); - iDamageable.TakeDamage(MyCharacterOption.attackDamage); + iDamageable?.TakeDamage(damage); if (MyCurrentState.isComboAttacking) { @@ -376,7 +383,7 @@ namespace BlueWaterProject MyCurrentValue.hitColliders[i].CompareTag("DestructiveSkill")) { var iDamageable = MyCurrentValue.hitColliders[i].transform.GetComponent(); - iDamageable.TakeDamage(MyCharacterOption.attackDamage); + iDamageable?.TakeDamage(damage); } } } @@ -416,6 +423,19 @@ namespace BlueWaterProject MyComponents.visualLook.localScale = localScale; } + private IEnumerator FlashWhiteCoroutine() + { + var spriteRenderer = MyComponents.spriteRenderer; + + for (var i = 0; i < 5; i++) + { + spriteRenderer.material.SetInt(IsHitHash, 1); + yield return new WaitForSeconds(0.05f); + spriteRenderer.material.SetInt(IsHitHash, 0); + yield return new WaitForSeconds(0.05f); + } + } + public void CoolDown(float waitTime, Action onCooldownComplete = null) { StartCoroutine(CoolDownCoroutine(waitTime, onCooldownComplete)); diff --git a/BlueWater/Assets/02.Scripts/Character/CombatPlayer/PhysicsMovement.cs b/BlueWater/Assets/02.Scripts/Character/CombatPlayer/PhysicsMovement.cs index 28f9bb90f..baef29572 100644 --- a/BlueWater/Assets/02.Scripts/Character/CombatPlayer/PhysicsMovement.cs +++ b/BlueWater/Assets/02.Scripts/Character/CombatPlayer/PhysicsMovement.cs @@ -6,7 +6,7 @@ using UnityEngine.InputSystem; // ReSharper disable once CheckNamespace namespace BlueWaterProject { - public class PhysicsMovement : MonoBehaviour, IStun + public class PhysicsMovement : MonoBehaviour, ICombatable { /*********************************************************************** * Definitions @@ -120,12 +120,6 @@ namespace BlueWaterProject [Title("효과")] [SerializeField] private ParticleSystem stunParticle; - public bool IsStunned - { - get => MyCurrentState.isStunned; - set => MyCurrentState.isStunned = value; - } - private Vector3 CapsuleTop => MyComponents.rb.position + (MyComponents.capsuleCollider.center + Vector3.up * (MyComponents.capsuleCollider.height * 0.5f - MyComponents.capsuleCollider.radius)) * transform.localScale.x; @@ -153,7 +147,7 @@ namespace BlueWaterProject private void FixedUpdate() { - if (!MyCurrentState.enableMoving || IsStunned) return; + if (!MyCurrentState.enableMoving || MyCurrentState.isStunned) return; InputMove(); CheckGround(); @@ -211,11 +205,28 @@ namespace BlueWaterProject ***********************************************************************/ #region Interfaces + public void DisableMove(float time) + { + if (MyCurrentState.isDashing) return; + + MyCurrentState.enableMoving = false; + MyComponents.rb.velocity = Vector3.zero; + MyCurrentState.isMoving = false; + + StartCoroutine(Utils.CoolDown(time, StopDisableMove)); + } + + private void StopDisableMove() + { + MyComponents.rb.velocity = Vector3.zero; + MyCurrentState.enableMoving = true; + } + public void Stun(float stunTime) { if (MyCurrentState.isDashing) return; - IsStunned = true; + MyCurrentState.isStunned = true; MyComponents.rb.velocity = Vector3.zero; MyCurrentState.isMoving = false; @@ -227,13 +238,20 @@ namespace BlueWaterProject StartCoroutine(Utils.CoolDown(stunTime, StopStun)); } - private void StopStun() + public void AddForceToDirection(Vector3 direction, float power) + { + if (MyCurrentState.isDashing) return; + + MyComponents.rb.AddForce(direction * power, ForceMode.Impulse); + } + + public void StopStun() { if (stunParticle) { stunParticle.Stop(); } - IsStunned = false; + MyCurrentState.isStunned = false; } #endregion diff --git a/BlueWater/Assets/02.Scripts/Character/Enemy/Type/FieldBoss/FieldBoss.cs b/BlueWater/Assets/02.Scripts/Character/Enemy/Type/FieldBoss/FieldBoss.cs index f6dc3ce4b..375be9eca 100644 --- a/BlueWater/Assets/02.Scripts/Character/Enemy/Type/FieldBoss/FieldBoss.cs +++ b/BlueWater/Assets/02.Scripts/Character/Enemy/Type/FieldBoss/FieldBoss.cs @@ -89,6 +89,11 @@ namespace BlueWaterProject { Destroy(element); } + + if (UiManager.Inst.CombatUi.FieldBossHpSlider.gameObject.activeSelf) + { + UiManager.Inst.CombatUi.FieldBossHpSlider.SetActiveHpSlider(false); + } } } @@ -186,8 +191,9 @@ namespace BlueWaterProject public void MoveTarget(float stoppingDistance) { - if (agent) + if (agent && agent.enabled) { + //rb.isKinematic = true; agent.isStopped = false; agent.stoppingDistance = stoppingDistance; agent.SetDestination(Target.transform.position); @@ -197,7 +203,7 @@ namespace BlueWaterProject public bool HasReachedDestination(float limitMovingTime) { // 경로 계산 중이면 false - if (!agent || agent.pathPending) + if (!agent || !agent.enabled || agent.pathPending) { departureTime = -1f; return false; @@ -210,7 +216,9 @@ namespace BlueWaterProject if (departureTime > 0f && Time.time - departureTime >= limitMovingTime) { + agent.velocity = Vector3.zero; agent.isStopped = true; + //rb.isKinematic = false; departureTime = -1f; return true; } @@ -223,6 +231,7 @@ namespace BlueWaterProject agent.velocity = Vector3.zero; agent.isStopped = true; + //rb.isKinematic = false; departureTime = -1f; return true; } diff --git a/BlueWater/Assets/02.Scripts/Character/Enemy/Type/FieldBoss/Type/Rhinoceros.cs b/BlueWater/Assets/02.Scripts/Character/Enemy/Type/FieldBoss/Type/Rhinoceros.cs index 8580cfb3d..d1ea72866 100644 --- a/BlueWater/Assets/02.Scripts/Character/Enemy/Type/FieldBoss/Type/Rhinoceros.cs +++ b/BlueWater/Assets/02.Scripts/Character/Enemy/Type/FieldBoss/Type/Rhinoceros.cs @@ -1,4 +1,3 @@ -using System; using Sirenix.OdinInspector; using UnityEngine; diff --git a/BlueWater/Assets/02.Scripts/Interface/ICombatable.cs b/BlueWater/Assets/02.Scripts/Interface/ICombatable.cs new file mode 100644 index 000000000..3be122c02 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Interface/ICombatable.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +// ReSharper disable once CheckNamespace +namespace BlueWaterProject +{ + public interface ICombatable + { + void DisableMove(float time); + void Stun(float stunTime); + void StopStun(); + void AddForceToDirection(Vector3 direction, float power); + } +} diff --git a/BlueWater/Assets/02.Scripts/Interface/IStun.cs.meta b/BlueWater/Assets/02.Scripts/Interface/ICombatable.cs.meta similarity index 100% rename from BlueWater/Assets/02.Scripts/Interface/IStun.cs.meta rename to BlueWater/Assets/02.Scripts/Interface/ICombatable.cs.meta diff --git a/BlueWater/Assets/02.Scripts/Interface/IStun.cs b/BlueWater/Assets/02.Scripts/Interface/IStun.cs deleted file mode 100644 index 16d439ab5..000000000 --- a/BlueWater/Assets/02.Scripts/Interface/IStun.cs +++ /dev/null @@ -1,9 +0,0 @@ -// ReSharper disable once CheckNamespace -namespace BlueWaterProject -{ - public interface IStun - { - bool IsStunned { get; set; } - void Stun(float stunTime); - } -} diff --git a/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/EarthquakeWave.cs b/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/EarthquakeWave.cs index ca7a6493b..d6d6b7567 100644 --- a/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/EarthquakeWave.cs +++ b/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/EarthquakeWave.cs @@ -12,7 +12,7 @@ namespace RhinocerosSkill [Title("추가 옵션")] [SerializeField] private bool isDrawingGizmo = true; [SerializeField] private float width = 3f; - + private Vector3 startPosition; private Vector3 halfScale; private RaycastHit[] hits; @@ -23,10 +23,8 @@ namespace RhinocerosSkill if (!isDrawingGizmo || !isUsingSkill) return; Gizmos.color = Color.red; - - var rotation = Quaternion.LookRotation(new Vector3(SkillInputData.PreviousDirection.x, 0, SkillInputData.PreviousDirection.z)); - Gizmos.matrix = Matrix4x4.TRS(startPosition + SkillInputData.PreviousDirection * Range * 0.5f, rotation, Vector3.one); - Gizmos.DrawWireCube(Vector3.zero, new Vector3(halfScale.x * 2, halfScale.y * 2, Range)); + Gizmos.matrix = Matrix4x4.TRS(startPosition, transform.rotation, Vector3.one); + Gizmos.DrawWireCube(Vector3.zero, halfScale * 2f); Gizmos.matrix = Matrix4x4.identity; } @@ -54,13 +52,14 @@ namespace RhinocerosSkill private IEnumerator SkillCoroutine(params Action[] actions) { isUsingSkill = true; - startPosition = SkillInputData.PlayerRb.position; - halfScale = transform.localScale * 0.5f; - transform.position = startPosition; + transform.position = SkillInputData.PlayerRb.position; var angle = Mathf.Atan2(SkillInputData.PreviousDirection.x, SkillInputData.PreviousDirection.z) * Mathf.Rad2Deg; transform.rotation = Quaternion.Euler(0, angle, 0); transform.localScale = new Vector3(width, 6f, Range * 2); + + var myLocalScale = transform.localScale; + halfScale = new Vector3(myLocalScale.x * 0.5f, myLocalScale.y * 0.5f, myLocalScale.z * 0.25f); ShowIndicator(); @@ -78,13 +77,21 @@ namespace RhinocerosSkill yield return null; } - - var maxSize = Physics.BoxCastNonAlloc(startPosition, halfScale, SkillInputData.PreviousDirection, - hits, Quaternion.identity, 0f, SkillInputData.TargetLayer, QueryTriggerInteraction.Ignore); + + startPosition = transform.position + transform.forward * halfScale.z; + var maxSize = Physics.BoxCastNonAlloc(startPosition, halfScale, transform.forward, + hits, transform.rotation, 0f, SkillInputData.TargetLayer, QueryTriggerInteraction.Ignore); for (var i = 0; i < maxSize; i++) { var iDamageable = hits[i].transform.GetComponent(); iDamageable?.TakeDamage(Damage); + + var iCombatable = hits[i].transform.GetComponent(); + if (iCombatable != null) + { + iCombatable.DisableMove(0.2f); + iCombatable.AddForceToDirection(transform.forward, 10f); + } } HideIndicator(); diff --git a/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/HammerAttack.cs b/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/HammerAttack.cs index 8eac5d146..9a77531bb 100644 --- a/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/HammerAttack.cs +++ b/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/HammerAttack.cs @@ -47,7 +47,7 @@ namespace RhinocerosSkill var targetPosition = SkillInputData.TargetCollider.transform.position; var targetToDirection = (targetPosition - skillPlayerPosition).normalized; transform.position = skillPlayerPosition + targetToDirection * hammerOffset; - transform.localScale = Vector3.one * Range; + transform.localScale = Vector3.one * (Range * 2f); actions[1].Invoke(); ShowIndicator(); @@ -72,6 +72,16 @@ namespace RhinocerosSkill { var iDamageable = hitColliders[i].GetComponent(); iDamageable?.TakeDamage(Damage); + + var iCombatable = hitColliders[i].GetComponent(); + if (iCombatable != null) + { + var targetToVector = hitColliders[i].transform.position - transform.position; + targetToVector.y = 0f; + var direction = targetToVector.normalized; + iCombatable.DisableMove(0.3f); + iCombatable.AddForceToDirection(direction, 7f); + } } HideIndicator(); diff --git a/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/HammerSwing.cs b/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/HammerSwing.cs index 57424d870..88834e0a1 100644 --- a/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/HammerSwing.cs +++ b/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/HammerSwing.cs @@ -83,11 +83,13 @@ namespace RhinocerosSkill isUsingSkill = true; var skillPlayerPosition = SkillInputData.PlayerRb.position; var targetPosition = SkillInputData.TargetCollider.transform.position; - var targetToDirection = (targetPosition - skillPlayerPosition).normalized; + var targetToVector = targetPosition - skillPlayerPosition; + targetToVector.y = 0f; + var targetToDirection = targetToVector.normalized; transform.position = skillPlayerPosition; var yAngle = Mathf.Atan2(targetToDirection.x, targetToDirection.z) * Mathf.Rad2Deg; transform.rotation = Quaternion.Euler(0, yAngle, 0); - transform.localScale = Vector3.one * (Range * 2); + transform.localScale = Vector3.one * (Range * 2f); actions[1].Invoke(); ShowIndicator(); @@ -110,12 +112,22 @@ namespace RhinocerosSkill var maxSize = Physics.OverlapSphereNonAlloc(transform.position, Range, hitColliders, SkillInputData.TargetLayer); for (var i = 0; i < maxSize; i++) { - var angleToTarget = Vector3.Angle(skillPlayerPosition, transform.forward); + var hitToVector = hitColliders[i].transform.position - transform.position; + hitToVector.y = 0f; + var attackDirection = hitToVector.normalized; + var angleToTarget = Vector3.Angle(attackDirection, targetToDirection); if (angleToTarget <= angle * 0.5f) { var iDamageable = hitColliders[i].GetComponent(); iDamageable?.TakeDamage(Damage); + + var iCombatable = hitColliders[i].GetComponent(); + if (iCombatable != null) + { + iCombatable.DisableMove(0.2f); + iCombatable.AddForceToDirection(attackDirection, 10f); + } } } diff --git a/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/JumpSmash.cs b/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/JumpSmash.cs index fb7bcfe09..5134077d7 100644 --- a/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/JumpSmash.cs +++ b/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/JumpSmash.cs @@ -23,7 +23,7 @@ namespace RhinocerosSkill { if (SkillInputData.TargetCollider) { - SkillInputData.TargetCollider.GetComponent().IsStunned = false; + SkillInputData.TargetCollider.GetComponent().StopStun(); } } @@ -117,7 +117,7 @@ namespace RhinocerosSkill SkillInputData.PlayerRb.useGravity = false; var elapsedTime = 0f; - var startPosition = SkillInputData.PlayerRb.transform.position; + var startPosition = SkillInputData.PlayerRb.position; var endPosition = startPosition + Vector3.up * 15f; while (elapsedTime < upTime) @@ -165,7 +165,7 @@ namespace RhinocerosSkill yield return null; } - IgnoreCollision(true); + //IgnoreCollision(true); elapsedTime = 0f; while (elapsedTime < downTime) @@ -182,22 +182,6 @@ namespace RhinocerosSkill SkillInputData.PlayerAgent.enabled = true; SkillInputData.PlayerRb.position = endPosition; - - var targetToVector = SkillInputData.TargetCollider.transform.position - SkillInputData.PlayerCollider.transform.position; - targetToVector.y = 0f; - var playerRadius = ((CapsuleCollider)SkillInputData.PlayerCollider).radius; - - if (targetToVector.magnitude < playerRadius) - { - var direction = targetToVector.normalized; - direction = direction == Vector3.zero ? Vector3.right : direction; - SkillInputData.TargetCollider.transform.GetComponent().AddForce(direction * 70f, ForceMode.Impulse); - CoolDown(1f, () => IgnoreCollision(false)); - } - else - { - IgnoreCollision(false); - } HideIndicator(); @@ -207,12 +191,25 @@ namespace RhinocerosSkill var iDamageable = hitColliders[i].GetComponent(); iDamageable?.TakeDamage(Damage); } - - maxSize = Physics.OverlapSphereNonAlloc(transform.position, Range * 2f, hitColliders, SkillInputData.TargetLayer); + + var stunRange = Range * 2f; + maxSize = Physics.OverlapSphereNonAlloc(transform.position, stunRange, hitColliders, SkillInputData.TargetLayer); for (var i = 0; i < maxSize; i++) { - var iStun = hitColliders[i].GetComponent(); - iStun?.Stun(stunTime); + var iCombatable = hitColliders[i].GetComponent(); + if (iCombatable != null) + { + var targetToVector = hitColliders[i].transform.position - transform.position; + targetToVector.y = 0f; + var direction = targetToVector.normalized; + direction = direction == Vector3.zero ? Vector3.right : direction; + var distance = targetToVector.magnitude; + var powerCoefficient = stunRange - distance; + var addForcePower = powerCoefficient / stunRange * 10f; + + iCombatable.Stun(stunTime); + iCombatable.AddForceToDirection(direction, addForcePower); + } } SkillInputData.PlayerAnimator.SetBool("isJump", false); diff --git a/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/LineRush.cs b/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/LineRush.cs index d493fca0e..30a46a97a 100644 --- a/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/LineRush.cs +++ b/BlueWater/Assets/02.Scripts/NewSkill/Rhinoceros/LineRush.cs @@ -126,6 +126,21 @@ namespace RhinocerosSkill var iDamageable = hits[i].transform.GetComponent(); iDamageable?.TakeDamage(Damage); isAttacked = true; + + var iCombatable = hits[i].transform.GetComponent(); + if (iCombatable != null) + { + var targetToVector = hits[i].transform.position - SkillInputData.PlayerRb.position; + targetToVector.y = 0f; + var hitDirection = targetToVector.normalized; + var dot = Vector3.Dot(hitDirection, direction); + var addForceDirection = dot >= 0f + ? Quaternion.Euler(0, 90, 0) * direction + : Quaternion.Euler(0, -90, 0) * direction; + + iCombatable.DisableMove(0.1f); + iCombatable.AddForceToDirection(addForceDirection, 15f); + } } } diff --git a/BlueWater/Assets/02.Scripts/Ui/FieldBossHpSlider.cs b/BlueWater/Assets/02.Scripts/Ui/FieldBossHpSlider.cs index c287029e4..56464febe 100644 --- a/BlueWater/Assets/02.Scripts/Ui/FieldBossHpSlider.cs +++ b/BlueWater/Assets/02.Scripts/Ui/FieldBossHpSlider.cs @@ -12,7 +12,7 @@ namespace BlueWaterProject [SerializeField] private Slider slider; [SerializeField] private TMP_Text nameText; [SerializeField] private Slider damageEffectSlider; - [SerializeField] private float damageEffectSpeed = 0.1f; + [SerializeField] private float duration = 1f; [Button("셋팅 초기화")] private void Init() @@ -46,13 +46,18 @@ namespace BlueWaterProject private IEnumerator DamageEffect(float value) { + var previousHp = slider.value; + var tick = (previousHp - value) / duration; + slider.value = value; while (damageEffectSlider.value > value) { - damageEffectSlider.value -= damageEffectSpeed; + damageEffectSlider.value -= tick * Time.deltaTime; yield return null; } + + damageEffectSlider.value = value; } public void SetActiveHpSlider(bool value) => gameObject.SetActive(value); diff --git a/BlueWater/Assets/02.Scripts/Weapon/ParticleWeapon.cs b/BlueWater/Assets/02.Scripts/Weapon/ParticleWeapon.cs index 818ebbb93..24427fd5f 100644 --- a/BlueWater/Assets/02.Scripts/Weapon/ParticleWeapon.cs +++ b/BlueWater/Assets/02.Scripts/Weapon/ParticleWeapon.cs @@ -119,9 +119,10 @@ namespace BlueWaterProject } } - if (onHitAction == null) + if (onHitAction.GetPersistentEventCount() <= 0) { - hit.transform.GetComponent()?.TakeDamage(power); + var iDamageable = hit.transform.GetComponent(); + iDamageable?.TakeDamage(power); } else { diff --git a/BlueWater/Assets/05.Prefabs/Characters/Enemies/FieldBosses/Rhinoceros.prefab b/BlueWater/Assets/05.Prefabs/Characters/Enemies/FieldBosses/Rhinoceros.prefab index 213a33a1a..db00a7529 100644 --- a/BlueWater/Assets/05.Prefabs/Characters/Enemies/FieldBosses/Rhinoceros.prefab +++ b/BlueWater/Assets/05.Prefabs/Characters/Enemies/FieldBosses/Rhinoceros.prefab @@ -79,7 +79,7 @@ CapsuleCollider: serializedVersion: 2 m_Bits: 0 m_LayerOverridePriority: 0 - m_IsTrigger: 0 + m_IsTrigger: 1 m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 2 @@ -262,7 +262,7 @@ SpriteRenderer: m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 - m_SortingOrder: 0 + m_SortingOrder: 1 m_Sprite: {fileID: 1514449203, guid: 57b6cf5f2c06f364988909964c965ed1, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 diff --git a/BlueWater/Assets/05.Prefabs/Characters/Enemies/RedOrc1.prefab b/BlueWater/Assets/05.Prefabs/Characters/Enemies/RedOrc1.prefab index 39a27baf3..34bd5ba37 100644 --- a/BlueWater/Assets/05.Prefabs/Characters/Enemies/RedOrc1.prefab +++ b/BlueWater/Assets/05.Prefabs/Characters/Enemies/RedOrc1.prefab @@ -3178,7 +3178,7 @@ CapsuleCollider: serializedVersion: 2 m_Bits: 0 m_LayerOverridePriority: 0 - m_IsTrigger: 0 + m_IsTrigger: 1 m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 2 diff --git a/BlueWater/Assets/05.Prefabs/Characters/Enemies/RedOrc2.prefab b/BlueWater/Assets/05.Prefabs/Characters/Enemies/RedOrc2.prefab index 2e3a7bd0c..ad67872b6 100644 --- a/BlueWater/Assets/05.Prefabs/Characters/Enemies/RedOrc2.prefab +++ b/BlueWater/Assets/05.Prefabs/Characters/Enemies/RedOrc2.prefab @@ -3372,7 +3372,7 @@ CapsuleCollider: serializedVersion: 2 m_Bits: 0 m_LayerOverridePriority: 0 - m_IsTrigger: 0 + m_IsTrigger: 1 m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 2 diff --git a/BlueWater/Assets/05.Prefabs/Characters/Players/CombatPlayer.prefab b/BlueWater/Assets/05.Prefabs/Characters/Players/CombatPlayer.prefab index 514dce3ab..bd74ba5cc 100644 --- a/BlueWater/Assets/05.Prefabs/Characters/Players/CombatPlayer.prefab +++ b/BlueWater/Assets/05.Prefabs/Characters/Players/CombatPlayer.prefab @@ -55,7 +55,7 @@ SpriteRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 2100000, guid: 8295418fd332b4a4a9a2a8aadededcad, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -244,12 +244,14 @@ MonoBehaviour: k__BackingField: playerInput: {fileID: 6121288256300454469} visualLook: {fileID: 8557381169392297019} + spriteRenderer: {fileID: 1564585232883027199} animator: {fileID: 3138574858532492034} movement: {fileID: 803982772767150407} k__BackingField: maxHp: 100 maxHitNum: 10 - attackDamage: 10 + firstAttackDamage: 10 + secondAttackDamage: 15 attackTime: 0.7 attackRange: 1.5 attackAngle: 180 @@ -305,7 +307,7 @@ MonoBehaviour: groundCheckDistance: 1 groundCheckThreshold: 0.5 k__BackingField: - moveSpeed: 10 + moveSpeed: 7 maxSlopeAngle: 30 dashSpeed: 20 dashTime: 0.2 diff --git a/BlueWater/Assets/05.Prefabs/Skills/Rhinoceros/HammerAttack.prefab b/BlueWater/Assets/05.Prefabs/Skills/Rhinoceros/HammerAttack.prefab index 3fa55ec96..89eec6060 100644 --- a/BlueWater/Assets/05.Prefabs/Skills/Rhinoceros/HammerAttack.prefab +++ b/BlueWater/Assets/05.Prefabs/Skills/Rhinoceros/HammerAttack.prefab @@ -49,7 +49,7 @@ MonoBehaviour: k__BackingField: 1 k__BackingField: 10 k__BackingField: 3 - k__BackingField: 7 + k__BackingField: 3.5 k__BackingField: 1 k__BackingField: 0 isUsingIndicator: 1