2017. 10. 16. 15:45

안녕하세요. 게임개발자 놀이터 입니다.


네이버 플러그 분석 포스팅입니다.


분석 내용은 Plug Unity 을 보고 만들었습니다.


감사합니다.


NaverPlug SDK 분석 -02

 

1.    클래스 분석


IGLink , GLink : 플러그를 사용하기 위한 인터페이스 클래스

GLinkAndroid : Android용 플러그와 연동하기위한 클래스

GLinkIOS : IOS용 플러그와 연동하기 위한 클래스

GLinkConfig : 플러그 초기화를 위한 클래스

GLinkLanguage : 다국어 지원을 위한 언어 목록

GLinkNaverId : 네이버 아이디 로그인을 위한 클래스

GLinkRecord : 화면 녹화를 위한 클래스

GLinkStatistics : 결제모듈을 위한 클래스

 

  

2.    플러그 초기화

 

n   GLinkConfig.cs 파일에 초기화 정보를 설정한다

u  국내 네이버 카페만 지원할 경우

n   NaverLoginClientId : 네이버 개발자 센터에 애플리케이션을 등록하고 받은 클라이언트 아이디

n    NaverLoginClientSecret : 네이버 개발자 센터에 애플리케이션을 등록하고 받은 클라이언트 시크릿

n   CafeId : 네이버 카페를 개설하고 받은 카페 아이디

u   글로벌 커뮤니티를 대상으로 하는 다음 두 항목은 주석으로 처리한다

n    NeoIdConsumerKey : 커뮤니티를 개설하고 받은 컨슈머키

n    NGlobalCafeId : 커뮤니티를 개설하고 받은 커뮤니티 아이디

u   글로벌 커뮤니티 네이버 카페일 경우

n    위의 2개의 NeoIdConsumerKey, NGlobalCafeId 을 주석처리 하지 않고 알맞은 정보를 넣는다.


 

 

[Android]

l  글로벌 또는 국내 카페 상황에 맞춰서 코드를 주석 처리하거나 해제한다.


 

[IOS]

l  글로벌 또는 국내 카페 상황에 맞춰서 코드를 주석 처리하거나 해제한다.




Posted by 시리시안
2017. 10. 16. 12:16

안녕하세요. 게임개발자 놀이터 입니다.


오늘은 NaverPlug SDK Unity 이용한 Android / IOS 연동 방법 에 대해 포스팅 하려합니다~


그럼 바로 들어갑니다!





NaverPlug SDK Unity 이용한 Android / IOS 연동 방법

 

IOS 11 대응 하기 위해 2.52버전으로 다운로드 받습니다.

https://github.com/naver/cafe-sdk-unity

 



 

압축을 해제 , lib 안에 있는 Unitypackage 프로젝트 폴더에 풀어줍니다.

 

 


 

테스트를 위해 Sample 폴더에있는 NCSDK_Sample.Scene 열어봅니다.

 

 

빌드 해봅시다.

 

Anroid 경우, 아무 문제 없이 바로 빌드가 됩니다.

 

하지만IOS 경우빌드 세팅해야 부분이 있습니다.

 

 

IOS

l 세로 모드 설정

세로 모드로 진행하는 게임을 개발할 때는 NCSDK/Plugins/iOS 폴더에 있는 NCSDKUnityManager.mm 파일에서 NCSDKManager.setOrientationIsLandscape 속성을 NO 설정합니다.

 


 

1.  NCSDK/Plugins/IOS/NaverCafeSDK.bundle IOS에서 include 되도록 설정해줍니다.

 



 

(Two Column Layout 사용하고 있다면, 왼쪽 폴더 경로상에서 Bundle 선택하면 인스펙터에 정보가 나오지않습니다. 오른쪽 파일 창에서 클릭 해줘야 합니다. )

 

2.  NCSDK/Plugins/IOS/ NaverAuth/ NaverAuth.bundle 마찬가지로 IOS에서 include 되도록 설정 해줍니다.

 


 

3.  IOS 빌드해서 XCODE 열어 봅니다.

 


 

4.  빌드를 하면 엄청난 에러를 있습니다. 이제부터 에러들은 해결하기 위해 설정을 할것입니다.

 


 

5.  Build Settings Other Linker Flags –ObjC 추가합니다.

 


 

6.  Build Phases Link Binary With Libraries 다음 라이브러리를 추가합니다. 추가한 라이브러리의 Status Required 설정합니다.

MobileCoreServices.framework

SystemConfiguration.framework

MediaPlayer.framework

AVFoundation.framework

CoreMedia.framework

AssetsLibrary.framework

Security.framework

ImageIO.framework

QuartzCore.framework

Webkit.framework

ReplayKit.framework(라이브러리의 Status Optional 설정합니다)

 



 

7.  다시 한번 빌드하면 정상적으로 빌드가 되는 것을 확인 하실 있습니다.

 


Posted by 시리시안
2017. 9. 7. 11:30

 

안녕하세요. 게임개발자 놀이터입니다.


오늘은 유니티에서 지원하는 협업도구인 Unity Collaboration에 대해서 적어보려고 합니다.


https://unity3d.com/kr/unity/features/collaborate


Unity 2017이 되면서 Unity 5.3에서부터 베타로 사용가능했던 Unity Collaboration가 베타가 종료되면서 사용이 가능해졌다고 합니다.


설정 방법은 


먼저 유니티 Window 메뉴에서 Services를 들어갑니다.



그후, 서비스 창에서 Off로 되어있는 Collaboration을 On으로 바꿔줍니다.





스위치 버튼을 눌러서 작동해주시면 됩니다.




그럼 우측 상단에 있는 Collab 버튼을 누르고 메세지를 적은 다음에 Publish Now! 버튼을 눌러주면 완료입니다!




팀원 초대 및 확인을 위해


https://developer.cloud.unity3d.com/projects/


에 접속하여 유니티 계정으로 로그인 합니다.


그럼 Collaborate를 ON 시킬 프로젝트가 있을겁니다.




클릭하여 접속합니다.





MultiPlayer나 Cloud Build 같은 다른 여러 기능들이 다 비활성화 되어있지만, 지금은 사용하는게 아니기 때문에, 상단에 있는 Users 창을 눌러서 이동합니다.




팀원의 이메일 주소를 윗 빈칸에 적고 Add를 누르면 팀원이 추가됩니다.

팀원을 추가를 하면 권한을 설정할 수 있습니다.

User은 프로젝트를 수정은 할 수 없고 테스트 플레이 정도만 가능한 권한이고

Manger은 프로젝트 수정 및 대부분의 수정이 가능한 권한

Owner은 프로젝트 전체를 수정할 수 있는 권한입니다.



이제 프로젝트에 팀원으로 추가한 팀원의 Unity를 실행하면 왼쪽 메뉴에서 On Disk가 아닌 On The Cloud를 눌러보면 프로젝트가 켜지면서 동시에 다운로드를 받습니다.


다운로드 후 프로젝트를 수정했다면 Collab에 들어가서 처음 업로드할때처럼 업로드하면 수정한 부분에 대해서만 업로드가 됩니다.


그럼 다른 팀원은 Collab을 눌러 Update Now! 버튼을 누르면 수정된 부분에 대해서만 업데이트를 진행합니다.




현재 유니티 Collaboration는 프로모션 기간입니다. ( 2017년 10월 5일까지)




프로모션 기간중엔 제한 없이 이용할 수 있지만 프로모션 기간이 끝나면, 무료사용자는 최대 3명의 팀원과 1기가의 클라우드 저장공간과 업로드 및 빌드 공유만 가능하고 매월 9달러 (최대 3명, 추가로 1명당 7달러)를 결제하면 25기가 저장공간과, 자동 빌드 기능을 받을 수 있다고 합니다.


유니티 프로 및 플러스 버전 사용자는 이미 유니티 팀 서비스를 받고 있어서 바로 위와 같은 효과를 받을수 있다고 합니다.


읽어주셔서 감사합니다.


Posted by 시리시안
2017. 4. 6. 13:21

안녕하세요. 게임 개발자 놀이터 입니다.


C#에서 자주썻던 이벤트 콜백 함수를 C++에서 사용하고 싶어서 알아봤습니다.


여러번 실패 끝에 성공해서 이곳에 공유하려고 합니다~


코드먼저 보시죠!


헤더 파일입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Button : public CSprite
{
public:
    Button();
    ~Button();
 
private:
    typedef std::function<void()> Event; //인수가 없는것
 
    short state;
    Event OnClick;
    Event OnMouseOver;
    Event OnMouseOut;
 
public:
 
    void SetOnClick(Event Function);
    void SetOnMouseOver(Event Function);
    void SetOnMouseOut(Event Function);
 
    virtual void MouseEvent(DIMOUSESTATE MouseState) override;
 
 
 
};
cs


여기서 상속받는 CSprite와 가상함수 MouseEvent는 무시하셔도됩니다. ( 제가 만든 엔진에 일부입니다..)


다음은 소스 코드입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Button::Button()
{
    state = 0;
    OnClick = NULL;
    OnMouseOver = NULL;
    OnMouseOut = NULL;
}
 
 
Button::~Button()
{
}
 
void Button::SetOnClick(Event Function)
{
    OnClick = std::move(Function);
}
void Button::SetOnMouseOver(Event Function)
{
    OnMouseOver = std::move(Function);
}
void Button::SetOnMouseOut(Event Function)
{
    OnMouseOut = std::move(Function);
}
 
void Button::MouseEvent(DIMOUSESTATE MouseState)
{
    CPoint mouse = Director::GetInstance()->Get_Mouse();
 
    if (this->GetBoundingBox().containsPoint(mouse) && state != 1)
    {
        //MouseOver
        if (OnMouseOver != NULL)
            OnMouseOver();
        state = 1;
    }
    else if (!this->GetBoundingBox().containsPoint(mouse) && state != 0)
    {
        //MouseOut
        if (OnMouseOut != NULL)
            OnMouseOut();
        state = 0;
    }
    else if (this->GetBoundingBox().containsPoint(mouse) && state == 1)
    {
        //MouseClick
        if (MouseState.rgbButtons[0& 0x80)
        {
            if (OnClick != NULL)
                OnClick();
            state = 2;
        }
    }
}
cs



음.. 소스는 딱히 볼게 없군요!


std::move로 넣어줘야 한다는것 정도!?


그럼 적용법을 알아볼까요.


1
2
3
4
5
6
7
8
9
10
11
12
void CTestScene::TestFunction()
{
    CCLog("버튼 테스트 함수 호출!");
}
 
void CTestScene::ButtonInit()
{
    ButtonTest = new Button();
    ButtonTest->SetOnClick(std::bind(&CTitleScene::TestFunction, this));
 
    m_default_Layer->AddChild(ButtonTest);
}
cs


여기서 중요한 부분은 9번째줄이네요


std::bind로 넘겨주는것입니다.



음.. 뭐랄까.. 무언가 만들었다기보단 있는 기능을 사용한거라 글을 적기 애매하네요.


질문은 댓글로 부탁드려요

Posted by 시리시안
2017. 4. 2. 21:39


오늘은 인터페이스를 짜는데 오래 걸렸다.



기본적인 캐릭터를 짜고 상속받아서 학생만 우선 구현했다.


아마 학생과 고대의 존재 1명만 우선 구현해서 진행할듯..


아직 카드 드로우 기능과 지역이동.. 전체적인 페이즈가 구현이 안되서 테스트도 잘안되네..


블로그에 글쓸만큼 뭔가 보일정도로 작업이 된게 아니라 씁슬하지만 그대로 남겨놔야지

(GIF입니다. 클릭해주세요)




포토샵 다루는게 정말 힘들다.. ㅠㅠ

Posted by 시리시안
2017. 4. 2. 00:40


인게임 UI를 만들고보니


캐릭터 선택과 고대의 존재 선택이 필요하다는걸 알았습니다.


랜덤 선택과 직접 선택이 가능해야하기 때문에.



인게임이 들어가기전에 위와같이 띄어주기로했습니다.



그리고 게임 매니저에 다음과 같이 추가했습니다.



그리고 버튼을 이용해서 각종 보스와 각종 캐릭터를 셀렉하게 만들었습니다


(하지만 캐릭터별, 보스별 기능은 안만들었으니..)


(클릭하시면 GIF로 애니메이션 재생이 됩니다.)





내일은 드디어 인게임..!!


Posted by 시리시안
2017. 4. 1. 19:13

저번엔 타이틀을 완성했으니 오늘은 인게임 UI를 만들었습니다.




포토샵이 익숙하지않아서 하루종일 걸렸네요..


이런 느낌으로 만들어보려고합니다.


근데 만들고보니, 캐릭터 선택과 고대의존재 선택이 우선시 되어야하네요..


그리고 밑에 글씨 색상이 흰색이라 잘안보이네요. 이것도 고쳐야겠어요.


내일은 전체적인 게임 매니저를 만들어서 개별과 전체 관리를 띄게하고


캐릭터 선택과 고대의존재 선택을 먼저해야겠습니다.


물론 캐릭터과 고대의존재는 단 1개씩만 우선제작해야겠습니다..

Posted by 시리시안
2017. 4. 1. 19:00

친구들과 같이 보드게임방에서 아컴호러를 해봤는데 너무 재밌었습니다.


하지만 단점은.. 너무 방대한 룰과 시스템에 이해로 시간이 훌쩍 지나갔다는거..


그래서 집에서도 서로 같이 하고 싶어서 IP로 연결해서 하는 아컴호러 PC게임을 제작해보려고합니다.


뭐.. 첫날엔 별거 없겠지만..


DirectX 9.0c를 이용해 제작하기로 했습니다.


포토샵을 배워가며 만드는데.. 생각보다 오래 걸리네요


타이틀 UI와 크레딧 배치만 완료했습니다.





Posted by 시리시안
2017. 3. 29. 19:21

안녕하세요. 게임 개발자 놀이터입니다.


이번 포스팅에서는 변수 선언시 저장되는 영역을 적어보려고합니다.


크게 4개 또는 3개의 영역이라 표현하는데요


순서대로 


텍스트, 데이터, 스택(Stack), 힙(Heap)


입니다. 또는 3가지로 나눌땐 텍스트와 데이터를 하나로 합쳐서 보기도 한다네요.


그럼 순서대로 적어보겠습니다.


텍스트 영역

프로그램의 실행 코드가 존재하는 영역입니다.

 즉, 내가 작성한 코드들이 이곳에 위치합니다.


텍스트는 비교적 간단하네요


데이터 영역

    • 전역 변수나 정적 변수(static)가 이곳에 기록됩니다.
    • 데이터 영역내에서도 3가지로 분류가 가능합니다
      • 읽기 전용 영역
        • Const나 상수 문자열 등이 이곳에 속합니다.
      • 읽기/쓰기 영역
        • 전역 변수중 초기화가 된 변수들입니다.
      • 초기화가 되지 않은 영역 (BSS (Block Started by Symbol))
        • 전역 변수이면서 초기화가 되지 않고 선언되거나 static으로 선언된 변수들입니다.


스택 영역(Stack)

    • 지역 자동 변수 (지역 auto변수) 입니다.
    • 메모리를 따로 설정하지않아도 함수 시작(스코프영역 진입)에 자동으로 생성되고 함수 끝(스코프영역 벗어남)에 자동으로 파괴됩니다.
    • 스코프 영역안에 잡힌 주소값을 가리키는 포인터 변수도 auto변수 이기 때문에 이곳에 위치합니다.
      • (단, 주소값을 가르킬뿐, 주소값의 영역은 다릅니다.)


힙 영역(Heap)

    • 일반적으로 malloc 처럼 동적으로 메모리를 할당받을때 이곳의 영역이 사용됩니다.
    • 이곳은 자동 파괴가 되지 않습니다.



이렇게 정리하고 보면 되게 간단한 4가지인데, 항상 필요할때 기억이 나질 않네요.


읽어주셔서 감사합니다.


Posted by 시리시안
2016. 12. 14. 12:57

안녕하세요. 게임개발자 놀이터 입니다.


이번 포스팅에선 TCP 3-way Handshake 에 대해서 적어볼까 합니다.


사실 전 이번 포스팅에 대한 내용을 잘 모릅니다.


관심있게 배우지 않았고, 나중에서야 이렇게 후회하면서 다시 공부를 했습니다.


정말 참고한 사이트가 많으니, 참고 사이트는 최하단에 적어 두도록 하겠습니다.




TCP 3-way Handshake 란?


TCP는 장치들 사이에 논리적인 접속을 성립 하기 위해 3-way handshake를 사용합니다.


즉, 신뢰성 있는 연결을 체결하기 전에 패킷을 3번 교환하여 확인 하는 과정입니다.


왜 3번 일까요?


A와 B가 서로 멀리서 대화를 한다고 생각해 봅시다.


A가 B에게 말합니다. "B야 우리 놀러가자!"


B는 그걸 듣고 대답하죠. "뭐? 나한테 말한거야?"


A는 B의 말을 듣고 말합니다. "응 너랑 둘이서 노는거야!!"


A와 B의 대화가 서로 이어지지 않습니다. 오히려 잘못된 정보를 받고있네요.


A와 B는 서로간의 신뢰성있는 연결이 되어있지 않다고 말할수도있겠네요.


이번엔 3-way handshake로 예를 들어봅니다.


1. A가 B에게 말합니다. "B야! 내말 들리니?" --- SYN

2. B는 그걸 듣고 대답합니다. "응, A야 난 들려, 넌 내말 들리니?" --- ACK / SYN

3. A가 말합니다. "응 B야! 너 말 잘들려!" --- ACK


이렇게 3번에 걸쳐서 대화를 주고받으며 신뢰성있는 연결이 체결되었습니다.


위 내용에서 말하는 것을 패킷으로 생각하고, A를 Client, B를 Server로 생각하면 이해하실수있습니다.


- Client에서 웹 서버로 연결을 시도하는 SYN을 보냅니다.

- Client는 서버의 응답을 기다리며 SYN-SENT 상태가 됩니다.

- Server는 LISTEN 상태에서 SYN데이터를 받으면 SYN + ACK패킷을 Client로 보냅니다.

- Server는 SYN_RECEIVED상태가 됩니다.

- Client는 Server로 SYN에 대한 응답으로 ACK패킷을 보냅니다.

- 그후 Client는 ESTABLISHEN 상태가 됩니다.

- Server는 ACK 패킷을 받고 해당 Client IP 대한 포트 ESTABLISHEN 상태로 전환합니다

- 이것으로 TCP 3-way handshaking 을 완료합니다.

사진 출처 : HandShake Wikipedia




위 사진 과정에서 Sequence Number와 Acknowledgment number를 보실 수 있습니다.

먼저 Client에서 SYN 패킷을 보낼때 Sequence Number에 랜덤한 숫자를 넣어서 보냅니다.

편의상 x라 표현하겠습니다.

이 SYN 패킷을 받게되면 응답으로 SYN + ACK 패킷을 보내게 되는데 서버에서 보내는 Sequence Number의 경우 또 랜덤한 숫자를 넣어서 보냅니다(y), 그리고 Acknowledgment number는 클라이언트에게 받은 x에 +1하려 x+1 값을 보내게 됩니다.

클라이언트는 서버로부터 오는 SYB+ACK를 받고 응답으로 ACK패킷을 보내는데 역시 값은 서버에게서 받은 Sequence Number, 즉  y 의 +1한 값인 y+1을 보내게됩니다.



감사합니다.






참고 사이트

넷트레인 교육센터

개발이 하고 싶어요

Mind Net

Mint & Latte

Posted by 시리시안