質問するログイン新規登録

回答編集履歴

1

コメントを受けて追記

2017/12/31 04:12

投稿

Bongo
Bongo

スコア10816

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が手元になく、コンパイルが通るかすら未確認のコードです。うっかりした間違いがあるかもしれませんので、うまく動かないようでしたらお知らせください。