コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】「IronPython」で Python から Unity API を呼び出す方法

はじめに

「IronPython」を Unity プロジェクトに導入することで
Python スクリプトから Unity API を呼び出すことができるようになります

導入方法

  1. 下記のページを開きます
    https://ironpython.codeplex.com/releases/view/169382
  2. 「IronPython 2.7.5 Binaries」を選択します
  3. ダウンロードした「IronPython-2.7.5.zip」を展開します
  4. 「Platforms/Net35」フォルダ内の下記のファイルを
    Unity プロジェクトの「Plugins」フォルダに移動します
    • IronPython.dll
    • IronPython.Modules.dll
    • Microsoft.Dynamic.dll
    • Microsoft.Scripting.dll
    • Microsoft.Scripting.Core.dll
    • Microsoft.Scripting.Metadata.dll

f:id:baba_s:20171020130302p:plain

使い方

まず、下記のファイルを「example.txt」という名前で Unity プロジェクトに追加します

import UnityEngine
from UnityEngine import *

Debug.Log( 'Hello World!' )
Debug.Log( 'timeScale: %f' % Time.timeScale )

go = GameObject()
go.name = 'pokemon'
rigidbody = go.AddComponent( Rigidbody )
rigidbody.isKinematic = True

次に、下記のファイルを「Example.cs」という名前で Unity プロジェクトに追加します

using IronPython.Hosting;
using UnityEngine;

public class Example : MonoBehaviour
{
    public TextAsset m_textAsset;

    private void Awake()
    {
        var text    = m_textAsset.text;
        var engine  = Python.CreateEngine();

        engine.Runtime.LoadAssembly( typeof( GameObject ).Assembly ); 

        var scope   = engine.CreateScope();
        var source  = engine.CreateScriptSourceFromString( text );
        
        source.Execute( scope );
    }
}

そして、適当なゲームオブジェクトを作成して「Example.cs」をアタッチし、
「Text Asset」に「example.txt」を設定します

f:id:baba_s:20171020130953p:plain

これで、ゲームを実行すると、Python スクリプトで記載された処理が呼び出されて
ログが出力されたりゲームオブジェクトが作成されたり、
ゲームオブジェクトに Rigidbody がアタッチされたりすることが確認できます

f:id:baba_s:20171020131245p:plain

f:id:baba_s:20171020131254p:plain

参考サイト様

関連記事