티스토리 뷰

오늘 한 작업

  • 몬스터 관련 코드 정리
  • 체력바 및 데미지 표기 추가
  • 스킬 모듈화 추가 정리

 

코드

스킬 모듈화 추가 정리

더보기

부모 클래스(코루틴 함수 이쪽으로 이동)

public class Active_Base : ScriptableObject
{
    public GameObject Atk_Obj;

    public int[] Damage = new int[5]; // 스킬의 기본 공격력.

    public float Size;
    public float Velocity;

    public float Point_Time; // -1: 기본 공격
    public int Point_Amount; // -1: 기본 공격

    public int Max_Count;
    public float Count_Term;
    public float Rotate_Count;

    public float Distance;
    public float Angle_Term;

    public int Branch; // 공격 개수. 정확히는 '원점(ex. 캐릭터) 기준으로 360도를 n등분하여 형성되는 공격의 개수'다.
    public int Way; // 공격 개수. 정확히는 '부채꼴로 발사되는 공격의 갯수'다.
    public int Refeat; // 공격 개수. 정확히는 '일렬로 순차 발사되는 공격의 갯수'다.
    public int Line; // 공격 개수. 정확히는 '일렬로 나열되는 공격의 갯수'이다. 투사체는 속도 변화로 제작된다.

    public virtual void Create_Obj(Vector3 _Position, float _rotation, bool _Friendly, float _Atk_Mul)
    {

    }

    public virtual IEnumerator Use_Active(GameObject Unit, float _rotation, bool _Friendly, float _Atk_Mul)
    {
        for (int i = 0; i < Max_Count; i++)
        {
            for (int j = 0; j < Refeat; j++)
            {
                for (int k = 0; k < Branch; k++)
                {
                    for (int l = 0; l < Line; l++)
                    {
                        for (int n = 0; n < Way; n++)
                        {
                            float Skill_Rotation = _rotation + (i * Rotate_Count) + (Angle_Term * (((Way - 1) / 2) - n)) + (360 / Branch * k);
                            Vector3 Skill_Position = Unit.transform.position + (Quaternion.Euler(0.0f, 0.0f, Skill_Rotation) * Vector3.right * l * Size);


                            Create_Obj(Skill_Position, Skill_Rotation, _Friendly, _Atk_Mul);
                        }
                    }
                }

                yield return new WaitForSeconds(0.01f);
            }

            yield return new WaitForSeconds(Count_Term);
        }
    }
}

 

적 관련 코드(추가분만 기재)

더보기
public List<Active_Cell> Active_Array = new List<Active_Cell>();

public virtual void Patton(float Angle, float Distance)
{
    if (Distance < 1.0f)
    {
        if (timer >= refeat)
        {
            StartCoroutine(Active_Array[0].Active.Use_Active(gameObject, Angle, false, Atk / 100.0f));
            timer = 0.0f;
        }

        else
            timer += Time.deltaTime;
    }

    else
        timer = Mathf.Max(timer - Time.deltaTime, 0.0f);
}

public virtual void Move_Chara(float Degree, float Distance)
{
    transform.position += Quaternion.Euler(0.0f, 0.0f, Degree) * Vector3.right * velocity;
}

※ 적 체력바 및 데미지 표기 추가는 간단한 코드 몇줄 추가한 것이라 따로 기재하지 않습니다.

 

결과물(영상)

 

※ 현재 일반 몬스터의 패턴이 매우 높은 확률로 발생하지 않는 문제가 발생하고 있습니다.

     ┗ 아주 가끔씩 정상 작동 하는 것을 보면 기능 활용을 잘못해서 오류가 난 거 같습니다.

          ┗ 정황상 코루틴을 너무 남용해서 그런 듯 합니다. 개인적으로 수정할 예정입니다.

     ┗ 확인 결과, 생성 알고리즘에 문제가 있어 Z좌표가 어그러져서 발생한 사항이었습니다.

          ┗ 원래는 임시로 처리해 놓고 추후 진행할 내용이었어서 발생한 문제였습니다.

          ┗ 관련 항목은 다음 TIL에서 서술할 예정입니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함