質問編集履歴

1

書式の改善

2024/05/09 00:20

投稿

Kuroneko
Kuroneko

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,6 @@
1
1
  ### 実現したいこと
2
2
  Transform.RotateAroundを用いて、3Dのオブジェクトを中心としてカメラを移動させるプログラムを書いているのですが、オブジェクトの下側が見えないよう(カメラのY座標が0未満にならないよう)に、回転に制限を掛けたいです。
3
+ つまりは、水平方向への回転(Y軸回転)は制限なし、かつ垂直方向への回転(X軸・Z軸回転)は0~180度に制限したいです。
3
4
 
4
5
  また、そのほかの条件は、
5
6
  ・カメラはオブジェクトを常に見続ける
@@ -7,13 +8,7 @@
7
8
 
8
9
  環境は Unity2022.3.20f1です。
9
10
 
10
- 参考にした質問です>https://teratail.com/questions/143996
11
+ 参考にした質問です  https://teratail.com/questions/143996
11
-
12
- ### 発生している問題・分からないこと
13
- 現状では、オブジェクトを真上から見ている状態から、左右方向にスワイプすると制限なくオブジェクトの下側まで回転してしまいます。
14
- オブジェクトを側面から見ている状態から、左右方向に制限なく移動させるためにマウス移動量から求めた回転角度をそのままRotateAroundに入れていることや、回転軸が原因であろうとは分かっているのですが、真上から見ているときは左右方向の回転に制限を掛け、側面から見ている場合は掛けない、という二つを両立させる方法が分かりません。
15
-
16
-
17
12
 
18
13
  ### 該当のソースコード
19
14
 
@@ -24,7 +19,7 @@
24
19
  Vector2 sPos; // タッチした座標
25
20
  float wid, hei; // スクリーンサイズ
26
21
  float tx, ty;
27
- float angleTB, angleLR;
22
+ float angleTB, angleLR; // 上下・左右の回転角度
28
23
 
29
24
  void Start()
30
25
  {
@@ -62,27 +57,15 @@
62
57
  float overshootLR = angleLR - clampedAngleLR;
63
58
  float overshootTB = angleTB - clampedAngleTB;
64
59
 
65
- // 角度差分だけ回転量を調整して、制限を超えないようにしてやる
60
+ // 角度差分だけ回転量を調整して、制限を超えないように
66
61
  deltaAngleLR -= overshootLR;
67
62
  deltaAngleTB -= overshootTB;
68
63
  angleLR = clampedAngleLR;
69
64
  angleTB = clampedAngleTB;
70
65
 
71
- transform.RotateAround(target, transform.up, tx * sensitivity); //左右方向 z軸中心の回転
66
+ transform.RotateAround(target, transform.up, deltaAngleLR); //左右方向 z軸中心の回転
72
67
  transform.RotateAround(target, transform.right, deltaAngleTB); // 上下方向 x軸中心の回転
73
68
  }
74
69
  }
75
70
  }
76
71
  ```
77
-
78
- ### 試したこと・調べたこと
79
- - [x] teratailやGoogle等で検索した
80
- - [x] ソースコードを自分なりに変更した
81
- - [ ] 知人に聞いた
82
- - [ ] その他
83
-
84
- ##### 上記の詳細・結果
85
- 検索しても多くが一人称視点カメラの範囲制限のようで、自身の求める解答を上手く見つけられませんでした。
86
-
87
- ### 補足
88
- 特になし