Page 1 of 1

AnimatorController Class について

Posted: 2017/04/24 05:51
by Kpaper
いつもお世話になっています。
僕のプロジェクトにインポートするとすぐ次のようにエラーが発生しました。
すでに私のプロジェクトでNameSpaceが指定されていないAnimatorControllerクラスが存在するからです。
Assets/ Arbor/ Behaviours/ Editor/ Transition/ AnimatorStateTransitionInspector.cs(28,80):error CS0039:Can not convert type`UnityEngine.RuntimeAnimatorController「to` AnimatorController「via a built-in conversion

おそらくAnimatorControllerクラスを使用している箇所の両方で発生します。
明示が必要らしく、以下のように、コードの変更をして使用しています。

#AnimatorStateTransitionInspector.cs
#Before
AnimatorController animatorController = animator.runtimeAnimatorController as AnimatorController;
#After
UnityEditor.Animations.AnimatorController animatorController = animator.runtimeAnimatorController as UnityEditor.Animations.AnimatorController;

ご参考お願い致します。

Re: AnimatorController Class について

Posted: 2017/04/24 08:13
by caitsithware
報告ありがとうございます。

Unityが定義しているクラスと同名クラスをプロジェクト内で使用しているとのことですが
その同名クラスを別のnamespaceへ移すことは可能でしょうか?

グローバルなnamespaceのクラスはご指摘通りusingを使用している場合、別namespace内にある同名クラスよりも優先されてしまうため
もし対応するとなるとusingを使用せずに開発する必要があり、コード量の増加によって可読性が下がってしまい開発コストも増えてしまいそうです。

ご不便おかけしますがご確認よろしくお願いいたします。

Re: AnimatorController Class について

Posted: 2017/04/25 01:45
by Kpaper
ご返答ありがとうございます。
確かにUnityEngine ではなくUnityEditorの Namespace で使ってるclass名ですね。
おっしゃってくださった通りに、僕のプロジェクトはNameSpaceを付けて解決しました。

僕の立場でも、プロジェクトの管理のために、Namespaceを使う努力をする方ですが、
プロトタイプやサンプルプロジェクトの場合は、
グローバルネームスペースを使用している場合が多いようで、(習慣の問題ですが...)
発見したことを共有してみました。
今回の場合も、サンプルモデルとして使うためにAsset Storeから購入したモデルのスクリプトと衝突した場合ですね。
(これがGlobalでした。)

ありがとうございます。

Re: AnimatorController Class について

Posted: 2017/04/25 03:24
by caitsithware
ご確認ありがとうございます。

確かにプロトタイプやアセットのサンプルコードなどではグローバルにしてしまうケースも多そうですね。

他の対応策として、Pluginsフォルダに置くことで別のAssembly(Assembly-CSharp-firstpass.dll)に変わるので
もしまた他アセットと衝突するようでしたらArborフォルダをPluginsフォルダ下に移動させてみてください。

こちらも今後のアップデートで対処しておきます。