Skip to content

hotfix WeaponAbstraction

pianoop edited this page Jun 10, 2023 · 3 revisions

Weapon class를 각 무기에 상속 시킬 수 있게 리펙토링 함

새로 만들 무기에 다음 주의사항들을 적용해주시면 됩니다.
무기 prefab에는 각 무기.cs만 담아주시면 됩니다. (inspector창에서 weapon.cs와 무기.cs를 같이 add component했던 과거와 달라짐)

주의사항

  1. 무기 script 작성시 Weapon 상속
public class Knife : Weapon
{
...
}
  1. virtual로 된 함수를 각 무기 class에서 구현해야 함 (필요 없는 경우에 빈 함수로 작성)
public class Weapon : MonoBehaviour
{
    ...
    public virtual void EvolutionProcess() { }  // 무기 진화 시에 호출, 진화 시에 변화를 작성
    public virtual void Attack() { }            // 무기 공격 시 호출
}
  1. Attack에 필요한 무기 prefab은 SkillFiringSystem.instance...를 사용하여 가져오기
public override void Attack() // knife 예시
{
    GameObject objPre;
    if (isEvoluction())
        objPre = SkillFiringSystem.instance.evolutionWeaponPrefabs[WeaponIndex];
    else
        objPre = SkillFiringSystem.instance.weaponPrefabs[WeaponIndex];
    ...
}
  1. 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 반환

Clone this wiki locally