ゲーム作り

親子関係

お疲れ様です。 せいさくしゃです。

前回は、カメラをプレイヤーに追従させました。
そして、Unity側から変数を初期化したり、オブジェクトを渡したりしました。

さて、以前から軽く触れ続けてはいましたが、基本的な概念の中に「親子関係」というものがあります。
これは、Unityに限らず3Dプログラミング全般で重要になってくる概念です。
今回は、今までほったらかしていた「親子関係」について話をしようと思います。

ケンタ

今回は、解説だけだから進捗は特に無いんだな。

今回の解説

親子関係とは

リュウキ

親子関係ってことは、現実の親子と同じようなものだよな?
ゲームで親子ってどういうことだ?

そもそも、誰の親子関係かと言うとゲーム内のオブジェクトとオブジェクトの関係の事を指します。
現実での親子の振る舞いは色々ありますが、ここで言う親子関係はもう少し限られた意味を持ちます。

親子関係のざっくりとした特徴は、以下の2つです。

  • 親は子の見本となるので、親が動くと子は親に影響されて一緒に動きます
  • 子は親を見本として動くので、子が動くときは親の影響を受けて動きます

ここで大事になってくるのは、子は親の影響を受けるというところです。
子が親から受ける主な影響は、3Dの基本でも説明した「位置」「回転」「拡縮」の3つです。
この「位置」、「回転」、「拡縮」についてもう少し詳しく見ていきましょう。

ケンタ

親子関係は、子が親の影響を受けて動く関係の事なんだな。

親が動いた時の子の動き方

リュウキ

子は親の影響を受けるんだよな。
じゃあ、親が動くと子はどう動くんだ?

子は親の影響を受けるので、親が移動すれば子も移動します。
位置移動はそこまで難しくないですが、回転と拡縮は少し特殊な動きをします。

具体的な動き方は、以下の通りです。

  • 親の位置が移動した場合、親と一緒に子の位置も同じ分だけ移動します。
  • 親が回転した場合、親はその場で回転し、子は親を中心に回転します。
  • 親が拡縮した場合、親はその場で拡縮し、子は親が拡縮した分移動しながら拡縮します。

この様に、親が移動すると子は親を中心として親の影響を受けながら移動するのが特徴です。

ケンタ

親の位置が移動すると、子の位置も同じように移動する。
親が回転すると、子は親を中心に回転する。
親が拡縮すると、子は親の拡縮分移動しながら拡縮する。

つまり、子は親を中心として親の影響を受けながら移動するんだな。

子が動いた時の子の動き方

リュウキ

親が動くと、子は親の影響を受けて一緒に動くんだな。
じゃあ、子が自分で動いたときは親の影響は受けないのか?

親が移動したときは、子は親の影響を受けて一緒に移動しました。
では、子が自身で移動した場合はどのように動くでしょう?

子は親が移動した際に影響されましたが、厳密には子が親の影響を常に受け続けているという表現が近いと思います。
つまり、子が移動する際にも親の影響を受けながら移動する訳です。

具体的な動き方は、以下の通りです。

  • 子の位置が移動する際は、親の回転、拡縮により移動方向と移動量が変化します。
  • 子が回転する際は、親の回転により回転方向が変化します。この時、親の拡縮により子の形が歪みます
  • 子が拡縮する際は、親の回転、拡縮により拡縮方向と拡縮量が変化します。

この様に、子が移動する際は親の影響を受けて方向や移動量等が変化します。

もう少し違う考え方をすると、次のような考え方もできます。

まず、オブジェクトはそれぞれ横(x)、縦(y)、奥行き(z)の3つの軸を持っています。
親が移動すると、子も移動すると同時に子の持っている軸も一緒に移動します。
子が移動する際は、子が持っている軸を基準として移動します。

こちらの方がピンとくる方もいるかもしれません。
どちらでもいいので、自身に合った方で覚えてみてください。

因みに、本当に深く追求しようと思うと、数学の行列の概念が出てきます。
ここまで来ると、かなり難しくなってくると思うので、現時点では私のブログで取り扱うつもりはありません。
この辺りの話まで気になる方は、お手数ですがご自身で調べてみてください。

ケンタ

子の位置が移動する際は、親の影響で移動方向と移動量が変化する。
子が回転する際は、親の影響で回転方向が変化して、子の形が歪む
子が拡縮する際は、親の影響で拡縮方向と拡縮量が変化する。

つまり、子が移動する際は、親の影響で方向や移動量等が変化するんだな。

ソウバ

因みに、オブジェクト単体の中でも「位置」、「回転」、「拡縮」移動の際に影響されるものがあります。

これは、「位置」、「回転」、「拡縮」の計算の順序によるものです。
具体的には、「位置」→「回転」→「拡縮」の順番で計算されます。
言い換えると、「回転」は「位置」の影響を受け、「拡縮」は「位置」と「回転」の影響を受ける事になります。

この考え方は、先程軽く触れた数学の行列の話にも関わってきます。
だからと言って、行列を覚えろと言うつもりはありません。
しかし、厳密にいうと計算順序によって「回転」や「拡縮」が影響を受けるという事ぐらいは覚えておくと便利かもしれません。

もし、どうしても覚えきれない場合は、実際にUnityで親子関係を持ったオブジェクトを置いてみましょう。
そして、それらのオブジェクトを好きなように動かしてみましょう。
そのように動かしてみる事で、何となくでも動かし方のコツがつかめてくるかもしれません。
習うより慣れろと言うくらいですから、分からない場合は実際に動かしてみると、簡単に習得できるかもしれません。

今回のまとめ

今回は、3Dゲームにおける親子関係について解説しました。
端的にまとめると、以下の通りです。

今回のまとめ
  • 親が移動する際は、子は親の影響を受けながら親を中心として移動します。
  • 子が移動する際は、親の影響で方向や移動量等が変化します。

親子関係は、あるオブジェクトと一緒に動かしたいオブジェクトがある時に使うと便利です。
皆さんも、自身で色々試しながら親子関係をマスターして、オブジェクトの動かし方の幅を広げてみてはいかかでしょうか。

それでは、今回はここまでにしたいと思います。
お疲れ様でした。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA