Unity Engine/Amazon2013.07.22 17:51

아마존 모바일 앱을 등록하고, 인앱 구매 모듈을 붙이시려는 분들께 도움이 되고자 남겨봅니다.

티스토어 인앱모듈을 붙여보신 분이라면 이클립스 작업으로 플러그인을 만들어야 하는 게 아닌가 생각하실 수 있습니다만, 아마존 모바일 인앱모듈은 구현이 상당히 쉽습니다. (유니티용 패키지를 따로 제공하기 때문에 꼼꼼히 적재적소에 코딩하시는 일만 남거든요~)


그럼, 간단하게 Consumable 상품을 하나 추가해 테스트 하는 과정까지 살펴보도록 하겠습니다.


1. In-App 상품 등록

어플을 등록 후 In-App Items 탭을 눌러 인앱상품을 등록합니다.



인앱상품은 Consumable(일반 소비성 아이템-게임머니 등), Entitlement(영구 구매 등 권한부여 아이템), Subscription(구독 등 기간제 아이템) 3가지 종류 중 선택하여 추가하실 수 있습니다.

그리고 SKU (인앱상품 식별코드) 는 어플 내에서 상품 구매시 호출할 때 사용되니 상품별로 네이밍을 잘 하시면 됩니다. (상품별 로직을 짜실 수 있게 규칙성을 주시면 좋겠죠.)


2. Amazon Mobile Apps-SDK 다운

Apps-SDK.zip 파일을 다운 받으시면 됩니다. (개발자 등록과정 등은 생략할게요. 개발자 등록이 안되도 SDK는 다운 받으실 수 있습니다. 다만, 인앱 상품등록을 하려면 개발자 등록, 앱 등록이 필수겠죠 ㅎ)


3. In-App Purchasing Unity Plug-In 설치

다운 받으신 파일을 압축해제 해 보면 DeviceMessaging, GameCircle, In-App-Purchasing 등 아마존에서 제공되는 SDK가 모두 포함 되 있습니다. 이 중 In-App-Purchasing/plugins/unity/AmazonIAP.unitypackage 를 해당 프로젝트에서 Import 합니다.


4. AndroidManifest.xml 파일 생성 및 설정



패키지를 Import 하면, 유니티 상단 메뉴에 Amazon 탭이 생깁니다. Amazon 탭에서 Generate AndroidManifest.xml File... 을 선택하시면 Assets 폴더 내에 Plugins/Android/AndroidManifest.xml 파일이 생성됩니다. 이 작업은 아마존 인앱구매 창의 액티비티를 AndroidManifest.xml 에 추가하기 위함입니다. Plugins/Android/AndroidManifest.xml 파일이 있으면 안드로이드 빌드 시 해당 파일로 AndroidManifest.xml 이 생성됩니다. 

(이 때, 다른 작업으로 이미 AndroidManifest.xml 파일을 생성하셨다면 필요한 퍼미션이나 액티비티들을 복사 해 두셨다가 Generate AndroidManifest.xml File... 후에 다시 추가 해 주셔야 합니다.)


그리고 혹시나 AndroidManifest.xml 파일에 다음 퍼미션이 추가 되 있지 않다면 반드시 추가 해 주시기 바랍니다. (이게 없으면, 구매 완료를 알려주지 않아요.)

<receiver android:name="com.amazon.inapp.purchasing.ResponseReceiver">
    <intent-filter>
        <action android:name="com.amazon.inapp.purchasing.NOTIFY" android:permission="com.amazon.inapp.purchasing.Permission.NOTIFY"/>
    </intent-filter>
</receiver>



5. 인앱상품 모듈 구현

- 상품 목록 호출

AmazonIAP.initiateItemDataRequest(string[인앱상품 식별코드 리스트]);


- 상품 호출 이벤트

성공시

void itemDataRequestFinishedEvent( List<string> unavailableSkus, List<AmazonItem> availableItems )


AmazonItem.description ( 상품설명 )

AmazonItem.type ( Consumable, Entitlement, Subscription )

AmazonItem.price ( 상품 가격 )

AmazonItem.sku ( 인앱상품 식별코드 )

AmazonItem.smallIconUrl ( 상품 대표아이콘 ; 인앱상품 등록시 업로드 한 이미지 url )

AmazonItem.title ( 상품명 )


실패시

itemDataRequestFailedEvent()


- 상품 구매 요청

AmazonIAP.initiatePurchaseRequest(인앱상품 식별코드(SKU))


- 상품 구매 이벤트

성공시

void purchaseSuccessfulEvent( AmazonReceipt receipt )


AmazonReceipt.type ( Consumable, Entitlement, Subscription )

AmazonReceipt.token ( 인증 토큰 - 개별 인앱 인증 서버 구현시 필요 )

AmazonReceipt.sku ( 인앱상품 식별코드 )

AmazonReceipt.subscriptionStartDate ( Subscription 상품 시작일 )

AmazonReceipt.subscriptionEndDate ( Subscription 상품 종료일 )


실패시

void purchaseFailedEvent( string reason )



Entitlement, Subscriptions 모듈 구현은 해당 페이지를 참고하세요~ 너무 쉽게 잘 설명 되 있어서 추가로 설명드리지 않아도 되겠네요~

(사실 Consumable 상품만 해봐서 ^^)


Overview of Entitlements


Overview of Subscriptions




6. 인앱구매 테스트

Amazon In-App Purchasing 테스트의 경우, 실제로 앱이 등록되기 이전에 인앱상품 테스트를 해 볼 수 있도록 AmazonSDKTest 앱을 제공합니다. 구현하신 앱상에서 인앱 상품 구매를 요청하면 AmazonSDKTest 앱에서 특정폴더에 저장 된 json 파일을 읽어 상품을 확인하고 상품 화면을 보여주고, 구매가 이뤄지면 구매 성공여부도 AmazonSDKTest 에서 해당 앱으로 알려주게 됩니다.

- AmazonSDKTest를 설치

테스트 앱은 2. Amazon Mobile Apps-SDK 다운 때 받으신 파일 내에 있습니다. In-App-Purchasing/tools/AmazonSDKTest.apk

- json 파일을 설정

상품명, SKU, 가격 등의 정보가 입력 된 json 파일을 SD카드 Root 에 json 파일을 저장하시면 됩니다. (파일명은 amazon.sdktester.json)

json 파일의 형식대로 직접 입력하셔도 되지만 아마존 인앱상품 등록화면에서 추출하셔서 사용하면 더 편합니다.




'Unity Engine > Amazon' 카테고리의 다른 글

Amazon In-App Purchasing 모듈 붙이기  (0) 2013.07.22
Posted by Min-gu, Kim
Unity Engine2012.08.22 14:40

물체 사이의 거리를 구하는 간단한 방법을 설명하겠습니다.


우선, 힘겹게 "그림판"으로 완성 된 아래 이미지 부터 보시죠.

(허접하다는게 반전)



① 두 물체 사이의 거리


  구하는  방법은 아주 간단합니다. Unity 에서 Scene 내에 존재하는 모든 GameObject 들은 각각 transform 을 기본적으로 가지고 있기 때문에 두 transform 사이의 거리를 계산하면 됩니다.

  Transform 에는 world space 상에서의 transform 의 위치를 나타내는 Vector3형의 position 값이 존재합니다. 위 이미지 상에서 (0,0,0) , (4,5,0) 이 바로 이 값이죠. 

  그럼, 두 position 을 이용 해 어떻게 거리를 구할까요?

  피타고라스의 정리를 통해 (4*4 + 5*5) 의 제곱근을 구하는 코드를 구현할까요? 아, 물론 그렇게 하면 두 물체 사이의 거리가 나옵니다. 하지만, Vector3 에서 제공하는 함수 중에 Distance 라는 함수가 있어, 좀 더 편하게 코드를 구현하실 수 있습니다.



return Vector3.Distance(PlaneObj.transform.position, SphereObj.transform.position);


  이렇게 하면 두 물체 사이의 거리를 구할 수 있습니다.



② 평면과 물체 사이의 거리


  그렇다면, 평면과 물체 사이의 거리는 어떻게 구할까요?


  Unity 에서 제공하는 Plane (struct) 을 이용하면 간단히 해결 하실 수 있습니다. -① 번 보단 덜 간단하지만-

  방법은, Plane 객체를 생성해서 Plane 에서 제공하는 GetDistanceToPoint 함수를 통해 Sphere 객체와의 거리를 구하면 됩니다.

  Plane 객체를 생성시 3D 평면의 정의와 똑같이 생성자를 요구합니다. (법선 벡터 N이 가리키는 방향과 수직이며 점P를 지나는 점 Q들의 집합.. 뭐 대충 이런;;). 위 경우에는 법선 벡터 N을 Plane 객체와 수직인 PlaneObj.transform.up 으로 지정, 점 P는 PlaneObj.transform.position 가 되겠죠.



Plane plane = new Plane(PlaneObj.transform.up, PlaneObj.transform.position);

return plane.GetDistanceToPoint(SphereObj.transform.position);


  이렇게 하면 평면과 한 물체 사이의 거리를 구하실 수 있습니다.


  (아! 위 이미지에서 평면과 물체 사이는 5 - 0 값인 5가 맞습니다. 쉽게 설명 드리기 위해서 position 을 설정했기 때문에 위와 같은 코드가 의미가 없어 보일 수도 있습니다만, position 도 다양할 수 있고 평면의 rotate 또한 x,y,z 어떤 축으로든 다양하게 설정 될 수 있겠죠. 그럴 때에는 위와 같은 코드가 상당히 의미 있게 사용 될 수 있습니다 ^^) 



Posted by Min-gu, Kim
Unity Engine2012.07.26 18:44

이번 포스팅은 정말 간단한 내용이 되겠네요.


Missing Prefab 복구!!


Unity3D 로 프로젝트를 진행하면서, Prefab 을 많이 만들어서 사용하게 됩니다. (저만 그런 건 아니겠죠?)


제 경우에는 재사용성을 고려해서.. 혹은, 다른 Scene으로 복사하려는 목적으로.. 혹은 Package Import, Export 순으로 다른 프로젝트로 옮길때.. 등등 Prefab 을 만들었다가 다시 Project 뷰에서 Prefab 을 제거하는 경우가 생기더라고요.


헌데 이렇게 연결 된 Prefab 을 삭제하고 나면 Hierarchy 뷰에 있는 GameObject(Prefab 과 연결 되 있던) 가 Prefab 을 Missing 했다면서 빨간색으로 변하게 됩니다. ㅠ.ㅠ 



신경 안쓰고 넘길 수도 있지만, 저는 이게 너무나도 싫어서~(보기 흉해) 방법을 좀 찾아봤습니다. 당연히, Inspector 뷰에서 처리할 수 있는 줄 알았는데 도저히 못찾겠더라고요.


Google 검색 키워드도 제대로 타이핑 할 수 없어 해메다가.. 정말 찾기 쉬운 곳에 해결 방법이 있었습니다. (ㅠㅠ)

바로 GameObject 메뉴에 있더군요.




해결방법!


Missing GameObject 를 Hierarchy 에서 선택 하신 뒤, GameObject > Break Prefab Instance 를 클릭 하면 짜잔~ 정상(White color)으

로 돌아옵니다. 더이상 Missing GameObject 가 아니게 됩니다. 



Posted by Min-gu, Kim
Unity Engine2012.07.03 18:22

Ray Cast 란, 3차원 공간에서 어느 한 점(시작점)에서 Ray 를 정해진 방향(direction vector)으로 쏴 Ray 와 충돌 되는 객체를 구하는 방법을 말합니다. 


Unity3D 에서는 Ray Cast 를 위한 몇가지 유용한 클래스와 struct, 메소드 등을 제공합니다. 

샘플 구현에 필요한 몇가지를 우선 소개 하자면,


Ray (struct)  > Unity Script Reference 참고

Ray Cast를 위한 재료 중 가장 중요한 Ray 의 정보를 담습니다.

origin : Ray 가 시작되는 지점을 설정하고,

direction : Ray 가 시작 지점(origin)에서 쏘여지는 방향을 설정합니다.


Physics.Raycast (Physics class, Raycast Method)  > Unity Script Reference 참고

Ray Cast 를 실행하여 Ray 와 객체가 충돌하는 지 체크하는 메소드입니다.

객체와 충돌 되는 경우 true 값을 반환합니다. 


RaycastHit (struct)  > Unity Script Reference 참고

Physics.Raycast 메서드의 파라미터로 값을 할당(out)하며 Ray 에 충돌 된 객체의 정보를 담습니다.



그럼, 직접 샘플을 통해 Ray Cast 를 구현 해 보겠습니다. Ray Cast는 다양한 방법으로 이용 될 수 있겠지만, 우선 저는 스크린에서 마우스 버튼이 Up 될 때 마다 그 지점에서 Ray를 쏴 객체와 충돌하는지 체크하는 샘플로 Ray Cast 구현 방법을 설명 해 보겠습니다.



1. Ray 객체 생성

- Mouse 가 Up 될 때마다 실행 되야 하기 때문에 Input.GetMouseButtonUp() 를 체크하여 그 때 마다 Ray 객체를 생성합니다.

public Camera MainCamera;
    
// Update is called once per frame
void Update () {

    if (Input.GetMouseButtonUp(0)) {
        // Ray 객체 생성
        Ray ray = MainCamera.ScreenPointToRay(Input.mousePosition);

        // rayCasting 실행
        rayCasting(ray);
    }
}


- MainCamera (Inspector 상에서 할당했습니다.) 의 ScreenPointToRay 메서드는 Screen 상에서의 좌표를 World space 상에서의 좌표로 변환하여 시작점(origin)으로 설정하고, direction 을 카메라가 비추는 방향으로 설정 된 Ray 객체를 반환합니다.



2. Ray Cast 실행

void rayCasting(Ray ray) {
    RaycastHit hitObj;
    if (Physics.Raycast(ray, out hitObj, Mathf.Infinity)) {
        if (hitObj.transform.tag.Equals("Cube")) {
            CubeScript cubeScript = hitObj.transform.GetComponent<CubeScript>();
            if (null != cubeScript) {
                cubeScript.Hit();
            }
        }
    }
}


- Physics.Raycast 메서드를 실행하면, Ray 객체의 origin에서 direction 으로 Ray 를 쏴 줍니다. 그리고, 충돌 되는 객체가 있으면 true 를 반환하고 RaycastHit 객체를 out 키워드를 통해 파라미터로 던져 주면 충돌 된 객체의 정보를 담아서 반환 해 줍니다. 


- 메서드 실행 시 Ray의 길이를 float 값으로 받습니다. 이 값은 Ray 가 얼마만큼(길이만큼) 쏴 지도록 설정하는 것인데, Mathf.Infinity를 할당하면 무한대로 쏴서 체크합니다.



3. Ray 에 맞은 객체 처리 구현

- Cube 를 Prefab 으로 만든 뒤에 Tag에 "Cube"라고 입력 하고, Cube 객체를 컨트롤 할 CubeScript 를 컴포넌트로 추가했습니다.

- CubeScript 에서 Hit 메소드를 만들어 Ray에 맞았을 경우 호출 하도록 합니다.

float angle = Random.Range(270, 360);
this.gameObject.transform.Rotate(Time.deltaTime * angle * Vector3.one);





 Sample Project


RaycastingSample.7z





Sample Video



Posted by Min-gu, Kim
Unity Engine2012.06.27 19:43

Fruit Ninja 를 플레이 해 보시면, 손가락을 사용해 터치 디바이스에 드래그를 하면 칼날을 휘두른 것 같은 효과가 납니다. 물론, Fruit Ninja 뿐만 아니라 많은 스마트폰 디바이스용 어플에서 볼 수 있는 효과입니다. 이것을 어떻게 구현할까 싶어 알아보니, Trail Renderer 를 사용하면 쉽게 구현이 가능하더군요. (Sword 효과라고 명명 된 것은 아니고, 정확히 어떤 명칭을 붙여야 하는지 모르겠어서 그냥 Sword 효과라고 이름을 붙였습니다.)

 

TrailRenderer 는 Unity3D Document 에서 이렇게 설명합니다.

 

"The Trail Renderer is used to make trails behind objects in the scene as they move about."

 

Scene 내에서 GameObject 가 이동 시, 이동한 흔적(Trail)을 남기고자 할 때 사용되는 것이죠.

 

그럼, Sword 효과를 내기 위해 Trail Renderer 를 어떻게 사용하면 될까요?

방법은 아주 간단합니다.

 

1. GameObject 를 두고, Trail Renderer 컴포넌트를 추가

  - Hierarchy 에 Empty GameObject 를 추가. (TrailObject 라고 이름을 변경 했습니다.)

  - 추가 된 GameObject 를 선택하고 Trail Renderer 컴포넌트 추가 (Component - Effects - Trail Renderer) 

 

  - Trail Renderer 컴포넌트의 속성 설정. 

저는 간단히 Material 을 Unity에서 제공하는 Fire Smoke 로 설정하고, Start Width, End Width 만 살짝 바꿔봤습니다. (입맛에 맞게 설정하시면 됩니다.)

 

 

2. Input 클래스를 사용하여 Move 발생 시 마다 GameObject 의 Transform 을 변경

  - Scene 에서 발생하는 이벤트를 처리하기 위한 Script 를 추가. (mainSceneScript.cs)

    + Trail Renderer 컴포넌트가 추가 된 GameObject 를 할당 할 변수 추가

public GameObject TrailObject;

 

    + Inspector 에서 변수 할당 

(MainCamera 도 변수 선언을 해서 할당 했습니다.)

 

 

  - Script 에 터치 이벤트 처리하여 Move 발생 시에 GameObject 의 Transform 변경.

TrailObject.transform.position =
    MainCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 1));

 

 

결과 화면 

 

 

 

요약.

1. GameObject 를 두고, Trail Renderer 컴포넌트를 추가.

2. Input 클래스를 사용하여 Move 발생 시 마다 GameObject 의 Transform 을 변경.

Posted by Min-gu, Kim
Unity Engine2012.06.20 11:21

1. FSM 구현을 위해 Unity3D engine 이 제공하는 StartCoroutine 메서드 활용.

Unity > Support > Script Reference > MonoBehaviour.StartCoroutine 참고

Unity3D engine 에서 제공하는 MonoBehaviour 객체의 StartCoroutine 메서드는 매 프레임 마다 지정 된 콜백함수를 실행합니다.

Debug.Log 를 찍어서 확인 해 보시면, Update, StartCoroutine 에서 지정 된 콜백함수 순으로 실행이 됩니다.

이때 지정 된 콜백 함수가 IEnumerator 를 반환하는 형태이기 때문에 while 문과 yield 키워드를 통해 FSM 을 구현 할 수 있습니다.

 

2. State 정의 및 IEnumerator 를 반환하는 State 별 함수 구현.

  - State 정의

    우선, FSM 이 되는 객체에 State 를 정의 합니다. (귀찮아서 세밀하게 구현 하는 것보단 심플하게 어떻게 동작하는지 보여드리는게 더 효과적일 것 같아서 Init, Idle, Move 로만 정의했습니다.)

 

public enum DudeState {
    Init,
    Idle,
    Move
}

 

  - State 별 함수 구현

    FSM을 구현하기 위해 3가지의 메서드가 필요합니다. (State 최초 진입 시 실행 될 메서드, 매 프레임마다 실행 될 메서드, State 종료시 실행 될 메서드)

    만약, StartCoroutine 메서드가 없다면 각 메서드를 구현 해 주고, State 변경 메서드를 따로 두어 관리해야 하겠지만, Unity3D engine 을 사용 시에는 더욱 더 편하게 3개의 메서드를 하나로 통합 할 수 있으며, 클래스 상속을 통해 메서드를 상속, 오버라이드 하여 유연하게 구현하는 장점이 생기죠.

방법은 다음과 같습니다.

 

IEnumerator MoveState() {
    // Enter
    this.gameObject.animation.Play("Take 001");
    yield return null;

    while (this.State == DudeState.Move) {
        // Excute
        this.gameObject.transform.position +=
            new Vector3(0, 0, Time.deltaTime * moveSpeed);

        if (!moving) {
            this.State = DudeState.Idle;
        }

        yield return null;
    }

    // Exit
    NextState();
}

 

    IEnumerator 를 반환하고 yield 키워드를 사용하는 이유는 이렇습니다.

    StartCoroutine에 콜백함수가 지정되면, 지정 된 콜백함수는 매프레임마다 Update 문 다음에 실행됩니다. 이 때, yield 문을 만나면 콜백함수 내에서 yield 다음 구문을 다음 프레임으로 양보하고 콜백함수가 종료가 됩니다. 그러면 또 다음번 프레임에서는 yield 문 다음 구문이 실행이 되는 것이죠.

 

    그래서 위와 같이 콜백함수를 코딩하면,

      - State 최초 진입 시 실행 되는 블럭 (Enter 부분, while 문 이전까지)

      - 매 프레임 마다 실행 되는 블럭 (Execute 부분, While 문 블럭)

      - State 종료 시 실행 되는 블럭 (Exit 부분, while문 블럭 이하)

    이렇게 구현이 되는 것이죠.

 

3. 각 State 에 맞는 StartCoroutine 의 콜백함수(2.번에서 구현 된)를 지정.

 

protected void NextState() {
    string methodName = State.ToString() + "State";
    System.Reflection.MethodInfo info = GetType().GetMethod(methodName,
        System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
    StartCoroutine((IEnumerator)info.Invoke(this, null));
}

 

 

 

 

요약

1. FSM 구현을 위해 Unity3D engine 이 제공하는 StartCoroutine 메서드 활용.

2. State 정의 및 IEnumerator 를 반환하는 State 별 함수 구현.

3. 각 State 에 맞는 StartCoroutine 의 콜백함수(2.번에서 구현 된)를 지정.

 

 

 

Unity 샘플 프로젝트를 첨부합니다.

FSMSample.7z

 

 

Posted by Min-gu, Kim
Unity Engine/Android2012.06.05 12:40

Eclipse 안드로이드 프로젝트로 만든 Activity 를 Unity3D 에서 Main 으로 사용하기 위해서는 다음과 같은 작업을 필요로 합니다.

 

 

1. 새 프로젝트 생성 후 Activity 파일명 변경

  - Eclipse 에서 File > New  > Android Project 생성 

 

  - 생성 된 Activity.java 파일을 선택 후 Refactor > Rename (F2, Alt+Shite+R) CustomUnityPlayerActivity 로 변경 

 

 

 

2. Unity3D 에서 제공하는 classes.jar 프로젝트에 추가

  - 프로젝트 Properties 에서 Java Build Path 탭 선택 후 Add External JARs... 클릭, classes.jar 파일(Path : 유니티설치폴더\Editor\Data\PlaybackEngines\androidplayer\bin)을 선택. 

 

 

 

3. CustomUnityPlayerActivity.java 파일 설정.

 - UnityPlayerActivity.java 소스 파일(Path : 유니티설치폴더\Editor\Data\PlaybackEngines\androidplayer\src\com\unity3d\player) 의 내용을 CustomUnityPlayerActivity.java 에 그대로 복사 (onKeyDown, onKeyUp 등 Activity 메서드가 실행 될 때 UnityPlayer 객체에도 전달 되도록 코드 되 있다.)

 - package명, Activity명 설정, import com.unity3d.player.UnityPlayer 추가. 

 

 

 

4. CustomUnityPlayerActivity.java 파일 선택 후 JAR File 로 Export. 

 

 

 

/** 이제 Unity tool 에서 작업 */

 

5. Unity에서 새 프로젝트 생성 후 Eclipse 에서 Export 된 JAR 파일 복사 (Path : Assets/Plugins/Android)

  - New Unity Project 생성 후 Build Setting 에서 Android platform 으로 switch 후 패키지명 설정 (eclipse 와 동일하게) 

 

  - 4. 에서 Export 된 AndroidPlugin.jar 파일을 Assets/Plugins/Android 에 복사  

 

6. AndroidManifest.xml 생성 후 프로젝트 내 복사

  - 빌드 후 생성 되는 Temp 폴더 내 StagingArea 폴더에서 AndroidManifest.xml 추출하여 (Path : 유니티프로젝트 폴더\Temp\StagingArea) 다음과 같이 수정 

 

  - Assets/Plugins/Android 에 복사 

 

위와 같은 작업을 해 준 뒤에는 Eclipse 에서 Activity 내용이 변경 될 때마다 java 파일을 Export 하여, Unity Project 내에서 jar 파일만 새로 Export 된 파일로 변경 해 주면 됩니다.

 

 

 

* 요약 *

[ Eclipse 내에서 작업 ]

  1. 새 프로젝트 생성 후 Activity 파일명 변경

  2. Unity3D 에서 제공하는 classes.jar 프로젝트에 추가

  3. CustomUnityPlayerActivity.java 파일 설정.

  4. CustomUnityPlayerActivity.java 파일 선택 후 JAR File 로 Export.

[ Unity3D 내에서 작업 ]

  5. Unity에서 새 프로젝트 생성 후 Eclipse 에서 Export 된 JAR 파일 복사 (Path : Assets/Plugins/Android)

  6. AndroidManifest.xml 생성 후 프로젝트 내 복사

Posted by Min-gu, Kim
Unity Engine/TStore2012.05.30 11:28

참고) TStore - ARM V3.2 (2012.05.22)

 

1. Eclipse 새 프로젝트 생성 후 CustomUnityPlayerActivity 사용하도록 작업.

 

2. ARM Library (jar) 파일 및 libARMPlugin.so 파일 설치

- Android SDK r17 이상 ADT를 사용하는 경우

  1) Eclipse 프로젝트에 "libs" 폴더를 생성하여 ARMPlugin.jar 파일 복사

  2) "libs" 폴더 하위에 "armeabi" 폴더를 생성하여 libARMPlugin.so 파일 복사

  3) "libs" 폴더 하위에 "armeabi-v7a" 폴더를 생성하여 libARMPlugin.so 파일 복사

 

- Android SDK r16 이하 ADT를 사용하는 경우 

  1) Eclipse 프로젝트에 "lib" 폴더를 생성하여 ARMPlugin.jar 파일 복사

  2) Eclipse 프로젝트에 "libs" 폴더를 생성

  2) "libs" 폴더 하위에 "armeabi" 폴더를 생성하여 libARMPlugin.so 파일 복사

  3) "libs" 폴더 하위에 "armeabi-v7a" 폴더를 생성하여 libARMPlugin.so 파일 복사

 

3. Java Build Path 설정 후 ARM 연동 코드 작성 

  1) Project 속성의 Java Build Path에서 Add JARs.. 로 ARMPlugin.jar 파일을 추가.

  2) 연동 코드는 TStore - ARM V3.2 (2012.05.22) 참고

    - ArmListener 델리게이트 구현.

    - ArmManager 객체 생성 후. 객체.ARM_Plugin_ExecuteARM(String ApplicationID) 호출

    - onArmResult 메서드 내에서 ARM 결과 처리 (SERVICE_CONNECT, SERVICE_FAIL, SERVICE_NOT_EXIST)

      SERVICE_CONNECT : ARM 인증 성공

      SERVICE_FAIL , SERVICE_NOT_EXIST : ARM 인증 실패 (실패시 finish 메서드 호출을 통해 Application 강제 종료)

 

4. CustomUnityPlayerActivity 내보내기 후 Unity3D 프로젝트에 적용

  - 내보내기(Export) 

    1) 코드가 작성 된 Java 파일 선택 후 우클릭 Export

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    2) export 될 jar 파일명(path포함) 입력 후 finish

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  - Unity3D 프로젝트에서 Asset 설정. Project 에 다음과 같이 파일들을 배치.

    반드시 패스 일치. (폴더명 일치) Plugins/Android, Plugins/Android/libs

 

요약)

1. Eclipse 새 프로젝트 생성 후 CustomUnityPlayerActivity 사용하도록 작업.

2. ARM Library (jar) 파일 및 libARMPlugin.so 파일 설치

3. Java Build Path 설정 후 ARM 연동 코드 작성

4. CustomUnityPlayerActivity 내보내기 후 Unity3D 프로젝트에 적용

 

'Unity Engine > TStore' 카테고리의 다른 글

Application DRM (ARM) 플러그인 만들기  (0) 2012.05.30
Posted by Min-gu, Kim

티스토리 툴바