質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

C#

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

Q&A

解決済

2回答

3137閲覧

[Unity] Dllの読み込みがうまくいかない

Futahei

総合スコア80

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

C#

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

0グッド

0クリップ

投稿2017/10/18 14:34

編集2017/10/19 03:08

###前提・実現したいこと
現在制作してるプロジェクトにおいて、c#からJavascriptを実行したいと考え、Javascript.NETを使うことにしました。
Dllをダウンロードし、Assets/../Plugins以下にDllを配置して、いざスクリプトを書こうとした際にusingで指定できずUnity側でもエラーがでてしまいました。

###発生している問題・エラーメッセージ
UnityにインポートしたはずのDllが参照できていません。また、当方MonoDevelopでコーディングしていますが、Edit ReferencesからNoesis.Javascript(Javascript.NETのdll)を参照することで、エディタではエラーが出ませんが、Unity側では変わらずエラーがでます。

以下エラーメッセージ

error CS0246: The type or namespace name `Noesis` could not be found. Are you missing an assembly reference?

###該当のソースコード

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Noesis.Javascript; 5 6public class test : MonoBehaviour { 7 void Start () { 8 using(JavascriptContext context = new JavascriptContext()) { 9 context.SetParameter ("Debug", new Debug ()); 10 string script = @"Debug.Log(""Test message"");"; 11 context.Run (script); 12 } 13 } 14} 15

###試したこと

  1. Unityの再起動
  2. Monodevelop側でのDll参照追加

###環境
Unity 2017.2.0b11(.NET 4.6)
Javascript.NET v0.7

###補足
今回実現したいことはC#からJavascriptを実行したり、二間でやり取りすることです。Javascript.NETにこだわっているわけではないので、他にこんなやり方があるよという方がいらっしゃいましたら是非教えてください。

追記: Javascript.NETはUnityではネイティブDllとされていますが、Dll内部を読むとマネージドDllでないと使えない仕組みがなされてるように見受けられます。これも参考にして頂ければ幸いです。(2017/10/19)

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

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

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

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

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

guest

回答2

0

ベストアンサー

少々古いですが、Javascript .NETのDISCUSSIONSの投稿にMonoで試して失敗したという報告がありました。

joshperry
Nov 5, 2010 at 10:05 AM
Has anyone tried this on Mono?

joshperry
Nov 5, 2010 at 10:19 AM
That's a negative. Mono only supports C++ that is pure CLI, which will never happen with v8. Since v8 makes use of templates I don't think a pure P/Invoke solution would be simple. I guess the only (simple?) option would be to host the Mono runtime in an app that has v8 also embedded.

http://www.mono-project.com/CPlusPlus

Javascript .NETが純粋なマネージドDLLでないためにうまくいかないのかもしれません。ソースコードは公開されているようですので、独自に完全マネージドDLLに改造するか(ソースを十分見たわけではないので改造が現実的かは判断しかねますが...)、別のJavascriptエンジンを探すのがいいのではないでしょうか。

検索してみたところ、Jurassicなるものはネイティブコードを含まないと謳っているようですので、もしかするとそのままUnityでも使えるかもしれません(すみませんが試しておりません...)。ECMAScript 6対応は未完了のようですので、その辺の機能を使いたいとなると別の方法を検討する必要があるかと思います。

[追記]
アセットストアにも出ていました。どうやら動く見込みはありそうです。

投稿2017/10/19 09:25

編集2017/10/19 09:34
Bongo

総合スコア10807

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

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

Futahei

2017/10/22 05:38

回答ありがとうございます。 確認作業を行っており返信遅れました。見事C#側からJsを動かすことが出来ました。まだ、やりたいことの本質に到れるほど勉強が出来ていないですが大変参考になるアドバイスでした。ありがとうございました。
guest

0

(以下、憶測が含まれているので間違っているかもしれません)

どういう意図で、どのような感じで、JavaScriptを実行したいかが質問文に書かれていませんが、

C#

1 string script = @"Debug.Log(""Test message"");";

というコードがあることから、Unityのプロジェクト上にC#とJavaScriptが混在しており、Unity上のC#からUnity上のJavaScriptを呼び出したい、ということだと思いました。
もし、そうであれば、Javascript.NETを使うと、UnityのエンジンではなくJavascript.NETのエンジンで実行されてしまうので、うまくいかないと思われます。
例えば、このコードの場合、Debug.Log()が無いというエラーになってしまうと思います。
よって、Javascript.NETを使うのは正しくないと思います。

(以上までが、憶測が含まれている部分です)

実際に動かしたわけではないですが、以下のURLが参考になると思います。
http://blog.be-style.jpn.com/article/48359816.html

投稿2017/10/19 03:40

編集2017/10/19 03:51
fiveHundred

総合スコア9796

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

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

Futahei

2017/10/19 05:04

回答ありがとうございます。今回行いたいことは、あらかじめこちらで用意したC#のクラスを外部のJsから利用することです。 なのでJavascriptのスクリプトは後から動的に読み込みたいのです。 ちなみにご指摘いただいたDebug.Logの部分に関しては、Javascript.NET公式のドキュメントを参考に書いてみただけなので問題ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問