こんにちは、只今ゲーム制作をしております。
そこで、詰まってしまったので質問させていただきます。
まず、コードです。今作っているのはレースゲームなのですが、ゴールした後のカメラワークについてです。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Camera : MonoBehaviour 6{ 7 8 // キャラクター 9 [SerializeField] private Transform target; 10 11 // カメラの高さ 12 [SerializeField, Range(1, 100)] 13 private float camHeight = 5.0f; 14 15 // キャラクターからの(Z軸における)距離 16 [SerializeField, Range(1, 100)] 17 private float camDistance = 5.0f; 18 19 [SerializeField] private float rotSpeed = 3f; 20 21 22 public bool goalFlg; // ゴールしたか 23 private bool cameraMoveFlg; // カメラが移動したか 24 private int numberOfRotations = 0; // カメラを回転した数 25 private float cameraDistance; // カメラとプレイヤーの距離 26 27 private void LateUpdate() 28 { 29 30 if (!goalFlg) {// ゴールしたか 31 32 PlayerCamera(); 33 } 34 else { 35 36 GoalAngleCamera(); 37 } 38 } 39 40 /// <summary> 41 /// プレイヤーを写すカメラ 42 /// </summary> 43 private void PlayerCamera() 44 { 45 // キャラクターの位置から距離分後ろに下がり、高さ分上にあがる処理 46 transform.position = target.position - (target.forward * camDistance) + new Vector3(0, camHeight, 0); 47 transform.LookAt(target); 48 } 49 /// <summary> 50 /// プレイヤーのゴール時、カメラを動かす 51 /// </summary> 52 private void GoalAngleCamera() 53 { 54 55 if (cameraMoveFlg) return; // カメラの移動が終わったら通らない 56 57 58 float speed = 1 / rotSpeed; 59 60 float value = Time.time * 2 * Mathf.PI * speed; 61 62 transform.position = target.position + new Vector3(Mathf.Sin(-value), 0, Mathf.Cos(-value)) * -camDistance; 63 transform.LookAt(target); 64 65 print(value); 66 float rot = 47; 67 if(value > rot) { 68 cameraMoveFlg = true; 69 gameObject.transform.parent = target.gameObject.transform; 70 } 71 } 72}
このように、ゴールしていないときは後ろから追従して、ゴールした後に、プレイヤーを軸に回転して、一定の角度まで回ったら、そこで、止まる、、、というものです。なのですがカメラが前で止まったり、後ろで止まったりしてしまいます。
何故でしょうか?ご回答お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/25 10:21
2021/01/26 01:06 編集
2021/01/26 01:51 編集
2021/01/26 07:46
2021/01/26 08:27
2021/01/26 09:35
2021/01/26 10:02
2021/01/27 01:09 編集
2021/01/26 12:06