-
Notifications
You must be signed in to change notification settings - Fork 2
hotfix WeaponAbstraction
pianoop edited this page Jun 10, 2023
·
3 revisions
새로 만들 무기에 다음 주의사항들을 적용해주시면 됩니다.
무기 prefab에는 각 무기.cs만 담아주시면 됩니다. (inspector창에서 weapon.cs와 무기.cs를 같이 add component했던 과거와 달라짐)
- 무기 script 작성시 Weapon 상속
public class Knife : Weapon
{
...
}
- virtual로 된 함수를 각 무기 class에서 구현해야 함 (필요 없는 경우에 빈 함수로 작성)
public class Weapon : MonoBehaviour
{
...
public virtual void EvolutionProcess() { } // 무기 진화 시에 호출, 진화 시에 변화를 작성
public virtual void Attack() { } // 무기 공격 시 호출
}
- Attack에 필요한 무기 prefab은 SkillFiringSystem.instance...를 사용하여 가져오기
public override void Attack() // knife 예시
{
GameObject objPre;
if (isEvoluction())
objPre = SkillFiringSystem.instance.evolutionWeaponPrefabs[WeaponIndex];
else
objPre = SkillFiringSystem.instance.weaponPrefabs[WeaponIndex];
...
}
- OnTriggerEnter() 같은 함수의 수정이 필요한 경우 Weapon.cs의 원본 함수를 참고하여 수정.
private void OnTriggerEnter2D(Collider2D col) // knife.cs 예시
{
if (col.CompareTag("DestructibleObj"))
{
if (col.gameObject.TryGetComponent(out DestructibleObject destructible))
{
destructible.TakeDamage(weaponTotalStats[(int)Enums.WeaponStat.Might], WeaponIndex);
}
}
if (col.gameObject.tag == "Monster")
{
col.gameObject.GetComponent<Enemy>().TakeDamage(weaponTotalStats[(int)Enums.WeaponStat.Might], WeaponIndex);
if (WeaponIndex == 6 && bEvolution)
{
GameManager.instance.character.RestoreHealth(1);
GameManager.instance.EvoGralicRestoreCount++;
if (GameManager.instance.EvoGralicRestoreCount == 60)
{
GameManager.instance.EvoGralicRestoreCount = 0;
weaponTotalStats[((int)Enums.WeaponStat.Might)] += 1;
}
}
}
if (col.gameObject.tag == "Monster")
{
touch++;
}
}
Weapon.cs 내에서
public bool IsMaster()
{
return WeaponLevel == WeaponMaxLevel;
}
public bool IsEvoluction()
{
return bEvolution;
}
IsMaster(): 해당 무기가 최대 레벨에 도달했는지 T/F 반환 IsEvolution(): 해당 무기가 진화가 되었는지 T/F 반환