상세 컨텐츠

본문 제목

Mac OS X 에서 Unity Plugins 빌드하기

Tech/Unity 유니티

by 2021. 3. 18. 10:11

본문

Unity Plugins

유니티는 C# 스크립트를 통해 기능을 작성하는데, 다른 형태로 외부에서 작성된 코드를 프로젝트에 불러오고 싶을경우 유니티 플러그인 형태로 사용할 수 있다. 유니티 플러그인에는 Managed Plugins와 Native Plugins 의 두 유형이 있다.

 

Managed Plugins

- .NET 코드로 작성됨. (C#도 .NET 부류이기 때문에) Managed Plugins는 유니티 내부에서 관리하기가 쉬움(알아듣기가 쉬움)

 

Native Plugins

- 플랫폼 별 네이티브 코드 라이브러리. 주로 C, C++, Objective-C로 작성됨.

 

 

데스크톱 플랫폼 별 플러그인 빌드

1. Mac OS X

bundle 형태로 배포

 

2. Windows

DLL 파일로 빌드

 

3. Linux 플러그인 빌드

.so 파일로 빌드

 

 

Mac OS X 에서 Unity Plugins 빌드하기

맥에서 유니티 플러그인을 직접 만들어 사용해보자.

 

 

X code를 열어서 New > Project > macOS > Bundle 선택

 

프로젝트 생성

 

OSXPlugins 폴더 선택 후 New File > C++ 파일을 생성한다.

(이름은 프로젝트 이름과 똑같이 해주었습니다.)

 

OSXPlugins.hpp

unity에서 접근할 수 있도록 extern "C" 블럭 안에 우리가 사용할 함수들을 선언해준다.

 

#ifndef OSXPlugins_hpp
#define OSXPlugins_hpp

#include <stdio.h>

extern "C" {
    const char* PrintHello();
    int PrintANumber();
    int AddTwoIntegers(int, int);
}

#endif /* OSXPlugins_hpp */

 

OSXPlugins.cpp

각각의 함수들을 작성해준다.

 

#include "OSXPlugins.hpp"

const char* PrintHello(){
    return "Hello";
}

int PrintANumber(){
    return 5;
}

int AddTwoIntegers(int a, int b){
    return a + b;
}

 

 

그 후 빌드하여 bundle 파일 생성

 

OSX 플러그인 유니티에서 사용하기

 

유니티 Assets폴더 밑에 Plugins 폴더를 만들어 bundle 파일을 옮겨넣습니다.

 

 

PluginPrinter.cs

[DllImport("플러그인이름")] 을 통해 함수를 불러온 뒤 이를 밑에 코드에서 사용할 수 있습니다.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;

public class PluginPrinter : MonoBehaviour
{
    [DllImport("OSXPlugins")]
    private static extern IntPtr PrintHello();

    [DllImport("OSXPlugins")]
    private static extern int PrintANumber();

    [DllImport("OSXPlugins")]
    private static extern int AddTwoIntegers(int a, int b);

    private void Start()
    {
        Debug.Log(Marshal.PtrToStringAnsi(PrintHello()));
        Debug.Log(PrintANumber());
        Debug.Log(AddTwoIntegers(1, 2));
    }
}

 

 

플러그인 사용 결과

 

결과창

관련글 더보기