しばらく前に、Unityの使用を開始しましたが、依然として密結合スクリプトの問題に苦労しています。この問題を回避するためにコードをどのように構成できますか?
例えば:
健康と死のシステムを別々のスクリプトに入れたいです。また、プレイヤーキャラクターの移動方法を変更できるさまざまな交換可能なウォーキングスクリプトが必要です(マリオのような物理ベースの慣性コントロールと、スーパーミートボーイのようなタイトでぴくぴくしたコントロール)。ヘルススクリプトは、プレイヤーのヘルスが0に達したときにDie()メソッドをトリガーできるように、デススクリプトへの参照を保持する必要があります。デススクリプトは、使用中のウォーキングスクリプトへの参照を保持して、ゾンビにうんざりしている)。
私は考え、通常のように、インターフェースを作成しIWalking
、IHealth
そしてIDeath
私は自分のコードの残りの部分を壊すことなく、気まぐれで、これらの要素を変更することができるように、。たとえば、プレーヤーオブジェクトの個別のスクリプトでセットアップしますPlayerScriptDependancyInjector
。おそらく、そのスクリプトにはpublic IWalking
、IHealth
およびIDeath
属性があり、適切なスクリプトをドラッグアンドドロップすることで、レベルデザイナがインスペクタから依存関係を設定できます。
これにより、ゲームオブジェクトにビヘイビアを簡単に追加でき、ハードコードされた依存関係を心配する必要がなくなります。
Unityの問題
問題はユニティで、私はインスペクタでインタフェースを公開することができないということである、と私は私自身の検査官を書いた場合、参照が連載を取得文句を言わない、そしてそれは、不必要な多くの作業です。だからこそ、密結合されたコードを書くしかありません。私のDeath
スクリプトは、スクリプトへの参照を公開していInertiveWalking
ます。しかし、プレイヤーキャラクターにきめ細かく制御させたい場合、TightWalking
スクリプトをドラッグアンドドロップすることはできませんDeath
。スクリプトを変更する必要があります。ひどい。対処できますが、このようなことをするたびに魂が泣きます。
Unityのインターフェイスの代替として望ましいものは何ですか?この問題を修正するにはどうすればよいですか?私はこれを見つけましたが、すでに知っていることを教えてくれ、Unityでそれを行う方法を教えてくれません!これも、どのように行うべきかを説明するものであり、方法ではなく、スクリプト間の密結合の問題に対処するものではありません。
全体として、ゲームデザインのバックグラウンドを持ってUnityに来た人のために書かれたものだと感じています。Unityには通常の開発者向けのリソースはほとんどありません。Unityでコードを構造化する標準的な方法はありますか、それとも独自の方法を見つけ出す必要がありますか?
The problem is that in Unity I can't expose interfaces in the inspector
私が最初に考えたのは「なぜですか?」だったので、「インスペクタでインターフェイスを公開する」という意味が理解できないと思います。