Unityで天体シミュレーションを作ってみた 01

2023-08-26 08:51:44

(この記事は、2022/07/08に公開しようとして忘れていたものです)

まず作ったものから。

CelestialSimulator

001 - 20220704
をクリックすれば、UnityのWebGLが開いて、動き出す。

天体名をクリックすると、その天体の上方(黄道上)から見下ろしたカメラに遷移。
Freeをクリックすると、自由視点カメラに遷移。
初期はFree。

Freeは、右クリックとマウス移動で、回転させることができ、
左クリックとマウス移動で、位置を変えることができる。
マウスホイールでズーム。
天体上方カメラは移動はできないが、ズームは可能。

きっかけ

「チ。-地球の運動について-」を読んだから(安直w

ちょうどこの前完結したね。
面白かった。

で、この中で、1巻にラファウという主人公がいるが、
初め天動説を信じていたが、フベルトと出会うことで、疑問を持ち始める。
そして、観測を続けるうちに、天動説ではその軌跡が美しくないということに気づき、地動説に傾いていくという内容なのだが、
天動説の軌跡を描いているところで、かなり複雑な模様が出てくるのだが、
それを読んでいるとき、これは本当に地球基準で見たらこうなるのかって疑問が出てきた。

「チ。―地球の運動について―」1巻 P39 引用:「チ。―地球の運動について―」1巻 P39

調べたのだが、あまり地球基準の各惑星の軌跡っていうのが見当たらなかったので、実際に自分で作ってみようと思ったのがきっかけである。
(ただ、まだ地球と月と太陽だけで、しかも軌跡はできていないけど。)

苦労した点

天体自体をゼロから作るのはキツいので、そこは無料Assetを使った。
いくつか試したが、下記が結構惑星が揃っていたので一番もってこいだった。

Planets of the Solar System 3D | 3D 環境 | Unity Asset Store

で、太陽をまず中心(0,0,0)に配置し、
そこから適当に離して地球を置いた。
自転は、普通にUnityのtransform.Rotateを使うので良かった。
第一引数のeulerAnglesも、Vector3.up つまり地球のy軸方向上を指定すれば、
自転軸を23.34度ずらしても、ちゃんと自転してくれる。
(自転軸に関しては、初期位置の際のRotation Z軸値を指定した)

公転は、どうやってやるのかなと思って思っていたら、
そのものズバリなtransform.RotateAroundっていうのを見つけた。
これは指定したオブジェクトの周りを回ってくれるというもの。
地球の公転面をy軸 = 0 で考えていたから、第二引数のaxisもVector3.upを指定で問題なかった。

じゃあ、月も同様に作ればいいやって思って自転はできたのだけど、問題は公転だった。

RotateAroundの対象に地球を指定すれば、
地球が公転しつつ、その周りを月が回っているっていうのができるかと思ったが、
やってみると、段々と月が地球から離れていく。
やべー、これじゃいつか地球には月が存在しなくなってしまう。

最初は月の自転軸 6.688度傾いているから、そのせいかと思ったが、
RotateAroundの第二引数もその分だけずらしていたから問題ないはず。

で、結局、月が公転する際のRotateAroundでは、地球の現在の位置を第一引数にしているが、
これ、月はまだ公転していないのに、地球はすでに公転した後の場所を基準にしているんだよね。
だから、本来とは違うところを中心に月が公転しているから、少しづつ地球の中心からズレていくというわけ。

ということで、地球が動いた分、月の位置を修正してやってからRotateAroundをかけると上手くいった。




Comments

There are currently no comments on this article, be the first to add one below

Add a Comment

Note that I may remove comments for any reason, so try to be civil. If you are looking for a response to your comment, either leave your email address or check back on this page periodically.