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

回答編集履歴

2

追記

2021/01/21 15:52

投稿

PinoMatcha
PinoMatcha

スコア368

answer CHANGED
@@ -28,4 +28,43 @@
28
28
  ```C#
29
29
  transform.RotateAround(target.transform.position, axis, rotate * Time.deltaTime);
30
30
  ```
31
- (恐らくrotateの値を上げないとかなり遅いです)
31
+ (恐らくrotateの値を上げないとかなり遅いです)
32
+ ### 追記2
33
+ ちょっと検証してきました。
34
+ カメラがチカチカする原因が判明しました。
35
+ 前述の通り、**Transform.RotateAround()**は「ある軸を中心に、周りをぐるぐる移動して回る処理」です。
36
+ なので**transform.position = target.position + offset;**をやってしまうと、**別々の移動処理が呼ばれる**ことになります。
37
+ よって、カメラが高速で2ヶ所を移動することになり、チカチカしていたんだと思います。
38
+ ですので**transform.position = target.position + offset;**は必要ありません。
39
+ 以下、参考に
40
+ ```C#
41
+ using UnityEngine;
42
+
43
+ public class RotateAround : MonoBehaviour
44
+ {
45
+
46
+ [SerializeField] Transform target;
47
+
48
+ [SerializeField] float rotate;
49
+
50
+ // Update is called once per frame
51
+ void Update()
52
+ {
53
+ // 要らない
54
+ // Vector3 offset = target.position - transform.position;
55
+ // transform.position = target.position + offset;
56
+
57
+ // 高さ合わせ
58
+ var targetPos = transform.position;
59
+ targetPos.y = target.position.y;
60
+ transform.position = targetPos;
61
+
62
+ // targetを中心に回る
63
+ Vector3 axis = transform.TransformDirection(target.up);
64
+ transform.RotateAround(target.position, axis, rotate * Time.deltaTime);
65
+
66
+ // targetの方を向く
67
+ transform.LookAt(target);
68
+ }
69
+ }
70
+ ```

1

追記

2021/01/21 15:52

投稿

PinoMatcha
PinoMatcha

スコア368

answer CHANGED
@@ -15,4 +15,17 @@
15
15
  ```C#
16
16
  transform.position = target.position + offset;
17
17
  ```
18
- ターゲット位置にオフセットを足しましょう。
18
+ ターゲット位置にオフセットを足しましょう。
19
+ ### 追記: 不安定なカメラ挙動
20
+ 恐らく原因はこれですね。
21
+ ```C#
22
+ transform.RotateAround(target.transform.position, axis, rotate);
23
+ ```
24
+ 毎フレームrotateの値(ここでは0.4f)で回転・移動する処理です。
25
+ 0.4fずつ回っていくので、テレポートみたいに移動します。
26
+ それに加え、**毎フレーム0.4f回転・移動**という処理なので他の端末で動かすとフレーム数に差がありますので速度が変わります。
27
+ Time.deltaTimeを掛けましょう。
28
+ ```C#
29
+ transform.RotateAround(target.transform.position, axis, rotate * Time.deltaTime);
30
+ ```
31
+ (恐らくrotateの値を上げないとかなり遅いです)