midas+son의 크리에이티브(creative) 이야기


유나이트 2017 초급 트레이닝 바이킹 게임 만들기


유니티 코리아 직원 - 프랑스인 줄리안 - 님의 강의와 

옆의 한국분 통역으로 진행되었다.


유니티를 다시 빠르게 되집어 보기 위해

중급이 아닌 초급을 신청하고 들었는데

4시간동안 계속 흥미진진하게 빠르게 지나갔다.


처음 부분만 너무 초급이라 좀 지루했지만

초반지나고부터 끝까지 흥미롭게 진행되었다.

대부분 다 아는 내용이지만 다시한번 핵심 내용만 빠르게 훑고 간단한 게임 하나가 완성 되었다.

스크립트 작업 없이 준비된 간단한 스크립트와 prefab으로 진행되었다.


진짜 유니티를 처음 해보는 사람이라도 

그렇게 어렵지 않게 게임을 만드는 경험과 

유니티의 기능에 대해 숙지 할수 있는 수준의 내용으로 준비되었는데

강의한 줄리안(?줄리앙??)의 노력이 돋보였다.

매 주마다 이 사람에게 새로운 강의를 듣고 싶을 정도다.


유니티로 게임을 하나라도 만들어본 사람이라면 너무 쉬운 내용이었는지 중간중간 나간 사람도 있었다는 듯하다.


유니티의 모든 기능에 대해서 4시간만에 알려줄수는 없으니 아쉬움이 남긴 했지만

다음에 이와 같은 방식의 트레이닝 행사가 있다면 또 듣고 싶다.(다른 주제와 난이도로...)

FTimerHandle timerHandle;

GetWorldTimerManager().SetTimer(timerHandle, this, &AController::Service, 0.1f, true);

위의 코드는 유일하게 하나의 함수를 Tick()과 다른 타임라인으로 지정된 시간 마다 호출 할 수 있다.

다른 곳에서 또 사용하면 이전에 썼던 SetTimer의 설정은 덮여씌워져 사라진다.


Actor내에서는 GetWorldTimerManager()를 부를 수 있는데

FTimerHandle 변수를 생성하여 SetTimer함수의 첫 인자값으로 넣고

2번째는 사용할 클래스(보통 this를 넣는다.)

3번째 인자에 함수의 주소를 넣는다.(AController 클래스의 Service()함수의 주소 => &AController::Service)

4번째 인자는 반복될 시간이다.

5번째 인자는 Loop할건지 안할건지 bool값을 넣는다. 안넣으면 기본 false다.

6번째 인자도 있는데 처음 호출할 때의 딜레이를 지정할 수 있다.

연산자 오버로딩 중 ==(같다), !=(다르다) 체크는 쌍으로 이루어 져야 한다.

둘 중에 하나만 존재하지 못한다.

아래의 예제 샘플은

새로운 클래스의 key라는 string변수 값이 같은지 체크하여 

bool을 리턴하도록 ==, !=연산자를 오버로딩 하였다.

//새로운 클래스

    public class EquipmentActor 

    {

        public string key;    //키값변수


        //단순하게 아래처럼 비교하면 null 과 비교 할 수 없어서 위험하다.

        //public static bool operator ==(EquipmentActor x, EquipmentActor y)

        //{

        //    if (x.key.Equals(y.key))

        //        return true;

        //    else return false;

        //}

        //public static bool operator !=(EquipmentActor x, EquipmentActor y)

        //{

        //    if (x.key.Equals(y.key))

        //        return false;

        //    else return true;

        //}


  //object로 바꾸어 null비교를 하고 진행한다.

        public static bool operator ==(EquipmentActor x, EquipmentActor y)

        {

            if ((object)x == null && (object)y == null) return true;

            else if (((object)x != null && (object)y != null) && x.key == y.key) return true;

            else return false;

        }


        public static bool operator !=(EquipmentActor x, EquipmentActor y)

        {

            return !(x == y);

        }


//근데 가장 심플한건 if비교 할때 if((object)변수 == nullptr)하는게 제일 깔끔한거 같다. 그러면 위의 object바꾸는건 다 없어질텐데...

}