유니티는 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 파일로 빌드
맥에서 유니티 플러그인을 직접 만들어 사용해보자.
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 파일 생성
유니티 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));
}
}
플러그인 사용 결과
쉐이더(Shader) 와 랜더링 파이프라인(Rendering Pipeline) (2) | 2024.01.18 |
---|---|
[유니티 꿀팁] 유니티가 에디터랑 연결이 안 될때 해결방법 (0) | 2021.10.23 |
Unity FPS 표시 (0) | 2021.10.08 |
유니티 - Post Processing (0) | 2020.11.13 |
유니티 - Particle System (0) | 2020.11.12 |