回答編集履歴

3

リンク追加

2020/06/25 11:58

投稿

IShix
IShix

スコア1729

test CHANGED
@@ -240,4 +240,4 @@
240
240
 
241
241
  C#のfloatで a == 0は正しい結果が返らない時があります。fpsによって0にならない可能性もあります。
242
242
 
243
- なので必ず 大なり(>) 小なり(<) を使います。今回のようにそれだけでは成り立たない場合Math.Absで絶対値に変換して計算するのがおすすめです。[Mathf.Approximately](https://docs.unity3d.com/ja/current/ScriptReference/Mathf.Approximately.html)という渡された2つのfloatが大体同じか確認する関数もありますが、僕は使ったことないです。
243
+ なので必ず 大なり(>) 小なり(<) を使います。今回のようにそれだけでは成り立たない場合[Math.Abs](https://docs.microsoft.com/ja-jp/dotnet/api/system.math.abs?view=netcore-3.1)で絶対値に変換して計算するのがおすすめです。[Mathf.Approximately](https://docs.unity3d.com/ja/current/ScriptReference/Mathf.Approximately.html)という渡された2つのfloatが大体同じか確認する関数もありますが、僕は使ったことないです。

2

追記

2020/06/25 11:58

投稿

IShix
IShix

スコア1729

test CHANGED
@@ -240,4 +240,4 @@
240
240
 
241
241
  C#のfloatで a == 0は正しい結果が返らない時があります。fpsによって0にならない可能性もあります。
242
242
 
243
- なので必ず 大なり(>) 小なり(<) を使います。今回のようにそれだけでは成り立たない場合Math.Absで絶対値に変換して計算するのがおすすめです。
243
+ なので必ず 大なり(>) 小なり(<) を使います。今回のようにそれだけでは成り立たない場合Math.Absで絶対値に変換して計算するのがおすすめです。[Mathf.Approximately](https://docs.unity3d.com/ja/current/ScriptReference/Mathf.Approximately.html)という渡された2つのfloatが大体同じか確認する関数もありますが、僕は使ったことないです。

1

ヒントの追加

2020/06/25 11:51

投稿

IShix
IShix

スコア1729

test CHANGED
@@ -207,3 +207,37 @@
207
207
  SolidierMoveTest.unitypackage
208
208
 
209
209
  [https://19.gigafile.nu/0824-de8c99927f01c7db326bf99c2ac8004bf](https://19.gigafile.nu/0824-de8c99927f01c7db326bf99c2ac8004bf)
210
+
211
+
212
+
213
+ ### コードのヒント
214
+
215
+
216
+
217
+ **▼ 「Transform parent」**
218
+
219
+ transformは参照(transform.position = など)する度に内部的に取得処理を行なっております。
220
+
221
+ Updateなどフレーム単位でアクセスが必要な場合はparent = transformなどとしてキャッシュした方が高速に動作します。今回のようにインスペクタから設定するのが最速なのでおすすめです。
222
+
223
+
224
+
225
+ **▼ 「void Reset()」**
226
+
227
+ インスペクタから設定するのが最速と言いましたが、毎回設定するのは面倒です。
228
+
229
+ そこでResetを使うと便利です。Reset内に取得設定処理parent = transformを書くことでスクリプトをアタッチした時やインスペクタからアタッチしたスクリプトの右上の歯車マーク > Resetを選択するとResetが走ります。
230
+
231
+
232
+
233
+ **▼ var distance = ((Vector2)parent.position - targetPos).sqrMagnitude;**
234
+
235
+ Magnitudeはルートを使って計算するので重いです。距離を測る程度であればsqrMagnitudeで十分なのでこっちを使ってください。
236
+
237
+
238
+
239
+ **▼ System.Math.Abs(distance) < 0.01f**
240
+
241
+ C#のfloatで a == 0は正しい結果が返らない時があります。fpsによって0にならない可能性もあります。
242
+
243
+ なので必ず 大なり(>) 小なり(<) を使います。今回のようにそれだけでは成り立たない場合Math.Absで絶対値に変換して計算するのがおすすめです。