개인 프로젝트

게임 제작일기 1

Hun die 2023. 9. 24. 13:00

장르 : 로그라이크 + 오토체스류?

제작 인원 : 1

제작 환경 : 유니티

 

일단 가장 먼저 개발해야 하는게 무엇일까 생각하다가 오토체스로 싸우는 부분부터 만들기로 했다.

일단 이동을 위한 좌표를 위 처럼 지정했고

간단한 길찾기 알고리즘을 만들어 적용시켰다. 

 

.......... 약간 길 찾는게 멍청하긴 해도 일단 잘 찾으니까... 약간의 인간미로 합격점을 주고 다음으로 넘어갔다.

유닛 행동방식

public static Vector3 Get_RoundVector(Vector3 vector) { return new Vector3(Mathf.Round(vector.x), Mathf.Round(vector.y), Mathf.Round(vector.z)); }

public static int Get_Distance(Vector3 start, Vector3 end)
{
    Vector3 round = Vector.Get_RoundVector(start) - Vector.Get_RoundVector(end);
    
    int X = (int)round.x, Z = (int)round.z;

    if (X < 0) X *= -1;
    if (Z < 0) Z *= -1;
    
    if (X > Z) return X;
    if (X < Z) return Z;
    
    return X;
}

두번째로 대상과 나의 사거리에 해야할 행동이 달라져야 하기에 사거리를 계산하는 방식을 만들었다.

 

그리고 유닛은 스크립터블 오브젝트를 활용하여 만들었고 에셋은 에셋스토어에서 RTS용 에셋을 구매해서 사용했다.

유닛을 만들고 간단한 애니메이션 까지 넣으니 괜찮아 만족스럽다 :)

 

잠깐 떠오른 아이디어로 유닛에게 개성을 주기위해서 유닛의 이름을 랜덤으로 정해줬다.

'성'과 '이름'을 각각 다른 배열에 저장했고 둘을 합치니 많은 레파토리의 이름이 탄생했고 이는 각 유닛의 개성을 만들어 줄 것이다.

+간단한 UI를 추가했다.

 

생명력 UI는 따로 Struct를 써서 따로 만든 프리팹을 오브젝트에 넣으면 바로 작동되는 형식으로 만들었다.

public struct HMP
{
    private GameObject _Object;
    public GameObject Object
    {
        get { return _Object; }
        set
        {
            Text_Name = value.transform.Find("NameText").GetComponent<Text>();
            Slider_HP = value.transform.Find("HpSlider").GetComponent<Slider>();
            Slider_MP = value.transform.Find("MpSlider").GetComponent<Slider>();
            Slider_Shield = value.transform.Find("ShieldSlider").GetComponent<Slider>();

            _Object = value;
        }
    }

    public void Set_Name(string name)
    { Text_Name.text = name; }
    public void Set_ActiveName(bool value)
    { Text_Name.gameObject.SetActive(value); }

    public void Set_Hp(float current, float max)
    { Slider_HP.value = Support.Math.Get_ValueRate(current, max, Slider_HP.maxValue); }
    public void Change_HpColor(Color color)
    { Slider_HP.fillRect.GetComponent<Image>().color = color; }

    public void Set_Mp(float current, float max)
    { Slider_MP.value = Support.Math.Get_ValueRate(current, max, Slider_MP.maxValue); }
    public void Change_MpColor(Color color)
    { Slider_MP.fillRect.GetComponent<Image>().color = color; }

    public void Set_Shield(float current, float max)
    { Slider_Shield.value = Support.Math.Get_ValueRate(current, max, Slider_MP.maxValue); }
    public void Change_ShieldColor(Color color)
    { Slider_Shield.fillRect.GetComponent<Image>().color = color; }

    public Text Text_Name;
    public Slider Slider_HP;
    public Slider Slider_MP;
    public Slider Slider_Shield;
}

UI 이동 부분

transform.position = Camera.main.WorldToScreenPoint(Unit_Object.transform.position + new Vector3(0, 1f, 0));

 

 

이름과 체력이 유닛을 따라다니니 그럴듯하게 보인다.

+ 공격속도를 초당 100회 정도로 올리니까 동영상을 따로 컴퓨터에서 틀었을 땐 멀쩡하게 공격했는데 여기 올리니까 뭔가 공격이 끊기는 것 처럼 보인다.. 우리얘들 멀쩡합니다...

 

한 일

- 유닛 길찾기

- 유닛 애니메이션

- 유닛 스텟

- 간단한 유닛 UI

 

'개인 프로젝트' 카테고리의 다른 글

[개인 프로젝트] AutoBattle  (0) 2024.02.08
게임 제작일기 2  (0) 2023.09.27
[개인 프로젝트] Command - BOT  (0) 2023.03.13
[개인 프로젝트] Blind Game  (0) 2023.03.13