모바일게임2017. 3. 8. 17:10

슈퍼셀의 히트게임 '클래시로얄' (Clash Royale) 개발자 인터뷰 중 흥미있는 부분이 있어 글을 씁니다.


슈퍼셀은 하나의 게임 개발을 위한 팀을 5~20명 이내의 작은 조직으로 운영한다고 알려져 있습니다. 팀원 하나 하나가 강력한 슈퍼 개발자들이다라는 의미로, 회사 이름도 슈퍼셀이라고 붙였다고 하지요. 헤이데이 같은 경우 개발팀이 15명이었다고 합니다.


클래시 로얄 개발팀 멤버인 Lassi 의 인터뷰 내용에 보면, 클래시로얄은 2011년부터 개발을 시작했다고 합니다. 초반 프로토 타입의 플레이 방식은 지금과 비슷했다고 하는데 이 때 나오는 화면이 다음과 같습니다.



이거 어디서 많이 보던 화면 같지요? 엥, 이거 리그 오브 레전드(LOL, League of Legends) 아니냐...


제 추측으로는, 아마 클래시 로얄 개발팀이 모바일에서 할 수 있는 롤(LOL)과 같은 게임을 만들자는 시작점에서부터 출발하지 않았을까 생각합니다. 맵도 가운데 개천 흐르고 비슷하잖아요! 물론 롤은 도타에서부터 출발한 게임이니 누가 원조냐를 따지자면...


참고로, 헤이데이 개발팀 루종웨이 (Lu, ZhongWei) 씨가 NDC 2015 에서 발표한 자료를 보면, 자기팀은 데이터 중심 개발 (Data-Driven Development) 방법을 사용하고 데이터는 CSV 와 JSON 으로 저장한다고 합니다.


이렇게 하면 게임 디자이너(설계)가 프로그래머 없이도 수치를 변경해가며 테스트를 할 수 있고, 새로운 기능에 대한 시뮬레이션도 엑셀 등을 통해서 시뮬레이션 해볼 수 있기 때문이지요.




클래시 로얄 개발자 인터뷰 : https://clashroyale.com/ko/blog/news/interview-with-clash-royale-team




Posted by 뉴로
유니티2014. 2. 17. 11:47

다른 오브젝트의 함수를 써야할 때 메시지 호출방법을 쓰는 것이 좋다고 합니다.


이득우 님의 발표자료에 따르면, (아래 화면 참조)

  • 메시지 호출은 클래스 간 의존성을 줄일 수 있고,
  • 이는 코드를 간단하게 만들 수 있는데,
  • 성능의 저하가 있다고 생각하지만 그렇게 느리지 않고 장점이 더 크니 적극적으로 쓰자.
는 결론입니다.

<컴포넌트>.SendMessage 또는 <게임오브젝트>.SendMessage 와 같은 방식으로 쓸 수 있습니다.

구문 형식:
void SendMessage(string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver); 


유니티 레퍼런스 홈페이지 예제를 보면,


using UnityEngine;

using System.Collections;


public class Example : MonoBehaviour {

    void ApplyDamage(float damage) {

        print(damage);

    }

    void Example() {

        SendMessage("ApplyDamage", 5.0F);

    }

}


위와 같은 방식으로 사용하고 있습니다. 파라미터 중 마지막 SendMessageOptions 은 말 그대로 옵션인데, SendMessageOptions.DontRequireReceiver 라고 쓸 경우에는 호출한 함수가 제대로 호출되었는지 여부는 신경쓰지 않고 호출한 것으로 역할이 끝납니다.


C# 에서는 콜백의 기능을 위해 delegate 를 사용할 수도 있습니다. 이와 관련해서 아래의 링크를 참고하세요.


http://unityindepth.tistory.com/entry/유니티-개발자로써-내가-배웠던-최고의-5가지


Posted by 뉴로