[Unity] オブジェクトへのアタッチ+アタッチ先をずらす

やりたいことは、複数のターゲットに対してオブジェクトをアタッチしつつ
パラメーターでアタッチ先をずらすような挙動を作りたかったけどC#でのやりかたに苦戦したのでメモ。

出来上がったのがこんな感じ。
小さい■がターゲット用のオブジェクトで、それに対して 1~4のオブジェクトがくっつきます。

スクリプトのインスペクタはこんな感じで、アタッチ先の位置オブジェクトとアタッチするオブジェクトを配列で
入れられるようになっていて、Offsetの数値をいじると、アタッチ先がその数分ずれてアタッチするようになります。

この「ずらす」というのがPythonなら

これで済むのですが、C#でやるのに地味に苦戦しました。

結果のスクリプトが

こんな感じになりました。
C#で配列のコピーをしたい場合は Array.Copy() を使用すればOKで、引数が
コピー元、コピー元の開始index(0スタート)、コピー先、コピー先の開始index(0スタート)、コピーの長さ。
なので、1行目で
[0,1,2,3] のoffset後の(仮に2として) コピーして [2,3,0,0] 次に、offset前をコピーして[2,3,0,1] のようにずらしてコピーした配列を作って
それでアタッチ先オブジェクト入れ替えてあげる感じになりました。

offsetの数値がマイナスになるとエラーになってしまうので、[Range(min,max)]で制限をかけてます。
上限は一応配列の数にしてますが、 Copyのところは offset % array.Length にしてるので
大きめの数字にしとけばGameObjectの数が可変でも問題ないかなぁと思います。

できたけど、正直もっといいやり方がありそう…(汁

一時期よりはだいぶC#に慣れてきたのですが、それでも簡単なことだと Pythonならできるのに… で
ハマるケースが多いです。
やっぱりもっと実践積まないと…がんばろう。

 

コメントを残す

メールアドレスが公開されることはありません。

*