SlideShare a Scribd company logo
1 of 9
*index 1. Unity에서의 Android란?!
2. 전체 Flow
3. 실습
Unity에서의 Android란?!
Unity의 기본 게임 시스템에 포함되지 않는 기능을 구현하기 위해 반드시 필요.
예를 들면
- 사용자 자신의 핸드폰번호 혹은 핸드폰 주소록에 접근하여
친구리스트를 생성.
- 갤럭시 시리즈에서 S펜을 구현.
- 구글 게임 서비스를 게임에 적용 등등…
핵심 게임기능을 제외한 많은 기능은 유니티에서 구현할 수 없고 네이티브코드,
즉 Android에서 구현하고 유니티와 연동해야 함.
전체 Flow
이클립스에서 원하는 기능을 구현한 JAR 파일을 만듬.
자바개발툴킷(JDK), Android SDK, 이클립스등 기본적인 안드로이드 개발을 위한
환경 설정을 해야함.
만든 JAR파일과 그에 맞는 AndroidManifest.xml 파일을 유니티에 넣긔.
JAR파일과 통신할 유니티 스크립트를 만들고, 디바이스 데이터를 받아 후처
리를 진행.
실습
1. 이클립스에서 프로젝트를 먼저 만들거나, 유니티에서 먼저 작업을 하거나 상관은 없음.
2. 이클립스에서 먼저 프로젝트를 만드는 것으로 하고 작업 진행.
3. 이클립스에서 기본적인 안드로이드 어플리케이션 프로젝트를 생성. (생성시 패키지명을 주의하여 생성)
4. 생성된 프로젝트내에서 메인액티비티.JAVA에 onCreate 진입함수를 제외한 나머지 함수를 삭제.
5. MainActivity.java가 유니티로 정보를 보내줄 수 있게하기 위해 유니티 클래스를 상속받아야함.
이를 위해
C:Program FilesUnityEditorDataPlaybackEnginesandroiddevelopmentplayerbin
경로에 위치한 classes.jar 파일을 libs 폴더에 임포트 시킨 후 상속 처리.
실습
6. 테스트를 위해 현재 내 핸드폰 번호를 유니티로 가져와서 뿌리는 것으로 구현하고 싶으므로, 아래와 같이 MainActivity.java 코드를 작성.
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.TelephonyManager;
public class MainActivity extends UnityPlayerActivity {
public static String PhoneNumber = "";
TelephonyManager tm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
PhoneNumber = tm.getLine1Number();
}
public void GetPhoneNumber(){
UnityPlayer.UnitySendMessage("DataObject", "CheckPhoneNumber", PhoneNumber);
}
}
※ UnitySendMessage
첫번째 인자는 해당 메소드가 실행되면 유니티로 값을 전달할때 유니티의 하이라키 상에서의 오브젝트 이름으로 찾아 해당 오브젝트로 값을 전달한다는 의미고,
두번째 인자는 해당 오브젝트에 추가된 스크립트들중 전달하고자 하는 데이터를 처리할 함수를 지정하는 것이고,
세번째 인자는 당연히 전달할 데이터를 의미함.
실습
7. 작업 후 src 이하 폴더에 있는 java 파일만 jar 파일로 익스포트.
8. 이클립스 작업은 모두 끝났고 유니티에서 새프로젝트를 만듬.
9. 하이라키에 DataObject라는 빈 객체를 생성후 스크립트를 추가후 아래의 내용을 코딩.
using UnityEngine;
using System.Collections;
public class DataObjectScript : MonoBehaviour {
private AndroidJavaObject currentActivity;
private string _PhoneNumber;
void Awake()
{
// 현재 활성화된 액티비티를 얻어와 미리 준비한 변수에 저장.
AndroidJavaClass AJC = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
currentActivity = AJC.GetStatic<AndroidJavaObject>("currentActivity");
if (currentActivity != null)
{
// MainActivity에 있는 GetPhoneNumber 메소드를 데이터를 전달받기 위해 호출함.
currentActivity.Call("GetPhoneNumber");
}
}
void OnGUI()
{
Rect _rect = new Rect((Screen.width/2) - 100, (Screen.height/2) - 100, 200, 200);
GUI.Box(_rect, _PhoneNumber);
}
// MainActivity에 있는 GetPhoneNumber 메소드가 실행되어 데이터를 받을 함수.
void CheckPhoneNumber(string arg)
{
_PhoneNumber = arg;
}
}
실습
10. 유니티 빌드셋팅으로 가서 아래의 설정값으로 변경.
- 안드로이드 스위치 플랫폼
- 플레이어 셋팅
- Other settings 에 있는 Bundle Identifier 부분에 이클립스에서 만든 패키지명 그대로 설정해
준다.
- 그리고 폰으로 테스트 해볼건데 테스트라 하더라도 세로모드면 보기도 이쁘지 않음.
Resulution and Presentation 에서 Default Orientation을 Landscape Left 로 변경한다. (이부
분은 주로 게임만들때 많이 변경되는 부분인데 좀이따 AndroidManifest.xml에서 맞춰줘야 앱이
정상동작함).
11. 구글 프로젝트 설정 후 빌드하여 AndroidManifest.xml 파일을 생성.
12. 생성된 xml 파일과 아까 작업해둔 jar 파일을 유니티 프로젝트에 Plugins/Android 폴더를 만
든 후 해당 폴더에 위치시킴.
실습
13. xml 파일을 아래와 같이 비슷하게 설정.
<application android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:debuggable="false">
<activity android:name="com.unity3d.player.UnityPlayerProxyActivity"
android:launchMode="singleTask"
android:label="@string/app_name"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:screenOrientation="landscape">
</activity>
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:launchMode="singleTask"
android:label="@string/app_name"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:screenOrientation="landscape">
</activity>
<activity android:name="com.unity3d.player.UnityPlayerNativeActivity"
android:launchMode="singleTask"
android:label="@string/app_name"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:screenOrientation="landscape">
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
<activity
android:name="kr.co.bandus.MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
- 유니티 버젼에 따라 xml 내용은 좀 다를 수 있지만 핵심은 기존에 intent filter를 아까 만든 jar 파일에 있는 MainActivity.java로 설정시켜야 함. 또한 회전 여부 에 따
라 앱이 종료가 될 수 있으므로 이부분을 잘 캐치하여 같이 설정해야함.
실습
14. 이후 빌드하여 핸드폰 번호가 출력되는지 여부를 확인.

More Related Content

Viewers also liked

마이크로소프트 Azure 에서 안드로이드 Push 구현과 Data 처리
마이크로소프트 Azure 에서 안드로이드  Push 구현과 Data 처리마이크로소프트 Azure 에서 안드로이드  Push 구현과 Data 처리
마이크로소프트 Azure 에서 안드로이드 Push 구현과 Data 처리Young D
 
Microsoft Azure를 통한 Push와 DB 이용방법
Microsoft Azure를 통한 Push와 DB 이용방법Microsoft Azure를 통한 Push와 DB 이용방법
Microsoft Azure를 통한 Push와 DB 이용방법Young D
 
고객여정지도
고객여정지도고객여정지도
고객여정지도mihwamihwa
 
Jenkins with Unity3d & Android
Jenkins with Unity3d & Android Jenkins with Unity3d & Android
Jenkins with Unity3d & Android 종국 임
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기DongHwan Yu
 
service design pannel
service design pannelservice design pannel
service design pannelKim Soyoung
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신현욱 김
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014NDOORS
 
유니티 C# 기초 튜토리얼
유니티 C# 기초 튜토리얼유니티 C# 기초 튜토리얼
유니티 C# 기초 튜토리얼Jemin Lee
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
유니티로 2D게임개발
유니티로 2D게임개발유니티로 2D게임개발
유니티로 2D게임개발GukHwan Ji
 
푸시개발 정리 - Push Notification Summary
푸시개발 정리 - Push Notification Summary푸시개발 정리 - Push Notification Summary
푸시개발 정리 - Push Notification SummaryBrave Cheon
 
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례Amazon Web Services Korea
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streamsmattpodwysocki
 
[160404] 유니티 apk 용량 줄이기
[160404] 유니티 apk 용량 줄이기[160404] 유니티 apk 용량 줄이기
[160404] 유니티 apk 용량 줄이기MinGeun Park
 
[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍NAVER D2
 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift선협 이
 
Functional Reactive Programming with RxJS
Functional Reactive Programming with RxJSFunctional Reactive Programming with RxJS
Functional Reactive Programming with RxJSstefanmayer13
 
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015NAVER / MusicPlatform
 

Viewers also liked (20)

마이크로소프트 Azure 에서 안드로이드 Push 구현과 Data 처리
마이크로소프트 Azure 에서 안드로이드  Push 구현과 Data 처리마이크로소프트 Azure 에서 안드로이드  Push 구현과 Data 처리
마이크로소프트 Azure 에서 안드로이드 Push 구현과 Data 처리
 
Microsoft Azure를 통한 Push와 DB 이용방법
Microsoft Azure를 통한 Push와 DB 이용방법Microsoft Azure를 통한 Push와 DB 이용방법
Microsoft Azure를 통한 Push와 DB 이용방법
 
고객여정지도
고객여정지도고객여정지도
고객여정지도
 
Jenkins with Unity3d & Android
Jenkins with Unity3d & Android Jenkins with Unity3d & Android
Jenkins with Unity3d & Android
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기
 
service design pannel
service design pannelservice design pannel
service design pannel
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신
 
서비스 판넬
서비스 판넬서비스 판넬
서비스 판넬
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
 
유니티 C# 기초 튜토리얼
유니티 C# 기초 튜토리얼유니티 C# 기초 튜토리얼
유니티 C# 기초 튜토리얼
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
유니티로 2D게임개발
유니티로 2D게임개발유니티로 2D게임개발
유니티로 2D게임개발
 
푸시개발 정리 - Push Notification Summary
푸시개발 정리 - Push Notification Summary푸시개발 정리 - Push Notification Summary
푸시개발 정리 - Push Notification Summary
 
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streams
 
[160404] 유니티 apk 용량 줄이기
[160404] 유니티 apk 용량 줄이기[160404] 유니티 apk 용량 줄이기
[160404] 유니티 apk 용량 줄이기
 
[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍
 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift
 
Functional Reactive Programming with RxJS
Functional Reactive Programming with RxJSFunctional Reactive Programming with RxJS
Functional Reactive Programming with RxJS
 
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
 

Similar to 유니티와 안드로이드의 연동

안드로이드스터디 1
안드로이드스터디 1안드로이드스터디 1
안드로이드스터디 1jangpd007
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Sangon Lee
 
예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스Dexter Jung
 
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js [W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js 양재동 코드랩
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Sangon Lee
 
Sencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowSencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowByoung Do Ahn
 
Unity3D Developer Network Study Chapter.2
Unity3D Developer Network Study Chapter.2Unity3D Developer Network Study Chapter.2
Unity3D Developer Network Study Chapter.2Cody Yun
 
191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기KWANGIL KIM
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modulesJay Kim
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Dong Chan Shin
 
NHNNEXT 고등학생 창의체험 프로그래밍 실습
NHNNEXT 고등학생 창의체험 프로그래밍 실습NHNNEXT 고등학생 창의체험 프로그래밍 실습
NHNNEXT 고등학생 창의체험 프로그래밍 실습YoungSu Son
 
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁창규 김
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사Rjs Ryu
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유iFunFactory Inc.
 
Modularization with Dynamic Feature Module
Modularization with Dynamic Feature ModuleModularization with Dynamic Feature Module
Modularization with Dynamic Feature ModuleNAVER Engineering
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018Gaia3D,Inc.
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 releaseJaehyeuk Oh
 
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호 track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호 양 한빛
 

Similar to 유니티와 안드로이드의 연동 (20)

안드로이드스터디 1
안드로이드스터디 1안드로이드스터디 1
안드로이드스터디 1
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조
 
예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스
 
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js [W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
 
Sencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowSencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-window
 
Unity3D Developer Network Study Chapter.2
Unity3D Developer Network Study Chapter.2Unity3D Developer Network Study Chapter.2
Unity3D Developer Network Study Chapter.2
 
191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modules
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
NHNNEXT 고등학생 창의체험 프로그래밍 실습
NHNNEXT 고등학생 창의체험 프로그래밍 실습NHNNEXT 고등학생 창의체험 프로그래밍 실습
NHNNEXT 고등학생 창의체험 프로그래밍 실습
 
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
 
Modularization with Dynamic Feature Module
Modularization with Dynamic Feature ModuleModularization with Dynamic Feature Module
Modularization with Dynamic Feature Module
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호 track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호
 

유니티와 안드로이드의 연동

  • 1. *index 1. Unity에서의 Android란?! 2. 전체 Flow 3. 실습
  • 2. Unity에서의 Android란?! Unity의 기본 게임 시스템에 포함되지 않는 기능을 구현하기 위해 반드시 필요. 예를 들면 - 사용자 자신의 핸드폰번호 혹은 핸드폰 주소록에 접근하여 친구리스트를 생성. - 갤럭시 시리즈에서 S펜을 구현. - 구글 게임 서비스를 게임에 적용 등등… 핵심 게임기능을 제외한 많은 기능은 유니티에서 구현할 수 없고 네이티브코드, 즉 Android에서 구현하고 유니티와 연동해야 함.
  • 3. 전체 Flow 이클립스에서 원하는 기능을 구현한 JAR 파일을 만듬. 자바개발툴킷(JDK), Android SDK, 이클립스등 기본적인 안드로이드 개발을 위한 환경 설정을 해야함. 만든 JAR파일과 그에 맞는 AndroidManifest.xml 파일을 유니티에 넣긔. JAR파일과 통신할 유니티 스크립트를 만들고, 디바이스 데이터를 받아 후처 리를 진행.
  • 4. 실습 1. 이클립스에서 프로젝트를 먼저 만들거나, 유니티에서 먼저 작업을 하거나 상관은 없음. 2. 이클립스에서 먼저 프로젝트를 만드는 것으로 하고 작업 진행. 3. 이클립스에서 기본적인 안드로이드 어플리케이션 프로젝트를 생성. (생성시 패키지명을 주의하여 생성) 4. 생성된 프로젝트내에서 메인액티비티.JAVA에 onCreate 진입함수를 제외한 나머지 함수를 삭제. 5. MainActivity.java가 유니티로 정보를 보내줄 수 있게하기 위해 유니티 클래스를 상속받아야함. 이를 위해 C:Program FilesUnityEditorDataPlaybackEnginesandroiddevelopmentplayerbin 경로에 위치한 classes.jar 파일을 libs 폴더에 임포트 시킨 후 상속 처리.
  • 5. 실습 6. 테스트를 위해 현재 내 핸드폰 번호를 유니티로 가져와서 뿌리는 것으로 구현하고 싶으므로, 아래와 같이 MainActivity.java 코드를 작성. import com.unity3d.player.UnityPlayer; import com.unity3d.player.UnityPlayerActivity; import android.content.Context; import android.os.Bundle; import android.telephony.TelephonyManager; public class MainActivity extends UnityPlayerActivity { public static String PhoneNumber = ""; TelephonyManager tm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); PhoneNumber = tm.getLine1Number(); } public void GetPhoneNumber(){ UnityPlayer.UnitySendMessage("DataObject", "CheckPhoneNumber", PhoneNumber); } } ※ UnitySendMessage 첫번째 인자는 해당 메소드가 실행되면 유니티로 값을 전달할때 유니티의 하이라키 상에서의 오브젝트 이름으로 찾아 해당 오브젝트로 값을 전달한다는 의미고, 두번째 인자는 해당 오브젝트에 추가된 스크립트들중 전달하고자 하는 데이터를 처리할 함수를 지정하는 것이고, 세번째 인자는 당연히 전달할 데이터를 의미함.
  • 6. 실습 7. 작업 후 src 이하 폴더에 있는 java 파일만 jar 파일로 익스포트. 8. 이클립스 작업은 모두 끝났고 유니티에서 새프로젝트를 만듬. 9. 하이라키에 DataObject라는 빈 객체를 생성후 스크립트를 추가후 아래의 내용을 코딩. using UnityEngine; using System.Collections; public class DataObjectScript : MonoBehaviour { private AndroidJavaObject currentActivity; private string _PhoneNumber; void Awake() { // 현재 활성화된 액티비티를 얻어와 미리 준비한 변수에 저장. AndroidJavaClass AJC = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); currentActivity = AJC.GetStatic<AndroidJavaObject>("currentActivity"); if (currentActivity != null) { // MainActivity에 있는 GetPhoneNumber 메소드를 데이터를 전달받기 위해 호출함. currentActivity.Call("GetPhoneNumber"); } } void OnGUI() { Rect _rect = new Rect((Screen.width/2) - 100, (Screen.height/2) - 100, 200, 200); GUI.Box(_rect, _PhoneNumber); } // MainActivity에 있는 GetPhoneNumber 메소드가 실행되어 데이터를 받을 함수. void CheckPhoneNumber(string arg) { _PhoneNumber = arg; } }
  • 7. 실습 10. 유니티 빌드셋팅으로 가서 아래의 설정값으로 변경. - 안드로이드 스위치 플랫폼 - 플레이어 셋팅 - Other settings 에 있는 Bundle Identifier 부분에 이클립스에서 만든 패키지명 그대로 설정해 준다. - 그리고 폰으로 테스트 해볼건데 테스트라 하더라도 세로모드면 보기도 이쁘지 않음. Resulution and Presentation 에서 Default Orientation을 Landscape Left 로 변경한다. (이부 분은 주로 게임만들때 많이 변경되는 부분인데 좀이따 AndroidManifest.xml에서 맞춰줘야 앱이 정상동작함). 11. 구글 프로젝트 설정 후 빌드하여 AndroidManifest.xml 파일을 생성. 12. 생성된 xml 파일과 아까 작업해둔 jar 파일을 유니티 프로젝트에 Plugins/Android 폴더를 만 든 후 해당 폴더에 위치시킴.
  • 8. 실습 13. xml 파일을 아래와 같이 비슷하게 설정. <application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false"> <activity android:name="com.unity3d.player.UnityPlayerProxyActivity" android:launchMode="singleTask" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="landscape"> </activity> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:launchMode="singleTask" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="landscape"> </activity> <activity android:name="com.unity3d.player.UnityPlayerNativeActivity" android:launchMode="singleTask" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="landscape"> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" /> </activity> <activity android:name="kr.co.bandus.MainActivity" android:label="@string/app_name" android:screenOrientation="landscape"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> - 유니티 버젼에 따라 xml 내용은 좀 다를 수 있지만 핵심은 기존에 intent filter를 아까 만든 jar 파일에 있는 MainActivity.java로 설정시켜야 함. 또한 회전 여부 에 따 라 앱이 종료가 될 수 있으므로 이부분을 잘 캐치하여 같이 설정해야함.
  • 9. 실습 14. 이후 빌드하여 핸드폰 번호가 출력되는지 여부를 확인.