중급 프로그래머 가는 길 재미있게 가보자!

안녕하세요. 프로그래머 JD입니다. 

이번 글은 타워 건설 프로젝트로 시작합니다. 

일주일에 3개씩 포스팅해보자는 목표를 가지니까 금방금방 진행되는 느낌이 드네요.

역시 사람은 목표의식이 있어야 하는 것 같아요.

이번 프로젝트는 마우스를 사용한 타워 건설인데요 마우스를 이용해서 동적으로 타워를 생성할 수 있게 됩니다.

uml 확인하겠습니다.

 

 

uml(class Diaglam)을 확인해보면 두 가지 클래스가 추가된 것을 볼 수 있습니다.

Node클래스와 BuildManager클래스이죠.

근대 BuildManager클래스를 확인해보면 다른 클래스랑 모습이 다른 것을 확인할 수 있습니다.

클래스 이름 위에 <<Singleton>>이라고 적혀있죠. ㄷㄷ

네... gof design 패턴 중 하나인 싱글톤 패턴입니다.

정보처리기사 공부하시는 분들을 많이 들어보셨을 거예요. 

<<,>> 문자가 보이는데요 이것은 guillemets이라고 uml에서는 스테레오 타입을 표현할 때 사용되는 것입니다.

class Diaglam을 확인하면 Node클래스가 Turret클래스를 생성하고 BuildManager를 의존하는 것을 볼 수 있어요.

BuildManager는 Turret을 연관 짖고 있습니다.

저희 목적은 Node에다가 turret을 생성하는 것인데 이런 관계를 가진 이유는 Node에 Turret을 생성할 때 BuildManager가 가지고 있는 Turret정보(instance)를 확인하고 생성하기 때문입니다. 

그럼 소스코드 확인해보겠습니다.

 

Node 클래스입니다.

using UnityEngine;

public class Node : MonoBehaviour
{
    public Color hoverColor;
    public Vector3 positionOffset; 

    private GameObject turret;
    private Renderer rend;
    private Color startColor;

    private void Start()
    {
        rend = GetComponent<Renderer>();
        startColor = rend.material.color;
    }

    private void OnMouseDown()
    {
        if(turret!=null)
        {
            Debug.Log("Can't build there! -TODO: Display on screen.");
            return;
        }
        GameObject turretToBuild = BuildManager.instance.GetTurretToBuild();
        turret = Instantiate(turretToBuild, transform.position + positionOffset, transform.rotation);
    }

    private void OnMouseEnter()
    {
        rend.material.color = hoverColor;
    }

    private void OnMouseExit()
    {
        rend.material.color = startColor;
    }
}

 

멤버 변수는 hoverColor는 마우스가 node에 갔을 때 변하는 색깔입니다.

positionOffset은 생성되는 타워의 이동하는 값입니다. node의 좌표값과 타워의 좌표값이 계산되지 않을 경우 깔끔하게 작업할 수 있습니다. 

turret은 타워 객체입니다.

rend는 

이것인데 저희는 마우스가 Node object에 가면 색이 변하는데 이것을 원상 복구해야 합니다. 그래서 Node object의 기본 색을 접근하기 위해 사용했습니다.

만약 이 변수를 사용하지 않는다면 저희가 손댄 Node색은 모두 검은색으로 변할 것입니다.

 

startColor는 Mesh Renderer의 Element0의 색입니다.

오늘은 멤버 변수에 대한 설명으로 이번 글 마치겠습니다.

다음 시간에는 소스 설명과 BuildManager 클래스를 설명해보겠습니다.

 

읽어주셔서 감사합니다. 소스를 공유해준 유튜버 Brackeys 감사합니다.

출처 -www.youtube.com/watch?v=t7GuWvP_IEQ&list=PLPV2KyIb3jR4u5jX8za5iU1cqnQPmbzG0&index=6

 

+ Recent posts