回答編集履歴

2

追記

2021/01/21 15:52

投稿

PinoMatcha
PinoMatcha

スコア368

test CHANGED
@@ -59,3 +59,81 @@
59
59
  ```
60
60
 
61
61
  (恐らくrotateの値を上げないとかなり遅いです)
62
+
63
+ ### 追記2
64
+
65
+ ちょっと検証してきました。
66
+
67
+ カメラがチカチカする原因が判明しました。
68
+
69
+ 前述の通り、**Transform.RotateAround()**は「ある軸を中心に、周りをぐるぐる移動して回る処理」です。
70
+
71
+ なので**transform.position = target.position + offset;**をやってしまうと、**別々の移動処理が呼ばれる**ことになります。
72
+
73
+ よって、カメラが高速で2ヶ所を移動することになり、チカチカしていたんだと思います。
74
+
75
+ ですので**transform.position = target.position + offset;**は必要ありません。
76
+
77
+ 以下、参考に
78
+
79
+ ```C#
80
+
81
+ using UnityEngine;
82
+
83
+
84
+
85
+ public class RotateAround : MonoBehaviour
86
+
87
+ {
88
+
89
+
90
+
91
+ [SerializeField] Transform target;
92
+
93
+
94
+
95
+ [SerializeField] float rotate;
96
+
97
+
98
+
99
+ // Update is called once per frame
100
+
101
+ void Update()
102
+
103
+ {
104
+
105
+ // 要らない
106
+
107
+ // Vector3 offset = target.position - transform.position;
108
+
109
+ // transform.position = target.position + offset;
110
+
111
+
112
+
113
+ // 高さ合わせ
114
+
115
+ var targetPos = transform.position;
116
+
117
+ targetPos.y = target.position.y;
118
+
119
+ transform.position = targetPos;
120
+
121
+
122
+
123
+ // targetを中心に回る
124
+
125
+ Vector3 axis = transform.TransformDirection(target.up);
126
+
127
+ transform.RotateAround(target.position, axis, rotate * Time.deltaTime);
128
+
129
+
130
+
131
+ // targetの方を向く
132
+
133
+ transform.LookAt(target);
134
+
135
+ }
136
+
137
+ }
138
+
139
+ ```

1

追記

2021/01/21 15:52

投稿

PinoMatcha
PinoMatcha

スコア368

test CHANGED
@@ -33,3 +33,29 @@
33
33
  ```
34
34
 
35
35
  ターゲット位置にオフセットを足しましょう。
36
+
37
+ ### 追記: 不安定なカメラ挙動
38
+
39
+ 恐らく原因はこれですね。
40
+
41
+ ```C#
42
+
43
+ transform.RotateAround(target.transform.position, axis, rotate);
44
+
45
+ ```
46
+
47
+ 毎フレームrotateの値(ここでは0.4f)で回転・移動する処理です。
48
+
49
+ 0.4fずつ回っていくので、テレポートみたいに移動します。
50
+
51
+ それに加え、**毎フレーム0.4f回転・移動**という処理なので他の端末で動かすとフレーム数に差がありますので速度が変わります。
52
+
53
+ Time.deltaTimeを掛けましょう。
54
+
55
+ ```C#
56
+
57
+ transform.RotateAround(target.transform.position, axis, rotate * Time.deltaTime);
58
+
59
+ ```
60
+
61
+ (恐らくrotateの値を上げないとかなり遅いです)