🧩

Unity -- Blenderで作成した3D ObjectをScriptで複製・配置する

2023/01/03に公開

Unity 2021.3.11f1
Blender 3.0.0

大きな目標

Unityの空間で検索結果を三次元的に表示する。
Display search results in three dimensions in Unity space.

中期的な目標

検索情報をC#でUnityに送り込む
Send search information to Unity with C#

今日の目標

Blenderで作成した3D ObjectをScriptで複製・配置する

Step 1
前回Scriptから作成したのはprimitiveという基本objectだったが、上下及び南北を指示できる形のobjectがほしいので、まずBlenderで作ってみた。

問題1
Cylinderの上端に北向きの突起を付けた形を作ってみた。基本のCylinderを縦方向に3分の1程度に縮めたが、UnityにimportしてScriptで複製すると、元の縦長に戻ってしまう。
対応
何かしら設定が足らずに縦横比が固定されていないものと思うが、そこを解決するために時間を取りたくなかったので、Sphereで作り直した。

問題2
北を指示するはずの突起が、UnityにimportしてScriptで複製すると、東を向いたり、南を向いたりする。
対応

  • 作成の最初からきちんと北向きにつくらないといけない。適当に作って、回転で北向きにしてexportたのでは、北向きと認識されないようだ。
  • そもそもBlenderとUnityでは三軸の設定が異なっている。Export時に、下記の記事に従って方向調整をしなければいけない。

https://shibuya24.info/entry/blender_unity_axis

Step2
Blenderで作成、importしたobjectをScriptで認識する。以下の記事の3、既存のobjectを複製する、を参照した。

https://biotech-lab.org/articles/4241

問題
前回はobjectごとに色を変えていたが、今回、importしたobjectにRendererがない、色を付けられない、というエラーが出た。
対応
今回、色分けは特に必要ないので、いったん無視して先に進む。

Step3
突起で指示するのは北極点で、単なるZ方向を意味しない。各objectの位置から北極点方向をRotationで指定するのは煩雑なので、下記の記事に従ってLookAtという設定を採用する。とりあえず(0, 0, 50)が北極点であると仮定して、

transform.LookAt(new Vector3(0, 0, 50));

と指定したところ、それぞれのobject位置から良い感じに一点を指し示しているようなので、よしとする。

https://shibuya24.info/entry/unity-transform

まとめ

画像の下段中央がBlenderで作ったobject、ほかの五つはScriptで複製、配置したものだ。
わからないこと、うまくいかないことを置き去りにしたままだが、ともかく一歩ずつ前に進みたいと思う。

https://github.com/dongri727/1jan2023

Discussion