Unity3d 와 OpenFrameworks 연동하기

OpenFrameworks (이하 Of)를 기본 적으로만 빌드하면 아래와 같은 빌드 파일들을 볼 수 있다.




기본 EXE 파일 이외에 Assimp32.dll ~ Zlib.dll 등 9여개의 dll 이 생겨났다. 

그리고 Unity3D 와 연동을 위하여 ExportDLLTest.exe 를 dll 로 빌드 하여야 한다.





1. Of 를 DLL 로 빌드하기


프로젝트 설정에서 아래와 같이 [구성 형식 : 동적 라이브러리(.dll)] 로 설정하고 빌드 하면 실행 파일이 dll 파일로 빌드 된것을 볼 수 있다.





2.간단한 Extern 코딩 하기


Main.cpp 의 메인 함수 밑에 아래와 같이 간단한 덧셈 코딩을 해보자.


#include "ofMain.h"
#include "ofApp.h"

//========================================================================
int main( ){
	ofSetupOpenGL(1024,768,OF_WINDOW);			// <-------- setup the GL context

	// this kicks off the running of my app
	// can be OF_WINDOW or OF_FULLSCREEN
	// pass in width and height too:
	ofRunApp(new ofApp());

}

// 간단한 덧셈 코딩

#define EXTERN __declspec(dllexport)
extern "C"
{
	EXTERN int Add(int a , int b)
	{
		return a + b;
	}
}







3. Unity3D 에 플러그인 적용


Unity3D 의 플러그인 폴더를 만들고 종속된 DLL 들을 모두 넣어 보자.





그리고 아래와 같이 코딩 하고 빌드 해 보자.



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

public class Main : MonoBehaviour {

    //플러그인 임포트
    [DllImport("ExportDLLTest_debug")]
    private static extern int Add(int a, int b);


    //플러그인 간단 실행
    int a = 10;
    int b = 10;
    void OnGUI()
    {
        try
        {
            int r = Add(a, b);
            GUI.Label(new Rect(0, 0, Screen.width, Screen.height), r.ToString());
        }
        catch
        {
            //에러가 난다면 화면에 "Err!" 로 표시한다.
            GUI.Label(new Rect(0, 0, Screen.width, Screen.height), "Err!");
        }
    }
	

	void Update () {
        if (Input.GetKey(KeyCode.A))
        {
            a++;
        }
	}
}


하지만! 아래와 같은 에러가 뜬다.



일단 에러는 모듈 파일을 찾을 수 없다는것이고 , 분명히 코드는 잘못된것이 없다. 

그래서 예상을 한다면 실행하는 DLL 즉 [ExportDLLTest_debug.dll] 과 같이 빌드된 9개의 DLL( Assimp32.dll ~ Zlib.dll 등 9여개) 이 같은 폴더에 존재 하여야 한다. 그러나 Unity3D 가 임의로 정한 Plugin 이라는 폴더는 이 위치를 다소 혼란스럽게 한다. 





4. 해결책


실행DLL 과 같이 빌드된 9개의 DLL( Assimp32.dll ~ Zlib.dll 등 9여개) 를 Unity3D 프로젝트 폴더에 넣어 보자.





그러고 나서 Unity3D 를 실행 하면 정상적으로 실행 되는것을 확인 할 수 있다.


Unirt3D 를 EXE 빌드할 경우에는 역시 exe 와 같은 위치에 필요한 DLL 들을 넣어 주면 된다.






Of 는 x86 으로만 빌드 된다(현재 8.4.X 버전) 따라서 유니티 에디터도 32비트 버전이어야 디버깅을 할 수 있고, 빌드 할때도 환경을 x86 으로 맞추어 주어야 한다.



Yamecoder 야매코더_
C++(oF) 2015.05.01 20:49
Powerd by Tistory, designed by criuce
rss