回答編集履歴
2
追記
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
追記
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の値を上げないとかなり遅いです)
|