diff --git a/Assets/Prefabs/Pet/Buff.prefab b/Assets/Prefabs/Pet/Buff.prefab index 677976de48893b94a6bcae98596a79881225a308..5f54aa726d87b2e398f216433c49981a6bac3e6f 100644 --- a/Assets/Prefabs/Pet/Buff.prefab +++ b/Assets/Prefabs/Pet/Buff.prefab @@ -120,6 +120,10 @@ PrefabInstance: propertyPath: m_Layer value: 6 objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 61658b50bcfbe8640ac586f05f6340c4, type: 3} + propertyPath: m_TagString + value: Buff + objectReference: {fileID: 0} - target: {fileID: 2546548812389723016, guid: 61658b50bcfbe8640ac586f05f6340c4, type: 3} propertyPath: m_Layer value: 6 diff --git a/Assets/Prefabs/Pet/Fighter.prefab b/Assets/Prefabs/Pet/Fighter.prefab index c004d5a9269cc18a75cc971bec0625b08235c4cc..532a6883fbc1bbf77ddfb7753410f62df8744b15 100644 --- a/Assets/Prefabs/Pet/Fighter.prefab +++ b/Assets/Prefabs/Pet/Fighter.prefab @@ -5240,7 +5240,7 @@ GameObject: - component: {fileID: 1125665594388806363} m_Layer: 6 m_Name: Fighter - m_TagString: Pet + m_TagString: Fighter m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -5354,6 +5354,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: target: {fileID: 0} + previousTarget: {fileID: 0} targetCandidates: [] pet: {fileID: 4851026634604710378} --- !u!136 &3236930153314902909 diff --git a/Assets/Prefabs/Pet/Healer.prefab b/Assets/Prefabs/Pet/Healer.prefab index 64e02caa703275cf6b274156eee14febbb361768..d703b580f0369570620c14a09ff006143c5ea5d8 100644 --- a/Assets/Prefabs/Pet/Healer.prefab +++ b/Assets/Prefabs/Pet/Healer.prefab @@ -122,7 +122,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 919132149155446097, guid: 46f311046d2104da8b56be3d0a49a119, type: 3} propertyPath: m_TagString - value: Pet + value: Healer objectReference: {fileID: 0} - target: {fileID: 2546548812389723016, guid: 46f311046d2104da8b56be3d0a49a119, type: 3} propertyPath: m_Layer diff --git a/Assets/Scenes/Level01.unity b/Assets/Scenes/Level01.unity index c9bbeec0775ff33d4e5942f651a5e5805dee4085..eda8a9dea05008eb616b3f7057cea9178ba35042 100644 --- a/Assets/Scenes/Level01.unity +++ b/Assets/Scenes/Level01.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 8900000, guid: a7bed68887a07e34394d4191b3081359, type: 3} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.13346876, g: 0.18373644, b: 0.2600042, a: 1} + m_IndirectSpecularColor: {r: 0.13346848, g: 0.18373615, b: 0.26000363, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &4 LightmapSettings: @@ -1473,7 +1473,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c32067ea884548644b13cf9baddd4573, type: 3} m_Name: m_EditorClassIdentifier: - startingHealth: 100 + startingHealth: 300 currentHealth: 0 healthSlider: {fileID: 1027680864} damageImage: {fileID: 582750447} diff --git a/Assets/Scripts/Enemy/EnemyAttack.cs b/Assets/Scripts/Enemy/EnemyAttack.cs index 663719b31792ac67cc6c8678ef0b611484fdaf75..7a95426b0de0aa9de8dbc031048b28758033116a 100644 --- a/Assets/Scripts/Enemy/EnemyAttack.cs +++ b/Assets/Scripts/Enemy/EnemyAttack.cs @@ -1,5 +1,7 @@ using UnityEngine; using System.Collections; +using UnityEngine.UIElements; +using System.Linq; namespace Nightmare { @@ -14,10 +16,13 @@ namespace Nightmare AudioSource swordAudio; GameObject player; + GameObject petObject; + PetHealth petObjectHealth; PlayerHealth playerHealth; EnemyHealth enemyHealth; public ShotgunEnemyShooting shotgunEnemyShooting; bool playerInRange; + bool goodPetInRange; float timer; void Awake () @@ -54,6 +59,14 @@ namespace Nightmare // ... the player is in range. playerInRange = true; } + else if(other.gameObject.CompareTag("Healer") || other.gameObject.CompareTag("Fighter")) + { + goodPetInRange = true; + petObject = other.gameObject; + petObjectHealth = petObject.GetComponent<PetHealth>(); + + } + } void OnTriggerExit (Collider other) @@ -64,13 +77,43 @@ namespace Nightmare // ... the player is no longer in range. playerInRange = false; } + else if(other.gameObject.CompareTag("Healer") || other.gameObject.CompareTag("Fighter")){ + goodPetInRange = false; + petObject = null; + petObjectHealth = null; + } + } + void findNearbyPet() + { + GameObject[] goodPets = GameObject.FindGameObjectsWithTag("Healer"); + GameObject[] fighter = GameObject.FindGameObjectsWithTag("Fighter"); + goodPets = goodPets.Concat(fighter).ToArray(); + float shortestDistance; + float temp; + if(goodPets.Length > 0) + { + shortestDistance = Vector3.Distance(transform.position, goodPets[0].GetComponent<Transform>().position); + foreach(GameObject pet in goodPets) + { + temp = Vector3.Distance(transform.position, pet.GetComponent<Transform>().position); + if(temp < shortestDistance) + { + shortestDistance = temp; + petObject = pet; + petObjectHealth = petObject.GetComponent<PetHealth>(); + + } + } + } + } void Update () { if (isPaused) return; - + + findNearbyPet(); // Add the time since Update was last called to the timer. timer += Time.deltaTime; @@ -81,10 +124,12 @@ namespace Nightmare if (shotgunEnemyShooting) { // Calculate the distance between the enemy and the player - float distanceToPlayer = Vector3.Distance(transform.position, player.transform.position); - if (distanceToPlayer < 10) ShotgunAttack(); + ShotgunAttack(); + } - else if (playerInRange) SwordAttack(); + else if (playerInRange || goodPetInRange) SwordAttack(); + + } // If the player has zero or less health... @@ -99,16 +144,32 @@ namespace Nightmare { // Reset the timer. timer = 0f; - - // If the player has health to lose... - if(playerHealth.currentHealth > 0) + float distanceToPlayer = Vector3.Distance(transform.position, player.transform.position); + float distanceToPet; + + if (distanceToPlayer < 10) { - // Rotate the enemy to face the player - transform.LookAt(player.transform.position); + // If the player has health to lose... + if (playerHealth.currentHealth > 0) + { + // Rotate the enemy to face the player + transform.LookAt(player.transform.position); - // ... damage the player. - shotgunEnemyShooting.Shoot(attackDamage); + // ... damage the player. + shotgunEnemyShooting.Shoot(attackDamage); + } + } + else if(petObject != null) + { + distanceToPet = Vector3.Distance(transform.position, petObject.transform.position); + if (petObject.GetComponent<PetHealth>().currentHealth > 0 && distanceToPet < 10) + { + transform.LookAt(petObject.transform.position); + shotgunEnemyShooting.Shoot(attackDamage); + } } + + } void SwordAttack() @@ -117,14 +178,30 @@ namespace Nightmare timer = 0f; // If the player has health to lose... - if (playerHealth.currentHealth > 0) + if (playerHealth != null && playerHealth.currentHealth > 0) { // ... damage the player. // If sword - if (swordAnim) swordAnim.SetTrigger("Attack"); - if (swordAudio) swordAudio.Play(); - playerHealth.TakeDamage(attackDamage); + if (playerInRange) + { + if (swordAnim) swordAnim.SetTrigger("Attack"); + if (swordAudio) swordAudio.Play(); + playerHealth.TakeDamage(attackDamage); + } + //If the pet has health to lose + } + else if(petObjectHealth != null && petObjectHealth.currentHealth > 0) + { + // and in range + if (goodPetInRange) + { + if (swordAnim) swordAnim.SetTrigger("Attack"); + if (swordAudio) swordAudio.Play(); + petObjectHealth.TakeDamage(attackDamage); + + } } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Enemy/JenderalAbility.cs b/Assets/Scripts/Enemy/JenderalAbility.cs index de72943228f5f6cc0a2bc10a0bad9d5eebfd89ac..94409326d83dd026d92de8b051e78f9475ef8753 100644 --- a/Assets/Scripts/Enemy/JenderalAbility.cs +++ b/Assets/Scripts/Enemy/JenderalAbility.cs @@ -3,12 +3,17 @@ using System.Collections.Generic; using UnityEngine; using Nightmare; +using System.Linq; + public class JenderalAbility : MonoBehaviour { Animator anim; GameObject player; + GameObject petObject; PlayerHealth playerHealth; + PetHealth petObjectHealth; bool playerInRange; + bool petInRange; float timer; public int damageOvertime = 10; public float abilityRadius = 5f; @@ -27,9 +32,10 @@ public class JenderalAbility : MonoBehaviour { // Check if player is in radius of its unique ability CheckPlayerInRange(); + CheckPetInRange(); timer += Time.deltaTime; - if (timer >= 1 && playerInRange) + if (timer >= 1 && (playerInRange || petInRange)) { Ability(); } @@ -39,6 +45,32 @@ public class JenderalAbility : MonoBehaviour anim.SetTrigger("PlayerDead"); } } + void findNearbyPet() + { + GameObject[] goodPets; + GameObject[] fighter; + goodPets = GameObject.FindGameObjectsWithTag("Healer"); + fighter = GameObject.FindGameObjectsWithTag("Fighter"); + goodPets = goodPets.Concat(fighter).ToArray(); + float shortestDistance; + float temp; + if (goodPets != null && goodPets.Length > 0) + { + shortestDistance = Vector3.Distance(transform.position, goodPets[0].GetComponent<Transform>().position); + foreach (GameObject pet in goodPets) + { + temp = Vector3.Distance(transform.position, pet.GetComponent<Transform>().position); + if (temp < shortestDistance) + { + shortestDistance = temp; + petObject = pet; + petObjectHealth = petObject.GetComponent<PetHealth>(); + + } + } + } + + } private void CheckPlayerInRange() { @@ -57,16 +89,56 @@ public class JenderalAbility : MonoBehaviour } } + private void CheckPetInRange() + { + findNearbyPet(); + if(petObject != null) + { + float distance = Mathf.Sqrt(Mathf.Pow(transform.position.x - petObject.transform.position.x, 2) + + Mathf.Pow(transform.position.y - petObject.transform.position.y, 2) + + Mathf.Pow(transform.position.z - petObject.transform.position.z, 2)); + + + if (distance <= abilityRadius) + { + petInRange = true; + } + else + { + petInRange = false; + } + } + + + } + + + + private void Ability() { // Reset timer timer = 0f; - // If the player has health to lose... - if (playerHealth.currentHealth > 0) + // If the player in range + if (playerInRange) { - // ... damage the player. - playerHealth.TakeDamage(damageOvertime); + // if the player has health to lose + if (playerHealth.currentHealth > 0) + { + // ... damage the player. + playerHealth.TakeDamage(damageOvertime); + } + // if the pet in range + }else if (petInRange) + { + // if the pet has health to lose + if(petObjectHealth.currentHealth > 0) + { + // ... damage the pet + petObjectHealth.TakeDamage(damageOvertime); + } } + } } diff --git a/Assets/Scripts/Enemy/RajaAbility.cs b/Assets/Scripts/Enemy/RajaAbility.cs index f26e31ea3ab05848108928130c52202a53523b77..07b7ec629723217b428dc4b40a7cd3c1d7cf37e8 100644 --- a/Assets/Scripts/Enemy/RajaAbility.cs +++ b/Assets/Scripts/Enemy/RajaAbility.cs @@ -2,15 +2,21 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using Nightmare; +using System.Linq; +using UnityEngine.AI; public class RajaAbility : MonoBehaviour { Animator anim; GameObject player; PlayerHealth playerHealth; + GameObject petObject; + PetHealth petObjectHealth; + NavMeshAgent navmeshPet; PlayerMovement playerMovement; WeaponManager weaponManager; bool playerInRange; + bool petInRange; float timer; public int damageOvertime = 10; public float abilityRadius = 7f; @@ -37,9 +43,10 @@ public class RajaAbility : MonoBehaviour { // Check if player is in radius of its unique ability CheckPlayerInRange(); + CheckPetInRange(); timer += Time.deltaTime; - if (timer >= 1 && playerInRange) + if (timer >= 1 && (playerInRange || petInRange)) { Ability(); } @@ -48,6 +55,23 @@ public class RajaAbility : MonoBehaviour { playerMovement.speed = playerMovement.originSpeed; } + if (!petInRange && petObject != null) + { + if (petObject.GetComponent<Follow>() != null) + { + navmeshPet.speed = petObject.GetComponent<Follow>().initialSpeed; + } + else if (petObject.GetComponent<FighterMove>() != null) + { + navmeshPet.speed = petObject.GetComponent<FighterMove>().initialSpeed; + } + + if (petObject.GetComponent<FighterAttack>() != null) + { + petObject.GetComponent<FighterAttack>().currentDamage = petObject.GetComponent<FighterAttack>().initialDamage; + } + + } if (playerHealth.currentHealth <= 0) { @@ -55,6 +79,52 @@ public class RajaAbility : MonoBehaviour } } + void findNearbyPet() + { + GameObject[] goodPets = GameObject.FindGameObjectsWithTag("Healer"); + GameObject[] fighter = GameObject.FindGameObjectsWithTag("Fighter"); + goodPets = goodPets.Concat(fighter).ToArray(); + float shortestDistance; + float temp; + if (goodPets.Length > 0) + { + shortestDistance = Vector3.Distance(transform.position, goodPets[0].GetComponent<Transform>().position); + foreach (GameObject pet in goodPets) + { + temp = Vector3.Distance(transform.position, pet.GetComponent<Transform>().position); + if (temp < shortestDistance) + { + shortestDistance = temp; + petObject = pet; + petObjectHealth = petObject.GetComponent<PetHealth>(); + navmeshPet = petObject.GetComponent<NavMeshAgent>(); + } + } + } + + } + private void CheckPetInRange() + { + findNearbyPet(); + if(petObject != null) + { + float distance = Mathf.Sqrt(Mathf.Pow(transform.position.x - petObject.transform.position.x, 2) + + Mathf.Pow(transform.position.y - petObject.transform.position.y, 2) + + Mathf.Pow(transform.position.z - petObject.transform.position.z, 2)); + + + if (distance <= abilityRadius) + { + petInRange = true; + } + else + { + petInRange = false; + } + } + + + } private void CheckPlayerInRange() { float distance = Mathf.Sqrt(Mathf.Pow(transform.position.x - player.transform.position.x, 2) + @@ -78,17 +148,32 @@ public class RajaAbility : MonoBehaviour timer = 0f; // If the player has health to lose... - if (playerHealth.currentHealth > 0) + if (playerHealth.currentHealth > 0 && playerInRange) { // ... damage the player. playerHealth.TakeDamage(damageOvertime); - if (!playerMovement.isTwoTimeSpeed){ + if (!playerMovement.isTwoTimeSpeed) + { playerMovement.speed -= playerMovement.speed * 0.2f; } - if (!weaponManager.cheatOn){ + if (!weaponManager.cheatOn) + { weaponManager.baseDamage -= weaponManager.baseDamage * 0.2f; } } + if (petObjectHealth.currentHealth > 0 && petInRange) + { + petObjectHealth.TakeDamage(damageOvertime); + navmeshPet.speed -= navmeshPet.speed * 0.2f; + + if (petObject.GetComponent<FighterAttack>() != null) + { + petObject.GetComponent<FighterAttack>().currentDamage -= 0.2 * petObject.GetComponent<FighterAttack>().currentDamage; + + } + + } } -} \ No newline at end of file +} + diff --git a/Assets/Scripts/Pet/FighterAttack.cs b/Assets/Scripts/Pet/FighterAttack.cs index 274cad8b782c5fe46d27bc8e7079e5efbf80dddf..138fd4b092d34e09ef00d88f8d21736f175b3a86 100644 --- a/Assets/Scripts/Pet/FighterAttack.cs +++ b/Assets/Scripts/Pet/FighterAttack.cs @@ -7,7 +7,8 @@ using static UnityEngine.GraphicsBuffer; public class FighterAttack : PausibleObject { public float intervalAttack = 0.7f; - public int damage = 3; + public double initialDamage = 5; + public double currentDamage; PetHealth health; GameObject enemy; Vector3 hitpoint; @@ -19,6 +20,7 @@ public class FighterAttack : PausibleObject health = GetComponent<PetHealth>(); anim = GetComponent<Animator>(); StartPausible(); + currentDamage = initialDamage; } void OnDestroy() @@ -54,6 +56,7 @@ public class FighterAttack : PausibleObject } } + IEnumerator ResetAttackAnimation() { @@ -72,7 +75,7 @@ public class FighterAttack : PausibleObject enemyCurrentHealth = (int)enemyHealth.CurrentHealth(); if (enemyCurrentHealth > 0) { - enemyHealth.TakeDamage(damage, hitpoint); + enemyHealth.TakeDamage(currentDamage, hitpoint); anim.SetBool("IsAttacking", true); StartCoroutine(ResetAttackAnimation()); } diff --git a/Assets/Scripts/Pet/FighterMove.cs b/Assets/Scripts/Pet/FighterMove.cs index 1399a83651b6853af127b374a1e137f323246dbc..76aa15624684556c2e99606652efdea1e003953d 100644 --- a/Assets/Scripts/Pet/FighterMove.cs +++ b/Assets/Scripts/Pet/FighterMove.cs @@ -7,40 +7,60 @@ using UnityEngine.AI; public class FighterMove : MonoBehaviour { public GameObject target; + public GameObject previousTarget; public GameObject[] targetCandidates; public NavMeshAgent pet; PetHealth goodPetHealth; + public float initialSpeed; void Start() { pet = GetComponent<NavMeshAgent>(); goodPetHealth = GetComponent<PetHealth>(); + initialSpeed = pet.speed; } - void Update() + void findNearbyEnermy() { - if (goodPetHealth != null && !goodPetHealth.isDead()) + targetCandidates = GameObject.FindGameObjectsWithTag("Enemy"); + if(targetCandidates.Length > 0) { - targetCandidates = GameObject.FindGameObjectsWithTag("Enemy"); - if (targetCandidates.Length > 0) + target = targetCandidates[0]; + float shortestDistance = Vector3.Distance(this.transform.position, target.transform.position); + float current; + for (int i = 0; i < targetCandidates.Length; i++) { - target = targetCandidates[0]; - float shortestDistance = Vector3.Distance(this.transform.position, target.transform.position); - float current; - for (int i = 0; i < targetCandidates.Length; i++) + current = Vector3.Distance(this.transform.position, targetCandidates[i].transform.position); + if (current > shortestDistance) { - current = Vector3.Distance(this.transform.position, targetCandidates[i].transform.position); - if (current > shortestDistance) - { - shortestDistance = current; - target = targetCandidates[i]; - } + shortestDistance = current; + target = targetCandidates[i]; } + } + } + + } + + void Update() + { + if (goodPetHealth != null && !goodPetHealth.isDead()) + { + if (previousTarget != null && previousTarget.GetComponent<EnemyHealth>().currentHealth > 0) + { + pet.SetDestination(previousTarget.transform.position); + } + else + { + findNearbyEnermy(); pet.SetDestination(target.transform.position); + previousTarget = target; } } + + + } } diff --git a/Assets/Scripts/Pet/Follow.cs b/Assets/Scripts/Pet/Follow.cs index b46481f9dbc617daf62f46374a92e08393a9d0f3..5b2330e8998802ace6241a608465df6ed87a388f 100644 --- a/Assets/Scripts/Pet/Follow.cs +++ b/Assets/Scripts/Pet/Follow.cs @@ -10,12 +10,14 @@ public class Follow : MonoBehaviour NavMeshAgent pet; public Transform player; PetHealth petHealth; + public float initialSpeed; void Start() { petHealth = GetComponent<PetHealth>(); pet = GetComponent<NavMeshAgent>(); player = GameObject.FindGameObjectWithTag("Player").transform; + initialSpeed = (float)pet.speed; } // Update is called once per frame diff --git a/Assets/Scripts/Pet/GoodPetHealth.cs b/Assets/Scripts/Pet/GoodPetHealth.cs index 8d61d145930524540fce69f44447282eb359960b..86b7a47f20090509e962e5325d0e152884a7d450 100644 --- a/Assets/Scripts/Pet/GoodPetHealth.cs +++ b/Assets/Scripts/Pet/GoodPetHealth.cs @@ -28,6 +28,7 @@ public class PetHealth : MonoBehaviour { currentHealth -= amount; anim.SetBool("IsAttacked", true); + Debug.Log("update health pet: " + currentHealth); StartCoroutine(ResetIsAttacked()); } @@ -60,6 +61,8 @@ public class PetHealth : MonoBehaviour void Update() { + + if(playerHealth.currentHealth <= 0) { currentHealth = 0; diff --git a/Assets/Scripts/Pet/Healer.cs b/Assets/Scripts/Pet/Healer.cs index 17bdc4c188cea64d3061b1ec98cbffabcbc92a04..7a4a3918e382a21d054b6648a6d1e00317c7f913 100644 --- a/Assets/Scripts/Pet/Healer.cs +++ b/Assets/Scripts/Pet/Healer.cs @@ -10,16 +10,14 @@ public class PetHealer : MonoBehaviour public float healingInterval = 2; void Start() { - playerHealth = GetComponentInParent<PlayerHealth>(); + playerHealth = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerHealth>(); StartCoroutine(healPlayer()); - Debug.Log(playerHealth.currentHealth); } private IEnumerator healPlayer() { while (true) { - Debug.Log(playerHealth.currentHealth); if (playerHealth.currentHealth > 0 && playerHealth.currentHealth < playerHealth.startingHealth) { playerHealth.GotHealed(healingAmount); diff --git a/Assets/Scripts/Weapon/ShotgunEnemyShooting.cs b/Assets/Scripts/Weapon/ShotgunEnemyShooting.cs index e0919c4399faee2c2561b4308dd7da19936f9a83..4a48fa0c98f48d8105cb7628c5fc2308d5895900 100644 --- a/Assets/Scripts/Weapon/ShotgunEnemyShooting.cs +++ b/Assets/Scripts/Weapon/ShotgunEnemyShooting.cs @@ -97,13 +97,20 @@ public class ShotgunEnemyShooting : PausibleObject { // Try and find an PlayerHealth script on the gameobject hit. PlayerHealth playerHealth = shootHit.collider.GetComponent<PlayerHealth>(); - + PetHealth petHealth = shootHit.collider.GetComponent<PetHealth>(); + double damage; if (playerHealth != null) { // the damage taken is based on the distance from the player to the enemy - double damage = attackDamage - Vector3.Distance(transform.position, playerHealth.transform.position); + damage = attackDamage - Vector3.Distance(transform.position, playerHealth.transform.position); playerHealth.TakeDamage(damage); } + // check if there is pet nearby, if no player + else if(petHealth != null) + { + damage = attackDamage - Vector3.Distance(transform.position, petHealth.transform.position); + petHealth.TakeDamage(damage); + } // Set the second position of the line renderer to the point the raycast hit. gunLines[i].SetPosition(1, shootHit.point); diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index e3269c93da0696cc9800511d9c9b30bc2f3c6d69..bc915f164c30c08772499ce93c9d96800b8e9c53 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2022.3.25f1 -m_EditorVersionWithRevision: 2022.3.25f1 (530ae0ba3889) +m_EditorVersion: 2022.3.24f1 +m_EditorVersionWithRevision: 2022.3.24f1 (334eb2a0b267) diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index c65f6a552f729f54317fa2f3415532612482a352..af22911f2a88b799c0521af5257fd116fd1c4c74 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -14,6 +14,9 @@ TagManager: - Sword - WeaponManager - Pet + - Buff + - Fighter + - Healer layers: - Default - TransparentFX