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

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

新規登録して質問してみよう
ただいま回答率
85.47%
C#

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

Unity

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

7094閲覧

unityでpythonで書いたコードを使いたい。

meJ15

総合スコア55

C#

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

Unity

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/11/07 14:41

前提・実現したいこと

pythonで書かれたプログラムをunityで読み込みたい。

センサからの情報をpythonで機械学習して出力するプログラムをpythonで書きました。

その出力情報をunity側で受け取り、その値に応じてunity内部にある物体を動かしたいと考えています。

(unityでpythonで書かれたプログラムを使おうとするのではなく
pythonでの出力結果をそのままunityで受け取れれば早いのですが、そちらの方法でも何かアドバイスがありましたらよろしくお願いします。)

そこでこのサイトを参考にまずはpythonで書かれたコードをunityで読み込もうと思いました。
unityでpythonを使う。

上記のサイトを参考にこのようにしたのですが、plguinsの.dllが一つ足りません(3年前の記事だからか?)
イメージ説明

発生している問題・エラーメッセージ

するとこのようなエラーが出ました。
調べるとunityEngineというモジュールが見つからないということなのですが、、、?

ImportException: No module named UnityEngine Microsoft.Scripting.Actions.Calls.MethodCandidate+Caller.Call (System.Object[] args, System.Boolean& shouldOptimize) (at <9661a627b9df4cc6a8147ea97a8e7cf4>:0) IronPython.Runtime.Types.BuiltinFunction+BuiltinFunctionCaller`5[TFuncType,T0,T1,T2,T3].Call4 (System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext context, TFuncType func, T0 arg0, T1 arg1, T2 arg2, T3 arg3) (at <9f680c4831e54be9b4f3102a0faa460a>:0) IronPython.Runtime.Importer.Import (IronPython.Runtime.CodeContext context, System.String fullName, IronPython.Runtime.PythonTuple from, System.Int32 level) (at <9f680c4831e54be9b4f3102a0faa460a>:0) IronPython.Runtime.Operations.PythonOps.ImportTop (IronPython.Runtime.CodeContext context, System.String fullName, System.Int32 level) (at <9f680c4831e54be9b4f3102a0faa460a>:0) Microsoft.Scripting.Interpreter.FuncCallInstruction`4[T0,T1,T2,TRet].Run (Microsoft.Scripting.Interpreter.InterpretedFrame frame) (at <9661a627b9df4cc6a8147ea97a8e7cf4>:0) Microsoft.Scripting.Interpreter.Interpreter.Run (Microsoft.Scripting.Interpreter.InterpretedFrame frame) (at <9661a627b9df4cc6a8147ea97a8e7cf4>:0) Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet] (T0 arg0, T1 arg1) (at <9661a627b9df4cc6a8147ea97a8e7cf4>:0) IronPython.Compiler.PythonScriptCode.RunWorker (IronPython.Runtime.CodeContext ctx) (at <9f680c4831e54be9b4f3102a0faa460a>:0) IronPython.Compiler.PythonScriptCode.Run (Microsoft.Scripting.Runtime.Scope scope) (at <9f680c4831e54be9b4f3102a0faa460a>:0) IronPython.Compiler.RuntimeScriptCode.InvokeTarget (Microsoft.Scripting.Runtime.Scope scope) (at <9f680c4831e54be9b4f3102a0faa460a>:0) IronPython.Compiler.RuntimeScriptCode.Run (Microsoft.Scripting.Runtime.Scope scope) (at <9f680c4831e54be9b4f3102a0faa460a>:0) Microsoft.Scripting.SourceUnit.Execute (Microsoft.Scripting.Runtime.Scope scope, Microsoft.Scripting.ErrorSink errorSink) (at <790e4a6ad97d4a53a26736959b8e2995>:0) Microsoft.Scripting.SourceUnit.Execute (Microsoft.Scripting.Runtime.Scope scope) (at <790e4a6ad97d4a53a26736959b8e2995>:0) Microsoft.Scripting.Hosting.ScriptSource.Execute (Microsoft.Scripting.Hosting.ScriptScope scope) (at <790e4a6ad97d4a53a26736959b8e2995>:0) (wrapper remoting-invoke-with-check) Microsoft.Scripting.Hosting.ScriptSource.Execute(Microsoft.Scripting.Hosting.ScriptScope) PythonLoader.Start () (at Assets/Script/PythonLoader.cs:21)

該当のソースコード

C#

1using UnityEngine; 2using System.Collections; 3using System.IO; 4 5public class PythonLoader : MonoBehaviour 6{ 7 void Start() 8 { 9 string script; 10 var filename = Application.dataPath + "/../../test.py"; 11 12 using (StreamReader sr = new StreamReader(filename, System.Text.Encoding.UTF8)) 13 { 14 script = sr.ReadToEnd(); 15 } 16 17 var scriptEngine = IronPython.Hosting.Python.CreateEngine(); 18 var scriptScope = scriptEngine.CreateScope(); 19 var scriptSource = scriptEngine.CreateScriptSourceFromString(script); 20 21 scriptSource.Execute(scriptScope); 22 } 23} 24______________________________ 25test.py 26 27import clr 28clr.AddReferenceByPartialName('UnityEngine') 29import UnityEngine 30 31import sys 32sys.path.append(UnityEngine.Application.dataPath + '/../../Lib') 33 34import datetime 35 36 37def print_message(): 38 UnityEngine.Debug.Log('Test message from Python!') 39 UnityEngine.Debug.Log(datetime.datetime.today()) 40 41 42print_message() 43 44

試したこと

pythonloaderによって
test.pyはしっかり読み込めていますが、test.pyのなかにあるunityEngineが読み込めていないようです。

unityでpythonで書かれたプログラムを使おうとするのではなく
pythonでの出力結果をそのままunityで受け取れれば早いのですが、そちらの方法でも何かアドバイスがありましたらよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

unityでpythonで書かれたプログラムを使おうとするのではなく
pythonでの出力結果をそのままunityで受け取れれば早いのですが、そちらの方法でも何かアドバイスがありましたらよろしくお願いします。

質問者さんの要件を満たしているかどうかは分かりませんが、ファイルの読み書きでデータを受け渡しするのが楽だと思いますが、どうでしょうか。

投稿2018/11/08 04:16

編集2018/11/08 04:18
fiveHundred

総合スコア9853

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

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

meJ15

2018/11/08 12:18

その方法が楽かと思いチャレンジしていますが、思うように動作しなかったのでまたお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問