2017. 10. 16. 17:32

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


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


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


감사합니다.




동영상 녹화


동영상 녹화 버튼을 누르면 게임중에 게임 화면을 녹화 할 수 있습니다.


녹화 시작과 종료

 


녹화 콜백 리스너

동영상 녹화시 발생하는 이벤트 처리는 콜백 리스너를 등록해 구현합니다.


녹화 기능은 GLinkRecord.cs 에 구현 되어 있습니다.


[Android]

 



[IOS]

 



녹화 완료 콜백 리스너

녹화가 완료 되었을때 처리할 작업은 콜백 리스너를 등록해 구현합니다.


[Android]

기본적으로 GLinkAndroid.cs 에 설정 되어 있지만, 그래도 코드를 본다면

에 있는 setOnRecordFinishListener 를 이용해 콜백 리스너를 등록합니다.


그후 등록한 리스너에 녹화 완료 기능을 구현 합니다.

 



[IOS]

IOS도 기본적으로 완성되어 있지만, 그래도 코드를 보자면

NCSDK / Plugins / IOS / NCSDKUnityManager.mm 을 열어서 보면

 





 


되어있는것을 화인 할 수 있다.


감사합니다



Posted by 시리시안
2017. 10. 16. 17:08

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


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


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


감사합니다.




위젯



위젯 관련 기본 설정 함수들 입니다.


 

위젯 ) 화면 캡쳐

위젯의 화면 캡처 버튼을 누르면 게임 화면을 캡처할 수 있다.

화면 캡쳐 기능은 버튼 클릭 리스너를 등록해서 구현합니다.


화면 캡쳐 사용 여부 

 





[Android]

기본적으로 GLinkAndroid.cs 에 설정 되어 있지만, 그래도 코드를 본다면


먼저 리스너를 등록합니다.

 



그후 등록한 리스너에 스크린 캡쳐 기능을 구현 합니다.

 



[IOS]

IOS는 화면 캡쳐 리스너를 따로 구현해서 처리합니다.





감사합니다

 


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

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


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


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


감사합니다.




플러그 투명도


플러그 좌 상단의 투명도 조절 바를 조절하면 게임과 카페를 동시에 사용 할 수 있습니다.

알파값 100% = 플러그로 터치 이벤트 전달

알파값 99% 이하 = 게임으로 터치 이벤트 전달


접기 버튼과 닫기 버튼

 



플러그 화면 우 상단에 버튼 2개가 있는데, 그중 왼쪽 1번 버튼이 접기 버튼입니다.

접기 버튼을 누르면 플러그 창이 내려가며, 위젯이 나타합니다. 다시 플러그를 실행하면, 마지막으로 보고 있던 화면이 나타 납니다.


오른쪽 2번 버튼은 닫기 버튼입니다.

닫기 버튼을 누르면 플러그가 종료됩니다. 접기와 달리 위젯이 나타나지 않으며, 다시 플러그를 실행하면 플러그의 첫 화면이 나타납니다.



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

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


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


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


감사합니다.



가로 모드, 세로 모드 설정방법



[Android]

Android 환경에서는 별로 설정없이 자동으로 가로, 세로가 적용 됩니다.


[IOS]

NCSDK / Plugins / IOS / NCSDKUnityManager.mm 을 열어서 

 



을 모드에 맞춰서 다른 한쪽을 주석 처리 하면 됩니다.



감사합니다

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

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


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


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


감사합니다.




본 내용은 사진 한장으로 설명이 가능합니다.



감사합니다.

Posted by 시리시안
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 시리시안
2016. 2. 29. 16:11
XML만들기는 다음 포스팅을 확인해주세요


이미 만들어진 XML은 다음과 같은 코드로 불러올수있습니다.
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using UnityEngine;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Text;
using System.Collections.Generic;
/**
@date 2016/02/29
@author 조원우(jjgaa2@naver.com)
@brief App에서 관리해야하는 모든 텍스트를, 처음에 XMl파일을 읽어와 알맞은 텍스트를 반환합니다.
*/
public class TextManager : MonoBehaviour
{
 
    void Awake()
    {
        LoadingText();
    }
 
    List<LocalWord> AllText = new List<LocalWord>();    ///< 이곳에 모든 Text가 쌓입니다.
    /**
@brief 변수 AllText에 xml로 만들어진 데이터를 불러와 짚어 넣습니다.
*/
    void LoadingText()
    {
        TextAsset textAsset = (TextAsset)Resources.Load("Texts");
        XmlDocument xmldoc = new XmlDocument();
        xmldoc.LoadXml(textAsset.text);
        //xml생성
        XmlNodeList Index_Table = xmldoc.GetElementsByTagName("index");
        XmlNodeList menu_Table = xmldoc.GetElementsByTagName("menu");
        XmlNodeList kor_Table = xmldoc.GetElementsByTagName("kor");
        XmlNodeList eng_Table = xmldoc.GetElementsByTagName("eng");
        XmlNodeList chi_Table = xmldoc.GetElementsByTagName("chi");
        for (int i = 0; i < Index_Table.Count; i++)
        {
            LocalWord mWord = new LocalWord();
            mWord.Index = System.Convert.ToInt32(Index_Table[i].InnerText);
            mWord.kor = kor_Table[i].InnerText;
            mWord.eng = eng_Table[i].InnerText;
            mWord.chi = chi_Table[i].InnerText;
            AllText.Add(mWord);
        }
    }
 
    public enum Enum_Language { kor, eng, chi };
    public Enum_Language Language = Enum_Language.kor;
 
    public string GetLocalizingText(int Index)
    {
        if (AllText[Index].Index == Index)
        {
            switch (Language)
            {
                case Enum_Language.kor:
                    return AllText[Index].kor;
                case Enum_Language.eng:
                    return AllText[Index].eng;
                case Enum_Language.chi:
                    return AllText[Index].chi;
            }
        }
        for (int i = 0; i < AllText.Count; i++)
        {
            if (AllText[i].Index == Index)
            {
                switch (Language)
                {
                    case Enum_Language.kor:
                        return AllText[Index].kor;
                    case Enum_Language.eng:
                        return AllText[Index].eng;
                    case Enum_Language.chi:
                        return AllText[Index].chi;
                }
            }
        }
 
        Debug.Log("[Error] 반환된 Text가 없습니다.");
        return "[Error] 반환된 Text가 없습니다.";
    }
 
}
 
/**
@date 2016/02/29
@author 조원우(jjgaa2@naver.com)
@brief 텍스트 데이터 클래스.    
*/
public class LocalWord
{
    public int Index;
    public string kor;
    public string eng;
    public string chi;
}
 
 
cs

.



Posted by 시리시안
2016. 2. 28. 23:41



가장 먼저 상단에 

using UnityEngine.SceneManagement;

을 추가 해줍니다.



유니티는 더이상 Application.LoadLevel 을 사용하지 않습니다.


대신 밑의 코드를 참고하세요




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
 
/**
@class SceneExample.cpp
@Date 2016/02/28
@author 조원우(jjgaa2@naver.com)
@brief 씬 매니저 사용
*/
public class SceneExample: MonoBehaviour {
 
    public void NextScene()
    {
        SceneManager.LoadScene("SceneName");
    }
 
}
 
 
cs


Posted by 시리시안