유니티 안드로이드 프로젝트를 이클립스에서 실행하기.

Unity3D 2013. 2. 1. 17:36
반응형

안드로이드와 유니티 통신.

안드로이드 프로젝트를 이클립스에서 실행하기.


국내에도 이미 많은 분들이 유니티를사용하고 이 내용들을 쉽게 접할수 있게 되었습니다.


안드로이드 프로젝트를 생성합니다.



유니티 프로젝트를 생성하고 빌드합니다.

빌드시 Development Build와 Script Debugging옵션을 선택 합니다.



빌드된 경로는 유니티 프로젝트 폴더의 /Temp/StagingArea안에 저장됩니다.

안드로이드 패키지 익스플로러에 새 프로젝트를 추가 해줍니다.




다음과 같이 경로를 선택 해줍니다. /Temp/StagingArea




[2013-02-01 16:27:36 - UnityPlayerProxyActivity] Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead. Please use Android Tools > Fix Project Properties.

다음과 같은 에러가 방생한다면 


Package Explorer 에서 project 를 선택하고  마우스 우측버튼 클릭

[Android Tools]- [Fix Project Properties] 메뉴를 클릭 해줍니다.



AndroidManifest.xml에 에러가 다음과 같이 발생한다면 



android:configChanges="keyboard|keyboardHidden|orientation" 과 같이 수정 후 저장합니다.



[출처] Eclipse - Problems Fix |작성자


유니티가 설치되면서 다음 경로에 안드로이드 개발을 위한 classes.jar파일을 함께 생성합니다.

/Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/bin/classes.jar 


classes.jar파일을 다음과 같이 본 안드로이드 프로젝트에 드래그앤드롭으로 추가후 최상위로 올려줍니다.





UnityPlayerProxyActivity를 라이브러리에 추가 합니다.




UnityPlayerProxyActivity프로젝트의 assets폴더의 bin파일을 다음과 같이 본 프로젝트의 assets폴더로 복사 합니다.








비로써 유니티에와 안드로이드 네이티브통신준비가 완료된것입니다.


유니티에서 안드로이드의 메서드를 호출하고 반환값을 다시 유티로 전송하는 간단한 예제를 만들어 봅니다.


유니티는 텍스트필드로부터 안드로이드네이티브 코드상의 메서드명을 입력 받아 전송 버튼을 누르게 되면 안드로이드 네이트브 코드의 해당 메서드가 호출되며 메서드내부의 프로세스를 거쳐 반환값을 유니티에 전달 합니다.


using UnityEngine;

using System.Collections;

using System.IO;


public class Test : MonoBehaviour {

private string unity2Android = "unity2Android";

private string android2Unity = "android2Unity";

private NativeManager _nativeManager;

private string _receivedMessage;


void Start () {

this._nativeManager = NativeManager.Instance;

this._nativeManager.ReceiveCallBack = OnReceiveMessage;

}

void OnGUI() 

{

unity2Android = GUI.TextField(new Rect(10, 10, 200, 20), unity2Android, 25);


if( GUI.Button(new Rect(210, 10, 100, 20), "Send Message") )

{

this._nativeManager.SendMessage(unity2Android);

}

GUI.Label(new Rect(10, 50, 100, 20), "Send Message");

android2Unity = GUI.TextField(new Rect(10, 300, 200, 20), android2Unity, 25);


if( GUI.Button(new Rect(210, 300, 100, 100), "Send Message") )

{

this._nativeManager.ReceiveMessage(android2Unity);

}

GUI.Label(new Rect(10, 350, 100, 20), this._receivedMessage);

}


private void OnReceiveMessage(string msg){

this._receivedMessage = msg;

}

}



NativeManager.cs


public Action<string> ReceiveCallBack;


public void ReceiveMessage(string methodName, object[] args = null)

{

if (Application.platform == RuntimePlatform.Android)

{

this.ReceiveCallBack( activity.Call<string>(methodName, ""));

}

}




안드로이드 네이티브의 메서드는 랜덤값을 생성해 반환해줍니다.


package com.test.test;


import android.os.Bundle;

import com.unity3d.player.UnityPlayerActivity;



public class MainActivity extends UnityPlayerActivity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

public String getRandNum(String str){

double rand  = Math.random();

return Double.toString(rand);

}

}



다음과 같이 안드로이드 네이티브에서 로그를 찍어 반환값을 확인합니다.






기기에서도 안드로이드 네이티브코드로부터 반환된값이 잘 들어왔나 확인 합니다.


이로써 유니티와 안드로이드의 기본적인 통신을 포스팅 했습니다.


도움이 되셨으면 하네요.





반응형
Trackbacks 0 : Comments 0

Write a comment