From 1f08ab929a7379dbf4a91b2656639deeed949577 Mon Sep 17 00:00:00 2001 From: Malik Rafsanjani <pro.malikakbar2357@gmail.com> Date: Sat, 8 Apr 2023 21:05:20 +0700 Subject: [PATCH] feat: finalize arrow and bow --- Assets/Prefabs/Arrow Variant.prefab | 3 +- Assets/Scenes/MainScene.unity | 285 +++++++++++++++++++ Assets/Scripts/Player/Weapons/PlayerArrow.cs | 12 +- Assets/Scripts/Player/Weapons/PlayerBow.cs | 54 +++- 4 files changed, 339 insertions(+), 15 deletions(-) diff --git a/Assets/Prefabs/Arrow Variant.prefab b/Assets/Prefabs/Arrow Variant.prefab index 9f1391f..0d3cfb6 100644 --- a/Assets/Prefabs/Arrow Variant.prefab +++ b/Assets/Prefabs/Arrow Variant.prefab @@ -93,7 +93,7 @@ Rigidbody: m_Mass: 0.1 m_Drag: 0 m_AngularDrag: 0 - m_UseGravity: 0 + m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 0 m_Constraints: 0 @@ -124,5 +124,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7f8c498c04cbf5a46a4a31fee6804c84, type: 3} m_Name: m_EditorClassIdentifier: - damage: 200 torque: 0 diff --git a/Assets/Scenes/MainScene.unity b/Assets/Scenes/MainScene.unity index 3b2df5e..1f419a8 100644 --- a/Assets/Scenes/MainScene.unity +++ b/Assets/Scenes/MainScene.unity @@ -375,6 +375,43 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 393736415} m_CullTransparentMesh: 1 +--- !u!1 &520206061 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 520206062} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &520206062 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 520206061} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 749821179} + m_Father: {fileID: 1495738172} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &556587518 GameObject: m_ObjectHideFlags: 0 @@ -5681,6 +5718,82 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &749821178 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 749821179} + - component: {fileID: 749821181} + - component: {fileID: 749821180} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &749821179 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 749821178} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 520206062} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &749821180 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 749821178} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9811321, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &749821181 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 749821178} + m_CullTransparentMesh: 1 --- !u!1 &836626386 GameObject: m_ObjectHideFlags: 0 @@ -5712,6 +5825,82 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 130, z: 0} +--- !u!1 &845113955 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 845113956} + - component: {fileID: 845113958} + - component: {fileID: 845113957} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &845113956 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845113955} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1495738172} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &845113957 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845113955} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.34964728, g: 1, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &845113958 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845113955} + m_CullTransparentMesh: 1 --- !u!1 &885835809 GameObject: m_ObjectHideFlags: 0 @@ -6045,6 +6234,96 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1495738171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1495738172} + - component: {fileID: 1495738173} + m_Layer: 5 + m_Name: RechargeArrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1495738172 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495738171} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 845113956} + - {fileID: 520206062} + m_Father: {fileID: 2145307755} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 149, y: 75.9} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1495738173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1495738171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 0} + m_FillRect: {fileID: 749821179} + m_HandleRect: {fileID: 0} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 100 + m_WholeNumbers: 0 + m_Value: 100 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] --- !u!1 &1565704978 GameObject: m_ObjectHideFlags: 0 @@ -6484,6 +6763,11 @@ MonoBehaviour: reloadTime: 1 playerArrowPrefab: {fileID: 5707969127914954734, guid: 43ff8f8509c207f43a1a3b1c1520cdc6, type: 3} arrowSpawnPoint: {fileID: 331090232} + chargeSlider: {fileID: 1495738173} + chargeImage: {fileID: 0} + maxCharge: 3 + colorMax: {r: 0, g: 1, b: 0, a: 1} + colorMin: {r: 1, g: 0, b: 0, a: 1} --- !u!4 &2079963337 stripped Transform: m_CorrespondingSourceObject: {fileID: 3766448033198164798, guid: 80e55f4de317be346be8e7fe0b4694a7, type: 3} @@ -6673,6 +6957,7 @@ RectTransform: - {fileID: 167059736} - {fileID: 2081210583} - {fileID: 1565704979} + - {fileID: 1495738172} m_Father: {fileID: 0} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Scripts/Player/Weapons/PlayerArrow.cs b/Assets/Scripts/Player/Weapons/PlayerArrow.cs index f50e2a1..801194d 100644 --- a/Assets/Scripts/Player/Weapons/PlayerArrow.cs +++ b/Assets/Scripts/Player/Weapons/PlayerArrow.cs @@ -4,9 +4,6 @@ using UnityEngine; public class PlayerArrow : MonoBehaviour { - [SerializeField] - private int damage; - [SerializeField] private float torque; @@ -14,6 +11,8 @@ public class PlayerArrow : MonoBehaviour private bool didHit; + private float damageMultiplier = 1f; + private void Awake() { rb = GetComponent<Rigidbody>(); @@ -23,14 +22,15 @@ public class PlayerArrow : MonoBehaviour void OnTriggerEnter(Collider other) { - Debug.Log("Hitting " + other); - if (didHit) return; didHit = true; if (other.gameObject.TryGetComponent<EnemyHealth>(out var enemyHealth)) { - enemyHealth.TakeDamage(damage, enemyHealth.transform.position); + var energy = 0.5 * rb.mass * rb.velocity.magnitude * rb.velocity.magnitude; + var damage = energy * damageMultiplier; + Debug.Log("damage: "+ damage); + enemyHealth.TakeDamage((int)damage, enemyHealth.transform.position); } rb.velocity = Vector3.zero; diff --git a/Assets/Scripts/Player/Weapons/PlayerBow.cs b/Assets/Scripts/Player/Weapons/PlayerBow.cs index a6a949e..db61593 100644 --- a/Assets/Scripts/Player/Weapons/PlayerBow.cs +++ b/Assets/Scripts/Player/Weapons/PlayerBow.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.UI; public class PlayerBow : MonoBehaviour { @@ -16,9 +17,31 @@ public class PlayerBow : MonoBehaviour private PlayerArrow curArrow; private bool isReload = false; + public Slider chargeSlider; + [SerializeField] + private float maxCharge = 3f; + private float chargeTime = 0f; + private float arrowEnergy = 0f; + + public Color colorMax = Color.green; + public Color colorMin = Color.red; + void Awake() { - //ReloadArrow(); + ResetCharge(); + chargeSlider.gameObject.SetActive(true); + } + + private void OnEnable() + { + ResetCharge(); + chargeSlider.gameObject.SetActive(true); + } + + private void OnDisable() + { + ResetCharge(); + chargeSlider.gameObject.SetActive(false); } public void Reload() @@ -30,12 +53,31 @@ public class PlayerBow : MonoBehaviour void Update() { - if (Input.GetMouseButtonDown(0)) + arrowEnergy = chargeTime > maxCharge ? maxCharge : chargeTime; + + if (Input.GetMouseButton(0)) { - Shoot(); + chargeSlider.value = arrowEnergy * 100; + chargeTime += Time.deltaTime; + } + + if (Input.GetMouseButtonUp(0)) + { + Shoot(arrowEnergy); + ResetCharge(); + } + + if (Input.GetKeyDown(KeyCode.J)) + { + Shoot(0); } } + private void ResetCharge() + { + chargeTime = 0; + chargeSlider.value = 0; + } private IEnumerator ReloadCorutine() { @@ -45,16 +87,14 @@ public class PlayerBow : MonoBehaviour private void ReloadArrow() { - /*curArrow.transform.SetParent(arrowSpawnPoint.transform, false);*/ isReload = false; } - public void Shoot() + public void Shoot(float energy) { curArrow = Instantiate(playerArrowPrefab, transform.position, arrowSpawnPoint.transform.rotation); var force = curArrow.transform.forward; - curArrow.GetComponent<Rigidbody>().AddRelativeForce(force * -40); - // Reload(); + curArrow.GetComponent<Rigidbody>().AddRelativeForce(-400 * energy * force); } public bool IsReady() -- GitLab