Unity2015. 12. 11. 17:52

Unity3D, Sprite, Sprite Pivot, Custom Editor, Pivot Edit, SceneView, 피벗, 피봇, 스프라이트, 설정, 씬뷰, 커스텀 에디터

 

 

 

 

 

 

 스프라이트를 이용한 캐릭터 작업시, 너무 번거로운 피벗세팅 때문에 만들게 되었습니다. 관련 패키지를 첨부합니다.

 

 

* 주요기능은 다음과 같습니다.

- Edits a pivot in SceneView ( 씬뷰에서 피벗을 설정할 수 있습니다. )

  - by presets ( 기본 설정값들로 작업 )

  - by dragging gizmo ( 피벗포인트를 드래그 )

  - by dragging object ( 해당 오브젝트를 드래그 )

 

- Gives pixel-perfect pivot option ( 픽셀에 맞춰 피벗을 설정할 수 있습니다. )

- Moves a gameobject along parent's pixel unit 

 ( 부모 스프라이트의 픽셀에 맞춰 오브젝트를 이동할 수 있습니다.)

 

- Supports Single/Multiple sprite mode.

 (싱글/멀티 스프라이트 모드, 모두에 사용가능합니다.) 

 

- Undo is not supported!!! ( Undo기능 없어요. 주의바랍니다. )

 

* 기능 구현에 사용한 방법은 다음과 같이 간단한 도메인 변환입니다.

- World-Position -> Local-Position -> Pivot

- Pivot -> Local-Position -> World-Position

 

첨부된 소스코드중,

zUtils.cs::zWorldPositionToPivot, zPivotToWorldPosition

을 참고바랍니다.

 

* Source codes

Editor/

  zCommonEditor.cs : Common editor utilities

  zSpriteEditor.cs : Editor-Template for SpriteRenderer

  zSpritePivotExt.cs : Custom sprite pivot editor (inherits from zSpriteEditor)

zUtils/

  zUtils.cs : Common utilities for sprite pivot

 

 

* Desciption

 

 NORMAL-MODE

 

- Lock Position : on pivot editing, prevents changing of local-position

( 피벗설정시, local-position이 움직이는 것을 방지합니다.)

 

- Align to Pixel : pivot is snapped to pixel-unit

( 픽셀단위로 피벗을 설정합니다. )

 

- Presets : default presets, like Center, TopLeft, BottomCenter, and so on

   ( 기존 피벗 프리셋입니다. )

 

- Edit : Change mode to EDIT-MODE, ( 피벗설정 모드로 전환합니다. )

 In EDIT-MODE, inspector and sceneview are shown as belows: 

 

 

- Apply : applies editted pivot ( It will change Asset ImportSetting directly )

설정된 피벗을 적용합니다.

- Cancel : cancels (취소)

 

- Copy : copies current pivot value (Vector2)

(현재 설정된 피벗값을 복사합니다.)

 

- Paste : pastes copied pivot to current sprite

(복사된 값을 현재 스프라이트에 적용합니다.)

 

* Press A-Key and move a gameobject : gameobject will move along its parent's pixel-unit.

 ( A키를 누른상태에서 오브젝트를 이동하면, 부모 스프라이트의 픽셀에 맞출수 있습니다. )

 

For more information, see the attached video. 첨부된 동영상에 좀더 자세한 설명이 있습니다.

 

 

Posted by GNUPart
Unity2015. 11. 16. 22:50

Unity3D, 2D, Page Curl Effect, Page Flip Effect, UI, Canvas, 페이지 넘김 효과, 페이지 넘기기


page-curl effect with 2d mask tweak.

유니티 UI의 Mask기능을 이용한 간단한 페이지 넘기기 예제입니다. 



소스코드입니다. 의외로 간단하게 구현되버려서 깜짝 놀랐습니다만, 

경계선 테스트등이 빠져있습니다.(일정영역을 벗어나면 오작동을 합니다.)


<CurlEf.cs>

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
using UnityEngine;
using System.Collections;
 
[ExecuteInEditMode]
public class CurlEf : MonoBehaviour {
 
    public Transform _Front;
    public Transform _Mask;
    public Transform _GradOutter;
    public Vector3 _Pos = new Vector3(-240.0f, -470.0f, 0.0f) * 0.01f;
 
    void LateUpdate()
    {
        transform.position = _Pos;
        transform.eulerAngles = Vector3.zero;
 
        Vector3 pos = _Front.localPosition;
        float theta = Mathf.Atan2(pos.y, pos.x) * 180.0f / Mathf.PI;
 
        if (theta <= 0.0f || theta >= 90.0f) return;
 
        float deg = -(90.0f - theta) * 2.0f;
        _Front.eulerAngles = new Vector3(0.0f, 0.0f, deg);
 
        _Mask.position = (transform.position + _Front.position) * 0.5f;
        _Mask.eulerAngles = new Vector3(0.0f, 0.0f, deg*0.5f);
 
        _GradOutter.position = _Mask.position;
        _GradOutter.eulerAngles = new Vector3(0.0f, 0.0f, deg * 0.5f + 90.0f);
 
        transform.position = _Pos;
        transform.eulerAngles = Vector3.zero;
    }
}
 
 
cs


동작은 Front의 position만 조정하면 됩니다.( For testing, you should control a point of 'Front'.)


DOWNLOAD Unity3D v5.2.2 Project file (프로젝트 파일을 첨부합니다.)

SimplePageCurl.7z



Posted by GNUPart
Unity/Notes2015. 9. 2. 22:02

* 터치가 UI오브젝트 위에 있는지 검사

 EventSystem.current.IsPointerOverGameObject()를 사용하면 PC의 마우스 입력으로는 잘 검사되는데, Android에서 실행하니까 false를 내뱉으며 동작하지 않았다.

 => 구글링: http://forum.unity3d.com/threads/ispointerovereventsystemobject-always-returns-false-on-mobile.265372/

> mwk888이란 사람이 포스팅한 코드중 발췌

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
bool IsPointerOverUIObject()
{
    // Referencing this code for GraphicRaycaster 
    // https://gist.github.com/stramit/ead7ca1f432f3c0f181f
    // the ray cast appears to require only eventData.position.
    PointerEventData eventDataCurrentPosition 
        = new PointerEventData(EventSystem.current);
    eventDataCurrentPosition.position 
        = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
 
    List<RaycastResult> results = new List<RaycastResult>();
    EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
    return results.Count > 0;
}
cs


* Animator CrossFade vs. CrossFadeInFixedTime

 CrossFade는 상태(state)가 천이(transition)하는 도중에는 적용되지 않는다. 상태 천이 도중 강제로 다른 상태로 전환하고자 할 때 CrossFadeInFixedTime을 사용한다. (Unity3D 5.1부터 적용)

  => CrossFade( "state", duration, -1, 0.0f )를 사용해도 된다.


* Serializing Enumeration :  당연하게 숫자로 저장된다!!. 


* GameObject::OnMouseDown 순서: 카메라 거리가 가장 가까운 오브젝트가 검출

  => 2D에서는(ortho-camera) 오브젝트의 z값으로 순서를 정할수 있다.







Posted by GNUPart
Unity2015. 8. 19. 18:03

Unity, Ads, Unity Ads, 보상, 광고


 유니티 애즈(Unity Ads)를 이용하여, 광고를 시청하면 골드를 보상받는 예제를 포스팅합니다.


 구현하고자 하는 기능은 다음과 같습니다.

* 구현 기능

 - 버튼 클릭 -> 유니티 애즈 시청 -> 골드 보상




 다음은 작업의 전체 순서입니다.

#1. 유니티 애드 설정 (Web 작업)

#2. 유니티 프로젝트 적용 및 테스트 (Unity3D, 디바이스 작업)



#1. 유니티 애드 설정 


1. https://unityads.unity3d.com에 로그인 합니다.


2. 게임탭에서 '+새 게임 추가'를 클릭합니다.


3.플랫폼을 선택(안드로이드)하고, '여기'를 클릭합니다. 출시전이므로 어플리케이션 찾기를 건너뜁니다.


4. 이름을 입력하고, '게임 추가'버튼을 클릭합니다. 정보 인증 설정후 '계속'을 클릭합니다.


5. 게임탭에 새 게임이 추가되었습니다. 게임 ID는 본문 뒷부분에서 코드(UIManager.cs)에 사용합니다. 

 게임 이름(UnityAdsTest)을 클릭합니다.


6. '수익화 설정'탭에서, '고급 설정 보기'를 클릭합니다.


7. Video ad placement의 '설정'을 클릭합니다.


8. 옵션을 설정합니다. 강제 시청을 위해 '동영상 건너 뛰기 허용' 항목의 체크를 제거하고, '저장'을 클릭하여 완료합니다.




#2. Unity 프로젝트 적용 및 테스트


1. Unity3D 새 프로젝트를 생성합니다. 타이틀은 UnityAdsTest로 하였습니다.


2. Unity Ads 패키지를 임포트합니다. 유니티 애셋 스토어에서 다운받을 수 있습니다. (https://www.assetstore.unity3d.com/en/#!/content/21027)


3. Canvas및 버튼(BtnUnityAds)을 생성합니다. 각 설정은 임의로 합니다.


4. C# 스크립트, UIManager.cs를 생성하고 다음의 코드로 대체합니다.

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
using UnityEngine;
using System.Collections;
 
using UnityEngine.UI;
using UnityEngine.Advertisements;
 
public class UIManager : MonoBehaviour {
 
    public Button _BtnUnityAds;
    ShowOptions _ShowOpt = new ShowOptions();
    int _Gold = 0;
 
    void Awake()
    {
        Advertisement.Initialize("63660"true);
        _ShowOpt.resultCallback = OnAdsShowResultCallBack;
        UpdateButton();
    }
 
    void OnAdsShowResultCallBack(ShowResult result)
    {
        if (result == ShowResult.Finished) _Gold += 100;
    }
 
    void UpdateButton()
    {
        _BtnUnityAds.interactable = Advertisement.IsReady();
        _BtnUnityAds.GetComponentInChildren<Text>().text 
            = "See ads and earn gold\r\nGold = " + _Gold.ToString();
    }
 
    public void OnBtnUnityAds()
    {
        Advertisement.Show(null, _ShowOpt);
    }    
 
    void Update() { UpdateButton(); }
}
 
cs

- 15: Advertisement.Initialize( "게임ID", 테스트광고 여부 )

: 게임ID는 유니티 애드 사이트에서 얻을 수 있습니다.

: 출시전 테스트를 위해서 테스트 광고 여부 인자를 true로 합니다. 

> true: 테스트용 광고가 나옵니다.

> false: 실제 광고가 나옵니다.


- 20: OnAdsShowResultCallBack( ShowResult result )

: 광고 보기후 호출되는 콜백입니다. result인자의 값에 따라 처리합니다.


- 27: _BtnUnityAds.interactable = Advertisement.IsReady()

Advertisement.IsReady()는 광고가 보여줄 수 있는 상태인지를 반환하는 함수입니다. 보여줄 수 없다면 버튼을 비활성화 시킵니다.


5. UIManager를 Canvas의 컴포넌트로 삽입합니다.


6. Canvas의 인스펙터창에서 UIManager: Btn Unity Ads의 인자로 BtnUnityAds오브젝트를 지정합니다.


7. BtnUnityAds의 OnClick 이벤트를 지정합니다. 오브젝트는 Canvas로, 함수는 UIManager:OnBtnUnityAds로 합니다.


8. 안드로이드 플레이어 설정을 마친후 빌드하여 테스트합니다.

    : 실행하면 버튼이 잠시후 활성화됩니다. ( Advertisement.IsReady() )


: 버튼을 클릭하면 보여지는 테스트용 광고


: 광고 종료후 Gold가 100으로 되었습니다.



Posted by GNUPart
Unity2015. 8. 12. 16:29

Unity, Posting, FaceBook, Twitter, No PlugIn


Posting to FaceBook or Twitter on Unity3D without any plugins

- Reference: http://unity3dtrenches.blogspot.kr/2014/07/unity3d-how-to-post-to-facebook-from.html



* 페이스북 어플리케이션 등록 및 포스팅 테스트


1. 페이스북 개발자 페이지에 로그인후 My Apps탭을 엽니다. (개발자로 등록된 상태여야 합니다.)


2. Add a New App을 클릭합니다.


3. 팝업에서 플랫폼을 선택합니다. (여기서는 Android선택)



4. 제목을 입력하고, Create New Facebook App ID를 클릭합니다.


5. 각각의 항목을 설정하고 Create App ID를 클릭합니다.


6. 이후 나오는 화면에서 아래로 스크롤하면 Tell us about your Android project항목이 있습니다.



- Package Name: 이전 포스팅에서 작업했던 유니티 프로젝트의 Bundle Identifier를 입력합니다.

- Default Activity Class Name: 페이스북 SDK용 항목같은데, 임시로 입력합니다.

- '다음'버튼을 클릭합니다.


7. 팝업창이 뜹니다. 구글 플레이에서 입력한 패키지를 찾을수 없다는 내용인데, 테스트용이므로 'Use this package name'을 클릭하여 넘어갑니다.


8. 해쉬키 입력입니다. 역시 테스트용이므로 넘어갑니다.


9. 다음에서 Skip to Developer Dashboard를 클릭합니다.


10. 대쉬보드 입니다. App ID를 복사하여 유니티 프로젝트, UIManager.cs의 FACEBOOK_APP_ID로 설정합니다.



11. 유니티 프로젝트를 빌드하고 테스트를 합니다. 윈도우 및 안드로이드에서 테스트 할 수 있습니다.


- 윈도우 테스트




- 안드로이드 테스트















Posted by GNUPart
Unity2015. 8. 12. 15:31

Unity, Posting, FaceBook, Twitter, No PlugIn


Posting to FaceBook or Twitter on Unity3D without any plugins

- Reference: http://unity3dtrenches.blogspot.kr/2014/07/unity3d-how-to-post-to-facebook-from.html


 앱에서 페이스북에 포스팅하는 기능을 구현하는데는 여러가지 방법이 있습니다. 안드로이드 기준으로는 페이스북 SDK를 이용한다거나, ACTION_SEND Intent를 사용하는 방법입니다. 하지만 유니티에서 사용하려면 플러그인을 사용해야 합니다. 또한 ACTION_SEND의 방법으로는 페이스북에 링크나 텍스트를 올릴 수 없고, 오직 이미지만 포스팅할 수 있죠. 

 본문에서는 유니티의 OpenURL함수를 사용하여 포스팅하는 방법을 소개합니다. 각 플랫폼의 웹브라우저를 사용하는 방법으로써 간단한 코드로 플랫폼 구분없이(Android, iOS, 윈도우) 사용이 가능합니다.


 구현하고자 하는 기능은 다음과 같습니다.

* 구현 기능 : 플러그인 없이 포스팅

 - 'Posting to FaceBook' 버튼 클릭 -> 페이스북에 이미지, 글 및 링크 올리기

 - 'Posting to Twitter' 버튼 클릭 -> 트위터에 링크 올리기



 기능 구현을 위해서는 페이스북 개발자로 등록되어 있어야 하며(http://developers.facebook.com), 페이스북에 앱을 등록해야 합니다. 개발자 등록 설명은 생략하고, 페이스북 앱등록에 관련해서만 다음 절에서 설명하겠습니다.

 

 다음은 작업의 전체 순서입니다.

 #1. 유니티 프로젝트 생성 (Unity3D 작업)

 #2. 페이스북 어플리케이션 등록 및 포스팅 테스트 (Web/디바이스 작업)



* 유니티 프로젝트 생성


1. 유니티에서 새 프로젝트를 생성하고 Android플랫폼, Bundle Identifier를 설정합니다. (Scene은 MainScene으로 저장)



2. Canvas를 생성하고, 하위에 버튼을 생성합니다. Canvas는 다음과 같이 임의로 설정했습니다.


3. 'Button'의 이름을 'BtnFaceBook'으로 수정하고, 대충의 위치를 설정합니다.


4. 'UIManager' 이름으로 C# Script를 생성하고, Canvas의 컴포넌트로 지정합니다.


5. UIManager.cs에 다음을 코딩합니다.

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
using UnityEngine;
using System.Collections;
 
public class UIManager : MonoBehaviour {
 
    const string FACEBOOK_APP_ID = "0123456789xxxx";
    const string FACEBOOK_URL = "http://www.facebook.com/dialog/feed";
    const string TWITTER_ADDRESS = "http://twitter.com/intent/tweet";
 
    public static void ShareToFacebook(
        string linkParameter, string nameParameter, string captionParameter,
        string descriptionParameter, string pictureParameter, string redirectParameter
        )
    {
        Application.OpenURL(FACEBOOK_URL + "?app_id=" + FACEBOOK_APP_ID +
        "&link=" + WWW.EscapeURL(linkParameter) +
        "&name=" + WWW.EscapeURL(nameParameter) +
        "&caption=" + WWW.EscapeURL(captionParameter) +
        "&description=" + WWW.EscapeURL(descriptionParameter) +
        "&picture=" + WWW.EscapeURL(pictureParameter) +
        "&redirect_uri=" + WWW.EscapeURL(redirectParameter));
    }
 
    public static void ShareToTwitter(string textToDisplay, string language)
    {// language: "en", "kor", "jap"
        Application.OpenURL(TWITTER_ADDRESS +
                    "?text=" + WWW.EscapeURL(textToDisplay) +
                    "&amp;lang=" + WWW.EscapeURL(language));
    }
    
    public void OnBtnFaceBook()
    {
        ShareToFacebook(
            "http://sunbug.net",            // linkParameter
            "My Funny Game",                // nameParameter
            "My Caption Message",           // captionParameter
            "My Description Message",       // descriptionParameter
            "https://www.google.co.kr/images/srpr/logo11w.png"//pictureParameter
            "http://www.facebook.com"       // redirectParamter
            );
    }
 
    public void OnBtnTwitter()
    {
        ShareToTwitter("http://sunbug.net""kor");
    }
 
}
 
 
cs


- FACEBOOK_APP_ID : 페이스북 앱의 아이디입니다. '페이스북 어플리케이션 등록'에서 설명합니다.

- public static void ShareToFaceBook( ) : 페이스북에 포스팅하는 함수입니다(편의상 static로 지정). 각 인자는 다음과 같습니다.


> linkParameter: 링크할 URL

> nameParameter: 제목

> captionParameter; 이미지 설명

> descriptionParameter: 본문

> pictureParameter: 이미지 URL

> redirectParameter: 포스팅 후 연결할 URL . 보통 http://www.facebook.com으로 합니다.


6. BtnFaceBook의 OnClick 이벤트를 지정합니다. Object에는 Canvas를, Function에는 UIManager::OnBtnFaceBook()을 설정합니다.


7. BtnTwitter을 생성하고 위와 마찬가지로 UIManager::OnBtnTwitter()으로 이벤트 설정을 합니다.


8. 페이스북 개발자 페이지에서 어플리케이션 생성/등록을 합니다. 

  ( 다음을 참조하세요: 유니티 - 플러그인 없이 페이스북 및 트위터에 포스팅하기 #2/2 )






Posted by GNUPart
Unity2015. 7. 30. 23:26

Physical movements of hair and skirt with sprite-skewing



Using a custom sprite shader, hair and skirt are physically animated. All sprites are batched by the Unity3D's default sprite batching system. 


Sprite Skew 테스트. 캐릭터 애니메이션. 2D 스프라이트. 유니티







Posted by GNUPart
Unity/Notes2015. 7. 22. 04:46

* C/C++과 구조체 비교 (마샬링, System.Runtime.InteropServices)


C/C++

  1. struct A   
  2. {   
  3.    int dBuffer[16];   
  4. }; 


C#

  1. struct A   
  2. {   
  3.    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]
  4.    int[] dBuffer;
  5. }; 



* 인터페이스 적용 여부 테스트

IBlah myTest = originalObject as IBlah

if (myTest != null)


if (object is IBlah)


if( typeof(IMyInterface).IsAssignableFrom(someOtherType) ) { }


*



Posted by GNUPart
Unity/Notes2015. 7. 21. 23:53


* Asset Store에서 다운받은 파일 경로

C:\Users\accountName\AppData\Roaming\Unity\Asset Store


* GameObject instantiate : Instantiate( ) -> GameObject:Awake() 


* Editor: Scene창에 글자출력

1
2
3
4
5
6
7
public void OnSceneGUI()
{
    GUIStyle style = new GUIStyle();
    style.normal.textColor = Color.red;
    Handles.Label(Vector3.zero, "Test Label", style);
}
cs


- Rich Text로 출력

1
2
3
4
5
6
public void OnSceneGUI()
{
    GUIStyle style = new GUIStyle();
    style.richText = true;
    GUILayout.Label("<size=30>Some <color=yellow>RICH</color> text</size>", style);
}

cs


* Monobehaviour::Awake() - active 되어야 호출된다. ( SetActive(true)에서 활성화후 호출할 수 있다.)


* Sprite vs. Mesh : 기본 Sprite Editor가 있어 추가 리소스 편집이 편하다.

Posted by GNUPart
Unity2015. 6. 24. 16:15

unity, google play game service, apple gamecenter, admob


이후 맥에서 작업

선행으로 'iTunes Connect에서 테스트 앱 설정하기'가 되어있어야 한다.


* iOS 빌드하기


1. 맥에서 googlemobileadssdkios.zip을 다운받고 압축을 푼다. 

  ( https://developers.google.com/mobile-ads-sdk/download?hl=ko )


2. Unity/ iOS Player 세팅을 확인한 후 빌드한다.

<Unity iOS Player setting(좌) 및 빌드 결과(우)>


3. XCode를 실행한후 Provisiong Profile을 SocialTest로 수정한다.


4. LLVM x.x - Language - Modules의 다음 항목을 수정한다.

  - Enable Modules(C and Objective-C) : Yes

  - Link Frameworks Automatically : Yes


5. Build Phase탭에서 프레임워크를 추가한다.


6. Add Other선택후 1에서 다운받은 GoogleMobileAds.framework를 선택한다.



<프레임워크 추가된 화면>


7. 실제 테스트기기로 빌드하고 실행한다.

< iPhone 최초실행 화면(좌) 및 버튼을 눌렀을때의 리더보드 화면(우) >






Posted by GNUPart
Unity2015. 6. 24. 15:12

unity, google play game service, apple gamecenter, admob


* AdMob 플러그인 설치 및 설정


1. 유니티용 AdMob 플러그인을 다운받는다. ( https://github.com/googleads/googleads-mobile-plugins/releases )

2. Unity에서 AdMob플러그인을 설치한다.


3. MainScene.cs에 다음의 붉은색 부분들을 삽입한다.

using UnityEngine;

using System.Collections;


#if !UNITY_IPHONE

using GooglePlayGames;

using GooglePlayGames.BasicApi;

using GooglePlayGames.BasicApi.SavedGame;

#endif


using GoogleMobileAds.Api;


public class MainScene : MonoBehaviour {


#if UNITY_ANDROID

    static PlayGamesClientConfiguration _GPGConfig;

#endif


    ////// AdMob defintions

    //

    static BannerView _BannerView;

    //

    //////


void Start () {

#if UNITY_ANDROID

        _GPGConfig = new PlayGamesClientConfiguration.Builder()

            .EnableSavedGames()

            .Build();


        PlayGamesPlatform.InitializeInstance(_GPGConfig);

        PlayGamesPlatform.DebugLogEnabled = true;

        PlayGamesPlatform.Activate();

#endif


        Social.localUser.Authenticate(

                (bool success) =>

                {

                    Debug.Log(" - Social:SingIn= " + success.ToString());

                }

            );


        ////// AdMob init. & shows banner

        //

        string banner_id = " 애드몹 배너 아이디를 여기에서 설정한다. ";

        _BannerView = new BannerView(banner_id, AdSize.Banner, AdPosition.Bottom);

        _BannerView.LoadAd(new AdRequest.Builder().Build());

        _BannerView.Show();

        //

        //////

}

public void OnButtonClick()

    {

        long score = 123;

#if UNITY_ANDROID

        string leader_board_id = "CgkI2-i6kL8CEAIQAQ";

#elif UNITY_IPHONE

        string leader_board_id = "SOCIALTEST_HIGH_SCORE";

#endif


        Social.ReportScore(score, leader_board_id,

                (bool success) =>

                {

#if UNITY_ANDROID

                    PlayGamesPlatform.Instance.ShowLeaderboardUI(leader_board_id);

#elif UNITY_IPHONE

                    Social.ShowLeaderboardUI();

#endif

                }

            );

    }

}

- banner_id는 애드몹 페이지에서 복사하여 붙여넣는다. 


4. Android로 빌드 및 실행.



Posted by GNUPart
Unity2015. 6. 24. 02:18

unity, google play game service, apple gamecenter, admob


* Unity/ 테스트용 어플 제작


1. UI/ Canvas를 생성한다. (EventSystem자동생성됨)

2. Canvas의 자식으로, UI/ Button을 생성한다.

3. Empty Object (GameObject)를 생성한다.

4. MainScene.cs를 생성한후 3번에서 생성한 GameObject의 컴포넌트로 넣는다.

5. Scene를 'MainScene'이름으로 저장한다. (Ctrl+S)


5. MainScene.cs에 다음을 작성한다.

using UnityEngine;

using System.Collections;


#if !UNITY_IPHONE

using GooglePlayGames;

using GooglePlayGames.BasicApi;

using GooglePlayGames.BasicApi.SavedGame;

#endif


public class MainScene : MonoBehaviour {


#if UNITY_ANDROID

    static PlayGamesClientConfiguration _GPGConfig;

#endif


void Start () {

#if UNITY_ANDROID

        _GPGConfig = new PlayGamesClientConfiguration.Builder()

            .EnableSavedGames()

            .Build();


        PlayGamesPlatform.InitializeInstance(_GPGConfig);

        PlayGamesPlatform.DebugLogEnabled = true;

        PlayGamesPlatform.Activate();

#endif


        Social.localUser.Authenticate(

                (bool success) =>

                {

                    Debug.Log(" - Social:SingIn= " + success.ToString());

                }

            );

}

public void OnButtonClick()

    {

        long score = 123;

#if UNITY_ANDROID

        string leader_board_id = "CgkI2-i6kL8CEAIQAQ";

#elif UNITY_IPHONE

        string leader_board_id = "SOCIALTEST_HIGH_SCORE";

#endif


        Social.ReportScore(score, leader_board_id,

                (bool success) =>

                {

#if UNITY_ANDROID

                    PlayGamesPlatform.Instance.ShowLeaderboardUI(leader_board_id);

#elif UNITY_IPHONE

                    Social.ShowLeaderboardUI();

#endif

                }

            );

    }

}


 - leader_board_id는 구글 Developer Console 및 iTunes Connect에서 확인하여 붙여넣는다.


6. Button의 클릭 이벤트를 지정한다. 

 - 오브젝트 : GameObject

 - 함수: MainScene.OnButtonClick



7. Edit메뉴/ Project Setting/ Player/ iOS의 Other Settings에서 Scripting Define SymbolsNO_GPGS를 입력한다. ( iOS로 빌드시 구글 플레이 서비스를 제외하기 위함.)



8. Android로 빌드한 후 실행한다. (Ctrl+B)

< 처음 실행시 화면(좌) 및 버튼을 눌렀을때 나오는 리더보드 화면(우) >


.


Posted by GNUPart
Unity2015. 6. 24. 01:13

unity, google play game service, apple gamecenter, admob


Unity 5.x 버전 기준으로 작성.


- Android 버전은 구글 플레이 서비스 연동

- iOS 버전은 애플 게임 센터 연동

- AdMob 연동 (Android/iOS)


* 구글 플레이 / Developer Console 업로드용 apk 빌드


1. Unity / 새 프로젝트 / SocialTest 이름으로 프로젝트 생성

2. Player Setting에서

 - Other Settings / Bundle Identifier : com.testcompany.SocialTest 입력


 - Publishing Settings의 Keystore 정보 입력 (Unsigned(debug)는 안됨)


3. 빌드해서 APK파일 생성.

4. 구글 플레이 게임 서비스 정보 입력 ( 구글 플레이 게임 서비스 연동 테스트 링크  )



* 구글 플레이 게임 서비스 플러그인 설치


1. 플러그인 다운로드 ( 링크 )

 - 오른쪽의 'Download ZIP' 클릭


2. Unity / Assets/ Import Package/ Custom Package 메뉴 선택후, 위에서 다운받은 파일중

current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage

를 임포트한다.

  


3. 임포트에 성공하면, Window메뉴에 'Google Play Games'메뉴가 생성된다. 

  Window/ Google Play Games/ Setup/ Android Setup 선택



4. 구글 Developer ConsoleSocial Test에서 Application ID를 복사하여 입력하고, Setup을 클릭한다.

 <Application ID복사>



<정상적으로 세팅이 되었다>








Posted by GNUPart
Unity2015. 3. 30. 23:00



using a custom shader for sprite, sprites are skewed with dynamic batching

Posted by GNUPart