執筆バージョン: Unreal Engine 4.27
|
今回はこのように任意の場所を中心に回転する動きをさせてみたいと思います。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/Animation_01.gif)
左右に立方体が転がっていますが、回転の向きにより回転の中心座標が変わっています。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/20211119_blog_image_rotation.drawio.png)
通常メッシュの原点を中心に回転するため、原点以外で回転の中心座標を変える場合、メッシュの原点を変更してインポートし直すか、Sceneコンポーネントを使って回転の中心を変えたりしますが、今回はBlueprint上で回転の中心座標を変更しています。
下の例のように回転させたい場合、以下の手順で計算処理を行うことで実現が可能です。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/20211119_blog_image_0.drawio.png)
- 回転する点を回転中心座標が原点と一致するように点を移動させます。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/20211119_blog_image_1.drawio.png)
- 移動した点を原点周りに回転移動させます。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/20211119_blog_image_2.drawio.png)
- 回転移動後、点を原点から元の回転中心位置へ戻します。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/20211119_blog_image_3.drawio.png)
ちょっと3Dプログラミングを触ったことがある場合、行列(Matrix)を使えば、計算できることがわかる方もいるかと思います。
BlueprintでもMatrixは使えるのですが、Transformでもこのような表現ができるので、今回はTransformで実装してみます。
実装方法
ComposeTransformsノードを利用することにより、順番を考慮しTransformを計算することができます。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/2021-11-19_220750.png)
ブループリント上ではこのように表示されます。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/2021-11-19_211724.png)
今回のアニメーションはブループリントではこのようにタイムラインを利用して実装しています。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/2021-11-19_220550.png)
おまけ
Rotatorで回転の計算順を意識したい場合
Rotatorで回転の計算順を意識したい場合はCombine Rotatorsを使用しましょう。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/202111119_blog_image_combine.drawio.png)
任意点を基点での拡大縮小
今回は回転について説明しましたが、任意点を基点に拡大縮小する場合にも使えます。
![](https://historia.co.jp/wp/wp-content/uploads/2021/11/Animation_02.gif)