【3Dゲームエンジン】Unity質問スレッド21at GAMEDEV【3Dゲームエンジン】Unity質問スレッド21 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト814:名前は開発中のものです。 15/12/27 02:18:25.85 V7RdG6Gy.net >>791 例えばだが RaycastHit hit; if (Physics.Raycast(transform.position,transform.foward, out hit,100f)){ BaseClass bs=hit.transform.GetComponent<BaseClass>(); if(bs!=null)bs.MethodA(); } とかやるってこと。 対象に貼り付けておくスクリプトはBaseClassから派生して自分にあった MethodA()をオーバーライドしておく。 100もcase文を書くのがまずいかどうかは正直わからんといえばわからん。 ただ100番目のケースに至る場合caseの条件を100回確かめることになるのは確かだ。 それ自体が頻繁に呼び出されることもなく100番目のケースが呼ばれることはめったにない、 ほとんどは10番目くらいまでで終わるというならそれほど悪くはないかもしれない。 ソースがまとめて見れるしそれぞれの処理がそれぞれのスクリプトにばらけてしまうのはいやだ、 というのもわからいではないしね。 他にもやり方は考えられてこれまた例えばだが case文に入れていた処理を関数化し配列化したDelegateにそれぞれ格納しておいて RayCastでヒットさせる対象の方には自分のタイプ番号をintで返すメソッドをもつスクリプトを張っておき RaycastHit hit; if (Physics.Raycast(transform.position,transform.foward, out hit,100f)){ ReturnNumClass rn=hit.transform.GetComponent<ReturnNumClass>(); if(rn!=null)this.delegateArray[rn.ReturnMyType()](); } とかもありえる。まぁ色々やり方はあるってことだ 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch