個人iOSDeveloper,Unityユーザーです。
作ったもの、試したことなど。

デリゲートがちょっとわかるようになった時の話 (C# Unity

デリゲート(委譲)って何だろう、

と書き方を調べて、真似て書けるようになっても結局
「どう便利なの?どういう場面で使うの?」となってしまう。

 

そもそも「委譲って何だろう?」という疑問は、
「やったー、自分のプロジェクトのここに使ったら便利そう!」と思えることができたら、
ちょっとくらいコードの書き方が変わってたって、覚えることができる気がする。 

こんな物語を考えた(間違ってたらお手柔らかに教えてね

茶色ウサギドラマークラスは演奏して歌を歌うことができる。
歌の歌詞は番号を受け取って、その番号に当てはまる歌詞を探して歌う。
持っているのは1 オウイエ〜 2 フゥー 3  ラブユー♪ といった具合である。

 

白猫クラスは、オウイエ〜と歌って欲しい。
しかし番号で示さなければいけないので「えーと、2番を歌って」と命令する。
しかしいざ実行すると、オウイエ〜は2番ではなく1番の歌詞だったので
「1を歌って」と命令し直した。
番号が求めてる結果かどうかは、歌ってからじゃないと分からないからね・・。

f:id:osushioisi:20210317215058p:plain

すると茶色ウサギドラマークラスの演奏システムを使いたい者が増えた。
カエルは「ゲロゲロと、雨雨フレフレ♪の2つを歌って欲しい・・」と思っている。
しかしゲロゲロと歌う結果は無かったので、
茶色ドラマークラスの歌詞を書き足して増やすことにした。
その歌詞は、5番目と6番目に書き足された。

 

すると後日・・・カブトムシが現れて「ビーズのようにきらめく樹液が・・うんたらかんたら・・」という歌詞を要求した。
茶色ウサギドラマークラスは歌詞を追加し続けた。その時歌詞は120を超えていた。

 

後日リスが現れて「お〜私のドングリ♪ 英語モードではOh my baby girl♪ね。」とさらりとローカライズ を要求した。
この要求を満たすためには、120を超えたすでにある歌詞にも”日本語版なら・英語版なら”という条件を、追加しなければならなかった。

 

後日ネズミがやってきていつものように145番に歌詞を追加していった。
(実はネズミは歌詞の番号を間違えて持っていて154番だと思っている・・・・・)

 

後日犬がやってきて160番の歌詞を、日本語版とイタリア語版(英語版なし)を要求し、チョウチョがやってきてドイツ語版とロシア語版(日本語、英語、イタリア語版なし)を要求したが、ドラマーは要求に応えられなかった。

 

さらに後日キツネが現れて「ランダムに数字を決めて、偶数なら”右へ”、奇数なら"左へ"、さらに10ぴったりだったらドラマーが客席にジャンプしてくれ」
と言い出した。
ランダムに数字を決めるのはいいけど、それは猫やカブトムシやリスやカエルの歌詞と矛盾したりしないかな?
歌詞ももはや歌詞なのか分からなくなってきたし、
ジャンプ??歌詞とかそういう・・なんかもう、違う。

 

茶色ウサギドラマークラスは
白猫に呼ばれた時は演奏を初めてランダムに数字を振って日本語版か英語版か聞いて言われた歌詞を歌って右でも左でもなくてジャンプしない。

カエルに呼ばれた時は演奏を初めてランダムに数字を振って日本語版か英語版か聞いて言われた歌詞を歌って右でも左でもなくてジャンプしない。

キツネに呼ばれた時は演奏を初めてランダムに数字を振って日本語版か英語版か聞いて言われた歌詞を歌うか歌わないか分岐して右か左かを決めてジャンプをするかもしれない。

ネズミが存在しない154番の歌詞を呼び出した時、茶色ドラマークラスはnullを出して泣いてクラッシュした。

 

じゃあ、カブトムシはどうだったっけ。
もう森の誰も詳細が分からない。

 

f:id:osushioisi:20210317215056p:plain

森の仲間たちはもっとシンプルにしたいと思った。

 

茶色ドラマークラスは、演奏を初めて「何かする」をするだけにした。

「何かする」内容はみんなに決めてもらうことにした。

 

白猫が使いたい歌詞は、白猫に持っていてもらうことにした。
番号じゃなくて、使いたい歌詞そのものを自分で持っていてもらう。
これで白猫が使いたい歌詞なのに「歌詞の何番だったかな・・」と不安になることもない。
カエルが使いたい歌詞はカエルのカバンの中に。

キツネが使いたいランダムの数字も、キツネがサイコロを振ることにした。ジャンプの仕方も、右と左が何なのかも、茶色ドラマークラスはさっぱり知らないけど、知らなくていい。

 

茶色ドラマークラスを使いたい動物たちがこの後何十何百と増えても、何語で歌おうが
ジャンプしようが、茶色ドラマークラスは何にも知らない。

 

茶色ドラマークラスは演奏を初めて「何かする」だけになった。
「何かする」関数はそれぞれの動物たちの中にある。

 

実際どういうとこで使ってて便利に思ったか

文章をセーブしたりロードしたりするクラスがあって
その文章を使いたい別クラスがあった。
デリゲートを使ったらセーブキーとか移動させないで
「ロードする」の一文で全部を使えたので便利だった。

コードの書き方

実際にC#を書く際はこちらがわかりやすかったです。

kan-kikuchi.hatenablog.com