こんにちは、只今ゲーム制作をしております。
カメラの移動について質問させていただきます。タイトルの通りですが、
フラグがたったら、カメラを動かしたいというものです。
コードです。
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 20 public bool goalFlg; // ゴールしたか 21 private bool cameraMoveFlg; // カメラが移動したか 22 private int numberOfRotations = 0; // カメラを回転した数 23 private float cameraDistance; // カメラとプレイヤーの距離 24 private int count = 100; 25 26 27 28 void Update() 29 { 30 if (!goalFlg) {// ゴールしたか 31 32 PlayerCamera(); 33 } 34 else { 35 36 GoalAngleCamera(); 37 if (cameraMoveFlg) { 38 39 transform.position = target.position + (target.forward * cameraDistance); 40 transform.LookAt(target); 41 } 42 } 43 } 44 45 /// <summary> 46 /// プレイヤーを写すカメラ 47 /// </summary> 48 private void PlayerCamera() 49 { 50 // キャラクターの位置から距離分後ろに下がり、高さ分上にあがる処理 51 transform.position = target.position - (target.forward * camDistance) + new Vector3(0, camHeight, 0); 52 transform.LookAt(target); 53 } 54 /// <summary> 55 /// プレイヤーのゴール時、カメラを動かす 56 /// </summary> 57 private void GoalAngleCamera() 58 { 59 60 if (cameraMoveFlg) return; // カメラの移動が終わったら通らない 61 62 var rotate = 0.4f; // 回転する角度 63 64 65 // ここがおかしい 66 //Vector3 offset = target.position - transform.position; 67 //transform.position = transform.position + offset; 68 69 var targetPos = transform.position; 70 targetPos.y = target.position.y; 71 transform.position = targetPos; 72 73 74 75 76 77 Vector3 axis = transform.TransformDirection(target.transform.up); 78 transform.RotateAround(target.transform.position, axis, rotate); 79 80 81 82 numberOfRotations++; 83 if (numberOfRotations > count) { 84 85 cameraMoveFlg = true; 86 cameraDistance = Vector3.Distance(target.position, transform.position); 87 } 88 89 90 //var rot = Quaternion.AngleAxis(2, target.up); 91 //Quaternion q = this.transform.rotation; 92 //this.transform.rotation = q * rot; 93 } 94}
やった事
やりたい挙動としては、ゴールしてないときは後ろから追従しております。そして、ゴール時に target を中心にゆっくり回って、
一定の角度(インスペクタで設定)まで行ったら、そこで止まるというものです。ですが、targetを中心に回ることはできたのですが、追従の処理がうまくいきません。
C#
1//Vector3 offset = target.position - transform.position; 2 //transform.position = transform.position + offset;
距離を格納して、その距離のまま回転したいのですが、うまくいきません。
どうかお力添えお願いします。へたくそなコードを直したいです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/22 00:58
2021/01/22 01:09
2021/01/22 02:12 編集
2021/01/22 02:18