本格的にリファクタリングを試みる(`・ω・´)
凄くベタな書き方をしてきたのでリファクタリングをすることにした。
という風に書くと意識高いというか余裕があるように見えるが、実際は今のままだとカードセットの変更が非常に面倒くさいことになると気づいたからだった(ノ∀`)
今内部で処理しているトランプのカードセットと今後追加したいカードセットとでは構造が異なるので、まずはカード絡みの処理をインターフェイスや抽象クラスにしておくかと頑張った(`・ω・´)
初めにいびつな形でカード用のプレハブに貼り付けていたCardManagerを分離し、カードのparentになるCanvasに共通の処理のみを持つCardManagerを貼り付けて、各カードにはACardInfoを継承したクラスを貼り付け、そのクラスにACardDataというカード情報の実体を持たせた。各カードへカード情報を設定する為のACardSetを継承するクラスも作ったら一応、目的通りの挙動になった。まだ完成はしていないけれども(ノ∀`) 大枠の部分は出来た。
参考:
インターフェイスのプロパティ (C# プログラミング ガイド)
C#のインターフェイスってフィールドを持てないんだね(´・ω・`)
Javaは持てた気がするんだけども。仕方がないので抽象クラスにしたけども。
Why can't C# interfaces contain fields?
eclipseに比べるとやっぱりなんだかVisual Studioは使いにくいねぇ(´・ω・`)
Visual C# のコード スニペット
試してはいないけれども、自分でコードスニペットを作ればいいのだろうか。
チュートリアル: コード スニペットを作成する
インターフェイスじゃなくて抽象クラスで受けてる(´・ω・`)
GetComponentを使うときはインターフェースを使おう
スクリプトをファイル名指定で動的に追加する
こんな感じらしい。つーかこれってスクリプトに限らず、あらゆるコンポーネントの動的追加方法か。取り敢えずstart()とかは動かない模様(´・ω・`)
targetGameObject.AddComponent(Type.GetType(scriptFileName));
参考:
Unityスクリプト実装メモ
EventTriggerの動的追加
Unity 動的にEventTriggerへ引数を持った関数を設定する方法の回答の通りにしてみたけど、何か追加されていないように思える(´・ω・`)
色々悩んで、ぐぐり直した結果、
注意点として、この方法で追加したeventはインスペクタに表示されません。
自分用Unityメモ:EventTriggerにスクリプトからEventを追加する
ということだった…_| ̄|○ ドウイウコトダネ…
Textの追加
本当は先に神経衰弱の追加要素を先に作ろうと思っていたが、国旗のデータセットを作ってしまったので、後で追加しようと思っていた文字表示を先にやっつけた。まだ細かいところを直していないのでアレだが、何はともあれ簡単にGameObject上に文字を表示出来るのが判って良かった(・∀・)
uGUIのパーツを一発生成
【Unity】ScriptからuGUIのTextにアクセスして内容を変更する
あとはPlayerPrefsリセットボタンを追加したり、タイトル画面にカード・タイプ選択用のドロップダウンを追加した。
参考にしたコードに
//dropdown.RefreshShownValue();//更新を確認(画像を設定したとき)
と有ったのに、移植する際にコメントを削ってしまったが為にハマることに(ヽ'ω`)
別段画像を設定したわけではないのだけれども、RefreshShownValue()を入れないとIndexが0の場合に表示が真っ白になってしまった(´・ω・`)
内部的には問題はないようであったが表示がされないよう(´;ω;`)と悩んだ挙げ句、スクリプトリファレンスを眺めて、Dropdown.RefreshShownValueかヽ(`Д´)ノ と追加して解決してドヤ顔だったが、このエントリを書く際に参考にしたコードに既に注記されていたことに気づき、へこむ(´・ω・`)
参考:
Unityで、保存データ全消しのデバッグ用ボタンを配置する ← なんかWordpressのエラーが表示されてる。
【Unity】【C#】uGUI ドロップダウンの要素をコードで設定と取得、外観のカスタマイズなど