반응형

프로그래밍 18

[디자인패턴] 8. 유니티에서의 커맨드 패턴

꿀같은 추석시즌동안 너무 행복하게 쉬었답니다. 추석이 전부 가버리기 전에 지난주에 공부했던 커맨드 패턴에 대해 정리해보겠습니다. 커맨드 패턴 핵심 요청하는 객체와 요청을 수행하는 객체를 분리한다. 커맨드 객체의 Execute()를 호출한다. 작업취소기능도 지원할 수 있다. (구현할때는 사용하지 않았습니다.) 아래 객체지향의 원칙을 따른다. 객체지향의 원칙 바뀌는 부분을 캡슐화한다. 상속보다는 구성을 활용한다. 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. 서로 상호작용하는 객체사이에서 가능하면 느슨하게 결합하는 디자인을 사용한다. 확장에는 열려있지만 변경에는 닫혀있어야한다. 추상화된것에 의존하라 구상클래스에 의존하지 않도록 한다. 유니티에서 커맨드 패턴 사용 유니티에서 커맨드 패턴을 사용하기 적절한 곳..

[Unity C#] FSM 디자인 패턴 적용시켜보기

FSM in Unity 이전에 공부했었던 FSM, finite state machine을 유니티 상에서 구현해 캐릭터의 idle, move 상태를 구현했습니다.이러한 디자인패턴을 기반으로 캐릭터들을 구현하게된다면 좀더 아름다운 코드가 나올수있을것같습니다. 완벽하게는 아니지만 각 객체의 역할을 분리할수있었다는 점에서 편리할수있을것같습니다. 우선 앞으로 정의할 상태들의 인터페이스 IState를 만들었습니다. public interface IState{// 인터페이스로 구현함으로써 player클래스에서 이 인터페이스로 호출합니다.void OnEnter(Player player);void Update();void OnExit();} OnEnter는 상태가 시작될때 호출됩니다. player클래스를 파라미터로 받아..

게임 개발/Unity 2019.03.03

[디자인패턴]02. - FSM (Finite State Machine) 유한상태기계

FSM(finite state machine): 유한상태기계 정의유한한 갯수의 상태들로 구성된 기계를 말합니다.특정 객체의 상태를 관리하기위한 패턴입니다.이벤트를 받고 그에 따라 현재상태에서 다음상태로의 전이가 이뤄집니다. 게임에서 npc의 행동AI에 주로 사용됩니다. 특징유한한 수의 상태들만을 가집니다.자신은 하나의 상태만을 가지고 있습니다. 행동을 하나의 객체로 모듈화 하는것을 목표로 합니다.자신의 현재상태를 확인 할수 있어야합니다.외부로부터의 입력, 즉 이벤트를 받습니다. 자신의 현재상태와 받아온 이벤트로 정해진 논리에 따라 자신의 상태를 변경할 수 있습니다. FSM과 statePattern의 차이 상태패턴(stateParrern)은 객체지향 방식으로 상태기계를 구현하는 행위, 디자인패턴을 말합니다..

[디자인패턴]01. 빌더패턴(builder pattern)

빌더 패턴 위키백과: https://ko.wikipedia.org/wiki/%EB%B9%8C%EB%8D%94_%ED%8C%A8%ED%84%B4 1. 빌더패턴 빌더패턴이란 복합객체의 생성과정과 표현방법을 분리하여 동일한 생성절차에서 서로 다른 표현 결과를 만들 수 있게하는 패턴이다. 즉, 어떠한 복합적인 정보를 지녀야할 객체를 생성하는 과정과 각기다른 정보를 표현하여 보여주는것을 분리하여 비슷한 형태를 가졌지만 서로 각기 다른것들을 표현하는 객체를 생성하는 패턴이라고 정리했습니다. 경험적인 예시로 팝업창이 있었습니다. 다른표현을 하지만 형태는 비슷한 이런 팝업창이 그 예시가 되지않을까 생각핬습니다. 호출되는 형식은 아래와 같이 두종류가 될것입니다.// 메소드체이닝을 하지않은 형태 const builder ..

[unity, c#]01. inspector 변수표시

유니티의 편리한 기능중 하나인 에디터의 오브젝트 인스펙터안에 클래스의 public 변수들이 노출되어 실행중에도 값을 편집하여 볼수있는 기능이 있습니다. 하지만 private변수는 보통 인스펙터에 숨겨진 상태라서 노출이 되지않습니다. 이렇게 private변수도 확인하고싶은 순간이 있을때 확인하는 방법이 있습니다. 첫번째 방법은 SerializeField로 원하는 변수위에 달아주는 방법이있습니다.이렇게 해주면 정확하게 원하는 변수만 확인이 가능하도록 만들어줍니다. 두번째 방법은 오브젝트 인스펙터의 debug모드를 활성화시켜 확인하는방법입니다.메뉴의 debug아이콘을 클릭하면 바로활성화되어 모든 변수를 인스펙터에 표시가 가능하게됩니다. 두가지 모두 유용한 방법이므로 이번에 알게된 이후로 자주사용하게 될것 같습..

게임 개발/Unity 2019.02.23

[cocos-creator]-02. LifeCycle정리

이번에는 코코스 크리에이터에서 말하는 LifiCycle이 무엇인지 알아보려고 합니다. LifeCycle 즉 생명주기란 게임내에서 하나의 노드가 생성되고 그리고 삭제되기까지를 말하며 코코스 크리에이터는 그에 따른 자동으로 호출하는 콜백함수들을 제공해 사용할수있게 해줍니다. 아래는 모두 스크립트에 작성했을시 방문하는 순서를 확인한것이고 다음으로 각 콜백함수들을 정리해봤습니다. 1. onLoad()- 씬이 로드되고 노드가 생성되는 가장 처음에 스크립트내에서 단 한번만 호출하는 콜백함수입니다. 일반적으로 여기서 초기화를 해주시면 됩니다. 2. onEnable()- 노드의 active가 활성화될때마다 호출되는 콜백함수입니다. 물론 씬이 로드되고 이노드가 활성화되어있다면 실행됩니다. 주로 노드의 활성화를 켜주고꺼줄..

[열혈강의 C프로그래밍 풀이]-문제08-3[Switch문으로 대신하기]

이번에는 올릴사진이 없어서 그냥 좋아하던 노래 추천하나하고 문제들어갈게요. Empire state of mind입니다ㅋㅋ 이번에는 한문제밖에 없어서 따로 넘버링이 없는 것 같네요ㅎㅎ 문제 그림 08-10의 if..else if...else는 변수 n에 저장된값의 범위를 출력하도록 구성되어 있다.필자는 이것을 예로 해서 Switch문이 모든 if...else if...else를 대신하기에는 무리가 있음을 설명하였지만, 그림 08-10의 if...else if...else는 약간의 조작(?)을 통해서 Switch문으로 변경이 가능하다. 따라서 이를 Switch문으로 변경해서 실행해보기 바란다. Switch문과 if...else문이 서로 편리할때가 다르니상황에맞게 잘써야할것같네요ㅋㅋ(그래도 if...else가..

[열혈강의 C프로그래밍 풀이]-문제08-2[continue&break의 활용]

출근하는 트레인에서 한문제씩 꾸역꾸역 풀어나가고 있네요ㅋㅋ 한국에서 이런 열정으로 했으면 좋았을것같은..ㅋㅋ 제가 살고있는 멜번의 가장 유명한 플린더스역입니다ㅎㅎ 틈나는대로 사진하나씩 올려야겠어요 문제1 구구단을 출력하되 짝수 단(2단,4단,6단,8단)만 출력되도록하자. 또한 2단은 2x2까지,4단은 4x4까지, 6단은 6x6까지, 8단은 8x8까지만 출력되도록프로그램을 구현해보자.이렇게 어수선한 문제를 제시하는 이유는 continue와 break문의 사용법을 익히기 위해서다. 그러니 가급적이면 continue와 break문을 사용해서 이 문제를 해결하기를 바란다. 문제2 다음식을 만족하는 모든A와 Z를 구하는 프로그램을 작성해보자. A Z+Z A ------- 9 9 참고로, 가능한 모든 수의 조합을 ..

[열혈강의 C프로그래밍 풀이]-문제08-1[if~else문의 활용]

정말 오랜만에 블로그복귀ㅎㅎ 약두달전에 호주로 온뒤로 한번도 못들어왔지만이제서야 다시 시작합니다. 사람사는곳은 다똑같다지만 그래도 뭔가 여유가 넘치는 나라 문제1 1이상 100미만의 정수중에서 7의 배수와 9의 배수를 출력하는 프로그램을 작성해보자.단! 7의 배수이면서 동시에 9의 배수인 정수는 한번만 출력해야한다. 문제2 두개의 정수를 입력받아서 두서의 차를 출력하는 프로그램을 구현해보자.단, 무조건 큰수에서 작은수를 뺀결과를 출력해야한다. 예를 들어서 입력된 두 수가 순서에 상관엾이 12와 5라면 7이 출력되어야하고, 입력된 두수가 순서에 상관없이 4와 16이라면 12가 출력되어야한다. 즉, 출력결과는 무조건 0 이상이 되어야한다. 문제3 학생의 전체 평균점수에 대한 학점을 출력하는 프로그램을 작성하..

[열혈강의 C프로그래밍 풀이]-문제07-4[for문의 활용]

한동안 엄청 유명했었던 시그널을 이번에 처음봤는데 정말 흥미진진하더군요. 그 빠져나올수없는 몰입력...어젠 잠을 거의 못잤어요ㅠ 문제1프로그램 사용자로부터 두개의 정수를 입력받아서, 두 정수를 포함하여 그 사이에 존재하는 정수들의 합을 계산해서 출력하는 프로그램을 작성해보자. 예를 들어서 3과5가 입력되면 3+4+5의 결과가 출력되어야 한다. 그리고 문제를 조금 간다니 하기위해서, 첫번째 입력되는 정수보다 두번째 입력되는 정수가 더 커야한다는 조건을 걸기로 하겠다. 문제2다음 수식인 계승(factorial)을 계산하는 프로그램을 작성해보자.n!=1*2*3*...*n프로그램 사용자로부터 n에 해당하는 정수를 입력 받는다. 그러면 n의 계승 n!을 계산해서 출력이 이뤄져야 한다. 어디선가 무전이 들리는 것같..

반응형