🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

4034閲覧

Unityでのネイティブプラグインの読み込みに失敗してしまう

daidaibasi

総合スコア4

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/11/01 05:04

編集2019/11/01 07:31

Unityでネイティブプラグインの読み込みに失敗してしまう

当方プログラミング初心者です。

以下のサイトを参考にし、
UnityにおいてObjective-Cで作成したプラグインを読み込もうとしました。
http://tatsudoya.blog.fc2.com/blog-entry-237.html)

しかし、各コードに間違いは見当たらず、ユニバーサルバイナリとしてビルドし、Assets/Plugins下に入れているにも関わらず、エディターでの実行に以下のエラーメッセージが発生してしまいました。

DllNotFoundException: UnityPluginSample Plugin.Start () (at Assets/Plugin.cs:18)

こちらが実際のソースコードです。

objectivec

1 2// UnityPluginSample.m 3// UnityPluginSample 4 5#import <Foundation/Foundation.h> 6 7void SampleFunction() { 8 printf("test."); 9} 10 11const char* SampleFunction2() { 12 const char *str = "test2."; 13 char* retStr = (char*)malloc(strlen(str) + 1); 14 strcpy(retStr, str); 15 return retStr; 16} 17

header

1 2 3// UnityPluginSample.h 4// UnityPluginSample 5 6 7#ifndef UnityPluginSample_h 8#define UnityPluginSample_h 9 10 11#endif /* UnityPluginSample_h */ 12 13extern "C" { 14 void SampleFunction(); 15} 16 17extern "C" { 18 const char* SampleFunction2(); 19} 20

これらは問題なくビルドできたのでPluginsフォルダに入れました。
そして、Unityで以下のスクリプトをアタッチしました。
Visual Studioで確認したところコードの誤りは見受けられませんでしたが、実行時に上記のエラーが発生してしまいました。

c#

1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using System.Runtime.InteropServices; 6 7public class Plugin : MonoBehaviour 8{ 9 [DllImport("UnityPluginSample")] 10 private static extern void SampleFunction(); 11 12 [DllImport("UnityPluginSample")] 13 private static extern string SampleFunction2(); 14 15 // Use this for initialization 16 void Start() 17 { 18 Debug.Log("[Start] Start()"); 19 SampleFunction(); 20 Debug.Log("GetString : " + SampleFunction2()); 21 Debug.Log("[End ] Start()"); 22 } 23 24} 25

冒頭で述べたことに加えて
・Unityのインポート設定からEditorを外す
・再起動
なども試してみましたが、結果は変わりませんでした。

解決方法がありましたら、ご助言お願いします。

環境

実装プラットフォーム:MacOSX(Standealone)

Xcode9.3
Unity2019.1.8f1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こちらに書かれている通り、iOSの場合はdll名の代わりに"__Internal"を指定することになります。

投稿2019/11/01 06:52

fiveHundred

総合スコア10152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fiveHundred

2019/11/01 07:50 編集

とりあえず、ファイルを選択したときに出てくるインスペクター上での設定が意図したものになっているか確認してみてください。 それも正しいのであれば、すみませんが私はわかりません。 あと、質問とは関係ないですが、UnityPluginSample.hの「#endif」は最後の行に書かないと意味がありません。 これは二重定義の防止のために書かれているもので、「#ifndef」~「#endif」の中に書かないとこれが機能しません。 (元の記事から間違っているので、間違えるのは仕方ないかもしれませんが)
daidaibasi

2019/11/03 02:58

Editor/Standalone/MacOSXx64にチェックが入っていることを確認し、ヘッダファイルのコードも直してみましたが結果は変わりませんでした....。ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問