우선 안드로이드 프로젝트를 만든다
empty Activity 또는 No Activity로 설정한다
다음 화면이다.
여기서 주의해야 할 것은 Minimum SDK 이다.
그 이유는 유니티에서도 Minimum SDK를 설정하는데 안드로이드 Minimum과 유니티 Minimum이 일치하지 않으면 오류가 생기게 된다.
유니티 프로젝트가 성공적으로 생성되고 gradle 파일들도 성공적으로 빌드되었다면 File -> New -> New Module로 들어가 모듈을 생성 해준다. 타입은 Android Library로 선택
모듈이 생성되면 androidTest, test 파일들이 같이 있으면 중복으로 오류가 생길 수도 있으므로 지워주자.
생성된 모듈에 클래스를 생성해주자. 일단 test_String으로 생성.
아래의 이미지와 같이 문자열 반환 메소드를 만들었다. 우선 플러그인이 되는지 확인을 위해 간단한 문자열 반환 함수만 사용하겠다. 기본적으로 함수를 static을 붙여서 만든 이유는 static을 안 붙이고 유니티에서 호출하면 호출이 되질 않는다. static을 안 붙이고 사용하려고 하신다면 싱글턴 패턴을 써야한다.
이제 Build -> Make Module '모듈명' 을 클릭해주자
그다음으로, 생성한 모듈을 우클릭하여 Show in Explorer을 선택해서 폴더를 연다.
mylibrary를 클릭(본인의 모듈명)
outputs를 클릭
aar을 클릭
aar 파일이 만들어 진 것을 볼 수 있다.
이 파일을 이용해서 유니티에서 안드로이드에서 구현된 메서드를 사용할 수 있도록 할 수 있다.
이제 유니티에선
유니티 프로젝트를 생성해준 후
생성되었다면, 위 탭 창에서 File -> Build Setting 을 클릭 후
플랫폼을 Android로 설정
다음으로, Player Setting... 을 클릭해서 Other Setting에있는 Identification에서 Minimum API Level을 안드로이드 Minimum SDK 레벨과 동일하게 설정해주자
다음으로 위로 올리면 Company Name이 있다. DefaultCompany로 남겨두지 말고 변경하자
다음으로 폴더를 생성한다
Assets -> Plugins -> Android 순으로 폴더를 제작
그곳에 아까 만들어둔 aar 파일을 넣어주자
이제 Assets 폴더에다 C# 스크립트를 제작하자
코드를 보면 new AndroidJavaClass(""); 부분에 보면 빈 문자열을 넣고 있다.
안드로이드 프로젝트로 돌아가서 패키지 경로 확인
com.example.mylibrary라고 돼있는 것을 확인할 수 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
private AndroidJavaObject UnityInstance;
[SerializeField] private Text text;
// Start is called before the first frame update
void Start()
{
AndroidJavaClass ajc = new AndroidJavaClass("com.example.mylibrary.test_String");
string str = ajc.CallStatic<string>("returnString");
text.text = str;
}
}
ajc.CallStatic은 스태틱 메서드를 호출할 때 사용한다.
ajc.Call 은 일반 메소드를 호출할 때 사용한다.
Call로 호출을 원한다면 static으로 선언된 싱글턴 메서드를 호출한 후 생성된 Instance를 통해 가능하다.
아래와 같이 객체를 생성하자.
PluginManager는 빈 오브젝트다.
플로그인 매니저에 방금 만든 스크립트를 넣어주고 Text에 Text를 드래그 앤 드롭해주자
UI text 사이즈를 위와 같이 키우고 폰트 사이즈를 50 정도로 맞춘 다음 글자를 가운데 맞춤으로 설정한다
아래와 같이 나오면 성공적이다
'게임엔진 > Unity' 카테고리의 다른 글
[Unity] Serializable Dictionary - 인스펙터에 노출시킬 수 있는 딕셔너리 (0) | 2023.01.14 |
---|---|
[Unity] onClick.AddListener에서 함수의 파라미터 전달 문제 (0) | 2023.01.14 |
[Unity] 강체(RigidBody) AddForce에 대한 (0) | 2022.12.07 |
[Unity] 트랜스폼을 이용해서 AI 만들기 (0) | 2022.12.07 |
[Unity] 키보드와 마우스 입력받기 (0) | 2022.12.04 |