개인 프로젝트

게임 제작일기 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

 

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

Edge Detection 쉐이더 응용  (0) 2024.06.01
[개인 프로젝트] AutoBattle  (0) 2024.02.08
게임 제작일기 2  (0) 2023.09.27
[개인 프로젝트] Command - BOT  (0) 2023.03.13
[개인 프로젝트] Blind Game  (0) 2023.03.13