2021.10.25オブジェクトを移動する方法が知りたいのですが...Vector3を使った直線移動の方法について解説していきます。流れで作業を進めていきます。【Unity】ゲーム開発前の下準備まずは、Unityエディタを開くことがスタートです。「Projectの作成」→「Sceneの作成」という順番で進めていきます。takugymnastics.com2021.10.11完成イメージは以下のようになります。解説画面と合わせるために、以下のように各オブジェクトの配置や名前を変更をしていきます。[Cube]は、オブジェクト名を[Ground]に変更し、[Transform]を以下のように変更します。[Sphere]は、オブジェクト名を[missile]に変更し、[Transform]を以下のように変更します。各オブジェクトのMaterial名を設定します。Material名は、[Cube]→[GroundMat]、[Sphere]→[MissileMat]に変更します。Cameraを設定します。Camera]を選択し、Inspectorウインドウの[Transform]を以下のように変更します。Scriptの追加オブジェクト[Missile]に制御するためのScriptを追加します。Script名は、[Missile_move]に変更しています。Scriptの追加が完了すると、このようになります。目標位置への配置Scriptを編集して、オブジェクトを制御します。projectウインドウのScript[Missile_move]をクリックして開きます。現在位置から目標位置に配置するScriptを作成します。ScriptProjectウインドウのScript[Missile_move]をクリックして開きます。)メソッドで指定の位置に配置させるScriptです。}}編集が完了したら、保存します。動作確認[▶︎]ゲームプレイをクリックして動作を確認します。指定した位置にオブジェクトが配置されます。無限位置への移動ベクトル量をUpdateメソッドで更新しながら加算していくことで、オブジェクトが無限に進むScriptを作成していきます。ここでは、ベクトル量の違う2つのオブジェクトを比較しながら確認していきます。オブジェクトの複製Scriptの内容を深めるために、ベクトル量の違う[Missile]を複製します。[Missile]が複製されて、[Missile(1)]が作成されますので、Inspectorウインドウの[Transform]と[Target]を以下のように変更します。オブジェクトの複製は、Hierarchyウインドウの[Missile]を選択して、[Ctrlキー]+[D]もしくは、[Commandキー]+[D]をクリックします。現在位置から無限に進むScriptを作成します。ここでは、指定するベクトル量に応じて速度を可変するパターンを解説します。Script更新が発生するたびに、ベクトルが加算されていくScriptを作成します。Startメソッドにfloat型の倍数をかけて、速度を調整できるようにします。端末のスペックに関係なく、1秒間(時間基準)で進む距離を規定するため、”Time.deltaTime”を乗算しています。}}編集が完了したら、保存します。動作確認[▶︎]ゲームプレイをクリックして動作を確認します。[Missile(1)]が[Missile]を追い抜いています。これは、大きなベクトル(targetの値)を設定した[Missile(1)]の方が単位時間当たりの移動量が大きくなるためです。実行中の[Missile]のInspectorウインドウの[Transform]を確認すると、[Position]の値が増えていくのがわかります。時間を追うごとにどこまでも進んでいきます。ベクトル量に関わらず速度一定Script今度は、ベクトル量に関わらず、[Missile]と[Missile(1)]を速度を同じにしていきます。normalizedを使用して、正規化して長さが1のベクトルを設定することで解決します。}}編集が完了したら保存します。public変数に指定したspeedをInspectorウインドウから変更します。動作確認[▶︎]ゲームプレイをクリックして動作を確認します。狙い通り、[Missile(1)]と[Missile]が同じ速度で動きます。目標物への追従(直線的)オブジェクトが狙ったオブジェクトに向かっていくScriptを作成します。Object]>[Cylinder]の順にクリックします。オブジェクト名を[Pole]に変更し、[Transform]を以下のように設定します。Scriptオブジェクト[Pole]をキーボードの矢印キーで移動させるScript[Pole_move]を追加します。Projectウインドウに追加したら、クリックして開きます。キーボードの[↑↓→←]でオブジェクトを移動させるScriptを書いていきます。}}編集が完了したら、保存します。以下のようになっていれば完了です。Camera]を選択し、Inspectorウインドウの[Transform]を以下のように設定します。ここまでの設定で、以下のようになります。Script目標物を追従するScriptを作成します。ProjectウインドウのScript[Misslile_move]を開きます。[Pole]と[Missile]の相対距離を計算して、その距離を目標として[Missile]が進む。目標は常にUpdateメソッドで更新していくため、徐々に小さくなり、[Pole]に到達する。Startメソッドに”LookAt”を追加することで、[Pole]の方向に向きを変えます。“Space.World”は、ワールド座標(絶対座標)を意味します。}}編集が完了したら、保存します。Hierarchyウインドウの[Missile]を選択肢し、Inspectorウインドウの[Pole]の欄に、Hierarchyウインドウの[Pole]をドラッグして離します。動作確認[▶︎]ゲームプレイをクリックして動作を確認します。目標物の[Pole]を目掛けて、[Missile]が飛んでいきます。上の動画では表現できていませんが、Gameビューでは、[Missile]が[Pole]に衝突してから、振動しています。これは、相対距離ベクトルが厳密に0(ゼロ)にならないために起こっている現象です。相対距離ベクトルが厳密に0(ゼロ)にならないのであれば、if文で小さい値になったら、衝突をやめるという命令に書き換えます。}}動作確認[▶︎]ゲームプレイをクリックして動作を確認します。無事に振動が解決できました。ちなみに、Y軸の方向へも追従します。目標物への追従(曲線的)Script曲線的に遊びを持った追従の仕方を解説します。Slerp”は、指定した区間を球状に補間します。}}動作確認[▶︎]ゲームプレイをクリックして動作を確認します。曲線的に遊びを持ちながら追従していきます。