昨日記事にて、Javascriptを特殊フォルダ(Standard Assets, Pluginsフォルダ)に配置して、C#から呼び出すことが出来る、ということを翻訳したものの、実際に試してみたことがなかったのでコンパイルが通るかどうかだけの簡単な実験を行った。
Unity初心者が学ぶC#スクリプトとJavascriptの相互参照
http://gamesonytablet.blogspot.jp/2012/12/unitycjavascript.html
検証にあたってはCharacter Controllerをインポートしてみて、これに含まれるCharacterMotor.jsを①Javascriptのフォルダ配置、②C#、Javascriptで呼び出すか、によってコンパイルが通るか確認する、という簡単な方法をとってみた。
正直にいって十分な検証とはいえないが、昨日の記事どおり「特殊フォルダに配置すればコンパイル順序は保証される」は確認できた。
しかし、そもそも論で「出来るかぎりJavascriptかC#のどちらかで統一すべき」という答えが明らかにベストで、その点で言えばC#使いにとってCharacter Controllerのような標準アセットの中に大量のJavascriptが混じっているのは面倒の始まりで、出来るかぎりC#版を探すべきといえる。
(実際、CharacterMotorもC#版に変更した凄い方がいたようだ)
また、逆にJavascriptとC#を混ぜるべき状況というのは記事にあったとおり、アセットストアなどで提供されていたパッケージが使用している言語がC#で自分はJavascript使いであった場合や、その逆のパターンなどにどうしても参照をする方法を残したい場合など、極めて限定的とおもう。
以下、お粗末ながら検証した内容を整理した:
Unity初心者が学ぶC#スクリプトとJavascriptの相互参照
http://gamesonytablet.blogspot.jp/2012/12/unitycjavascript.html
検証にあたってはCharacter Controllerをインポートしてみて、これに含まれるCharacterMotor.jsを①Javascriptのフォルダ配置、②C#、Javascriptで呼び出すか、によってコンパイルが通るか確認する、という簡単な方法をとってみた。
正直にいって十分な検証とはいえないが、昨日の記事どおり「特殊フォルダに配置すればコンパイル順序は保証される」は確認できた。
しかし、そもそも論で「出来るかぎりJavascriptかC#のどちらかで統一すべき」という答えが明らかにベストで、その点で言えばC#使いにとってCharacter Controllerのような標準アセットの中に大量のJavascriptが混じっているのは面倒の始まりで、出来るかぎりC#版を探すべきといえる。
(実際、CharacterMotorもC#版に変更した凄い方がいたようだ)
また、逆にJavascriptとC#を混ぜるべき状況というのは記事にあったとおり、アセットストアなどで提供されていたパッケージが使用している言語がC#で自分はJavascript使いであった場合や、その逆のパターンなどにどうしても参照をする方法を残したい場合など、極めて限定的とおもう。
以下、お粗末ながら検証した内容を整理した:
1. コンパイル順序の検証
検証内容:Javascriptのフォルダ配置によりコンパイルが通るかどうか
環境:Unity4.0.0f7
失敗パターン
- #1 CharacterMotor.jsを特殊フォルダに配置しない
- #2 CallCharacterMotor.csで#1を呼び出す コンパイルが失敗!
成功パターン
- #1 CharacterMotor.jsを特殊フォルダに配置
- #2 CallCharacterMotor.csで#1を呼び出す コンパイル成功
2. コンパイル順序の検証(二重呼び出し)
検証内容:C#、Javascriptで呼び出しを行うかによりコンパイルが通るかどうか
環境:Unity4.0.0f7
失敗パターン
- #1 CharacterMotor.jsを特殊フォルダに配置
- #2 CallCharacterMotor.csで#1を呼び出す
- #3 CallCallCharacterMotor.csで#2を呼び出す コンパイル失敗!
成功パターン
- #1 CharacterMotor.jsを特殊フォルダに配置
- #2 CallCharacterMotor.csで#1を呼び出す
- #3 CallCallCharacterMotor.csで#2を呼び出す コンパイル成功
用意したスクリプト
CallCharacterMotor.cs - C#
using UnityEngine;using System.Collections;public class CallCharacterMotor : MonoBehaviour { private CharacterMotor motor; // CharacterMotor呼出 (C#→java) void Start () { motor = GetComponent<CallCharacterMotor>(); }}
CallCallCharacterMotor.js - Javascript
#pragma strictprivate var motor : CallCharacterMotor;// CallCharacterMotor呼出(二重呼び出し java→C#→java)function Start () { motor = GetComponent(CallCharacterMotor);}
CallCallCharacterMotor.cs - C#
using UnityEngine;using System.Collections;public class CallCallCharacterMotor : MonoBehaviour { private CallCharacterMotor motor; // CallCharacterMotor呼出(二重呼び出し java→C#→C#) void Update () { motor = GetComponent<CallCharacterMotor>(); }}
うーん、今回はわれながら微妙な検証・・・・より丁寧に掘り下げるべきだな (深く反省)
UnityはC#かJavascriptのどちらかに固めて学習を進めていこうぜ!
0 件のコメント:
コメントを投稿