回答編集履歴
1
コメントを受けて追記
answer
CHANGED
@@ -59,4 +59,43 @@
|
|
59
59
|
}
|
60
60
|
```
|
61
61
|
|
62
|
-
フィールドを追加してオフセット移動をオン・オフできるようにしたり、`pointA`と`pointB`のどちらを基準にするかを切り替えられるようにしたりするともっと便利になりそうですね。
|
62
|
+
フィールドを追加してオフセット移動をオン・オフできるようにしたり、`pointA`と`pointB`のどちらを基準にするかを切り替えられるようにしたりするともっと便利になりそうですね。
|
63
|
+
|
64
|
+
###[追記]
|
65
|
+
目的の動きを達成するには移動方法を変えてしまうのが手っ取り早そうですね。[MoveTowards](https://docs.unity3d.com/ScriptReference/Vector3.MoveTowards.html)が便利なように思います。
|
66
|
+
だいぶ元のコードから変わってしまいましたが、下記のようなパターンではどうでしょうか。
|
67
|
+
|
68
|
+
```C#
|
69
|
+
using System.Collections;
|
70
|
+
using System.Collections.Generic;
|
71
|
+
using UnityEngine;
|
72
|
+
// © 2017 TheFlyingKeyboard
|
73
|
+
// theflyingkeyboard.net
|
74
|
+
//Moves object between two points
|
75
|
+
public class MoveBetweenTwoPoints : MonoBehaviour {
|
76
|
+
[SerializeField] private float moveSpeed;
|
77
|
+
[SerializeField] private GameObject pointA;
|
78
|
+
[SerializeField] private GameObject pointB;
|
79
|
+
[SerializeField] private Transform objectToUse;
|
80
|
+
[SerializeField] private bool moveThisObject = false;
|
81
|
+
private Transform destination; // 現在の目的地
|
82
|
+
void Start()
|
83
|
+
{
|
84
|
+
if (moveThisObject)
|
85
|
+
{
|
86
|
+
objectToUse = transform;
|
87
|
+
}
|
88
|
+
destination = pointA.transform; // pointAを最初の目的地に設定
|
89
|
+
}
|
90
|
+
void Update()
|
91
|
+
{
|
92
|
+
objectToUse.position = Vector3.MoveTowards(objectToUse.position, destination.position, moveSpeed * Time.deltaTime); // 目的地に向かって移動、ただし最大移動距離は移動速度×フレーム時間を超えないようにする
|
93
|
+
if (Vector3.Distance(objectToUse.position, destination.position) == 0.0f) //Checks if the object has travelled to one of the points
|
94
|
+
{
|
95
|
+
destination = destination == pointA.transform ? pointB.transform : pointA.transform; // 現在の目的地がpointAなら次の目的地をpointBに、さもなくば次の目的地をpointAに設定
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
```
|
100
|
+
|
101
|
+
すみませんが今はUnityが手元になく、コンパイルが通るかすら未確認のコードです。うっかりした間違いがあるかもしれませんので、うまく動かないようでしたらお知らせください。
|