【Godot 4.0】スマホ３Dゲームを作るための勉強　その２７　動く障害物を作る　その２　回転ドア

　ゲームエンジンGodot4.0で3Dスマホゲームを作りたいと思いますが、その前にお勉強しています。
　2023/3/1にstable版がリリースされました。
　Godot_v4.0-stable_win64.exe.zipを使用しています。

# 目的
　動く障害物を作って配置します。
　十字型の回転ドアのようなオブジェを作ります。

# ベースプロジェクト
　下記で作成したプロジェクトをベースに機能追加をします。
　【Godot 4.0】スマホ３Dゲームを作るための勉強　その２６　動く障害物を作る
　https://qiita.com/FootInGlow/items/fa28fce8a86b18ca8736
　
　github(Godotのプロジェクトマネージャーからインポートして利用できます）
　https://github.com/footinglow/Godot4/tree/main/02_study/S26StageItemMovingWall

# 回転ドアをつくる
## 新規シーンを作成するして、ドアの1枚を追加する
　シーンメニューから新規シーンを実行して、下記のように子ノードを作成します。
　StageItemsフォルダーに保存します。
```plantuml
@startwbs
+ res://StageItems/revolving_door.tscn
++ RevolvingDoor : StaticBody3D
+++ MeshInstance3D
+++ CollisionShape3D
@endwbs
```
![スクリーンショット (187).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691050/bf75a19c-830d-d86b-36c5-e39a85c83ced.png)

子ノードをそれぞれ選択して、下記の表のように変更します。

<table>
  <caption>MeshInstance3Dのインスペクタ変更内容</caption>
  <thead>
    <tr>
      <th>項目</th>
      <th>設定値</th>
    </tr>
  </thead>
  <tr>
    <td>MeshInstance3D/Mesh</td>
    <td>新規BoxMesh</td>
  </tr>
  <tr>
    <td>MeshInstance3D/Mesh/BoxMesh/Size/x</td>
    <td>0.3</td>
  </tr>
  <tr>
    <td>MeshInstance3D/Mesh/BoxMesh/Size/z</td>
    <td>3.0</td>
  </tr>
  <tr>
    <td>Node3D/Transform/Positon/y</td>
    <td>0.5</td>
  </tr>
</table>

<table>
  <caption>CollisionShape3Dのインスペクタ変更内容</caption>
  <thead>
    <tr>
      <th>項目</th>
      <th>設定値</th>
    </tr>
  </thead>
  <tr>
    <td>CollisionShape3D/Shape</td>
    <td>新規BoxShape</td>
  </tr>
  <tr>
    <td>CollisionShape3D/Shape/BoxShape/Size/x</td>
    <td>0.3</td>
  </tr>
  <tr>
    <td>CollisionShape3D/Shape/BoxShape/Size/z</td>
    <td>3.0</td>
  </tr>
  <tr>
    <td>Node3D/Transform/Positon/y</td>
    <td>0.5</td>
  </tr>
</table>

![スクリーンショット (188).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691050/bae9f04e-8f8e-fedb-ccba-0fad30a546c9.png)

## ドアを複製して十字型に配置する
　MeshInstance3DとCollisionShape3Dをコピーして、ルートノードのRevolvingDoorに貼り付けします。
![スクリーンショット (189).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691050/7e2d3b5c-2920-3228-d2fb-ec553d66b482.png)

```plantuml
@startwbs
+ res://StageItems/revolving_door.tscn
++ RevolvingDoor : StaticBody3D
+++ MeshInstance3D
+++ CollisionShape3D
+++ MeshInstance3D2 : MeshInstance3D
+++ CollisionShape3D2 : CollisionShape3D
@endwbs
```

また貼り付け下ノードをそれぞれ選択して、下記の表のように変更します。

<table>
      <caption>MeshInstance3D2のインスペクタ変更内容</caption>
  <thead>
    <tr>
      <th>項目</th>
      <th>設定値</th>
    </tr>
  </thead>
  <tr>
    <td>Node3D/Transform/Rotaion/y</td>
    <td>90</td>
  </tr>
</table>

<table>
  <caption>CollisionShape3D2のインスペクタ変更内容</caption>
  <thead>
    <tr>
      <th>項目</th>
      <th>設定値</th>
    </tr>
  </thead>
  <tr>
    <td>Node3D/Transform/Positon/y</td>
    <td>90</td>
  </tr>
</table>

![スクリーンショット (190).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691050/6ed2bfce-aef6-f998-d21c-fb71afa4725c.png)

# ゆっくり回転する
 RevolvingDoorにスクリプトをアタッチして保存します。
![スクリーンショット (191).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691050/317d7228-b91b-4bf2-13d6-184a2667b568.png)
　下記のように修正します。

```GDScript
extends StaticBody3D

@export var m_d_speed_degps = 0.2	# 1秒あたりに回転する角度[degree/s]

func _physics_process(delta):
	rotate_y( m_d_speed_degps * delta )
```

# 回転ドアをステージに配置する
　res://Stages/stage001.tscnを開きます。
　ルートノードStageを右クリックして「Instantiate Child Scene」を実行して、「StageItems/revolving_door.tscn」を追加します。
![スクリーンショット (319).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691050/488115e7-5e9b-56a7-60ee-a2f8ca53703c.png)

<table>
  <caption>RevolvingDoorのインスペクタ変更内容</caption>
  <thead>
    <tr>
      <th>項目</th>
      <th>設定値</th>
    </tr>
  </thead>
  <tr>
    <td>Node3D/Transform/Positon/z</td>
    <td>-7</td>
  </tr>
</table>

# MovingWallの長さを1mにする
　MovingWallのZ方向の長さを伸ばすためにScaleのzを3.0にしましたが、Warningがでていたので1.0に戻します。
　Node3D/Transform/Scaleの右の鎖アイコンをクリックして鎖をはずして、zを1.0に変更します。
　（Scaleのx,y,zすべて1.0にします）
<table>
  <caption>MovingWallのインスペクタ変更内容</caption>
  <thead>
    <tr>
      <th>項目</th>
      <th>設定値</th>
    </tr>
  </thead>
  <tr>
    <td>Node3D/Transform/Scale/z</td>
    <td>1.0</td>
  </tr>
</table>

![スクリーンショット (320).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691050/0fced0db-42ad-8def-a9fa-11f3637c23d5.png)
# 実行確認
　回転ドアに人が集まって動かされます。

![スクリーンショット (196).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691050/42b5f7d6-6430-88df-1e82-048fa13253dc.png)

　以上です。