🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

2669閲覧

プレイヤーにカメラを追従させたい(3d)

Um_kok

総合スコア39

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/12/02 09:26

編集2020/12/02 10:22

こんにちはUnity初心者です。
今作ってるゲームで、プレイヤーに追従させないといけないので調べました。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Camera : MonoBehaviour 6{ 7 [SerializeField] private GameObject targetObj; 8 private Vector3 _targetPos; 9 private Vector3 _roteuler; 10 11 // Start is called before the first frame update 12 void Start() 13 { 14 _targetPos = targetObj.transform.position; 15 _roteuler = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, 0); 16 } 17 18 // Update is called once per frame 19 void Update() 20 { 21 rotateCameraAngle(); 22 } 23 24 // カメラの回転制御 25 private void rotateCameraAngle() 26 { 27 // targetの移動量分、自分(カメラ)も移動する 28 transform.position += targetObj.transform.position - _targetPos; 29 _targetPos = targetObj.transform.position; 30 _roteuler = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, targetObj.transform.eulerAngles.z); 31 transform.eulerAngles = _roteuler; 32 } 33}

すると以下のスクリプトになりました!
スクリプトリファレンスなどを見ながら頑張ってみました。
https://docs.unity3d.com/ja/2019.4/ScriptReference/Transform-eulerAngles.html
追従までは行けたのですが、カメラをプレイヤーの後ろから見る感じにしたいです。
やりたい挙動としてはマリオカートみたいに後ろから見る感じにしたいです。
なのでY軸も見た感じ固定に見えたので、固定にしております。
loockRotationでいけるかなと思って試してみてもうまくいきません
https://docs.unity3d.com/ja/current/ScriptReference/Quaternion.LookRotation.html

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Camera : MonoBehaviour 6{ 7 [SerializeField] private GameObject targetObj; 8 private Vector3 _targetPos; 9 private Vector3 _roteuler; 10 11 // 回転の制限 12 [SerializeField] private float angle_LimitUp = 45f; 13 [SerializeField] private float angle_LimitDown = -45f; 14 15 // Start is called before the first frame update 16 void Start() 17 { 18 _targetPos = targetObj.transform.position; 19 _roteuler = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, 0); 20 } 21 22 // Update is called once per frame 23 void Update() 24 { 25 rotateCameraAngle(); 26 } 27 28 // カメラの回転制御 29 private void rotateCameraAngle() 30 { 31 // targetの移動量分、自分(カメラ)も移動する 32 transform.position += targetObj.transform.position - _targetPos; 33 _targetPos = targetObj.transform.position; 34 _roteuler = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, targetObj.transform.eulerAngles.z); 35 //transform.position = targetObj.transform.up + _roteuler; 36 transform.rotation = Quaternion.LookRotation(targetObj.transform.forward,targetObj.transform.up); 37 transform.eulerAngles = _roteuler; 38 } 39}

どうかご回答お願いします。説明などもしてくださると勉強になります。
カメラを子にするのはなしです。後々いじりたいので。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

C#

1// ソースコード 2using UnityEngine; 3 4public class Camera : MonoBehaviour 5{ 6 7 // キャラクター 8 // Inspectorから設定できる 9 [SerializeField] 10 private Transform target; 11 12 // カメラの高さ 13 // Inspectorから設定できる 14 [SerializeField, Range(1, 10)] 15 private float camHeight = 5.0f; 16 17 // キャラクターからの(Z軸における)距離 18 // Inspectorから設定できる 19 [SerializeField, Range(1, 10)] 20 private float camDistance = 5.0f; 21 22 // Update is called once per frame 23 void Update() { 24 // キャラクターの位置から距離分後ろに下がり、高さ分上にあがる処理 25 transform.position = target.position - (target.forward * camDistance) + new Vector3(0, camHeight, 0); 26 // キャラクターのほうを常に向く処理 27 transform.LookAt(target); 28 } 29}

簡単にですが、実装しました。
このスクリプトをカメラにアタッチすれば、マ〇オカートのカメラワークは十分かと。

参考にしてください。

投稿2020/12/02 10:39

編集2020/12/02 10:43
PinoMatcha

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Um_kok

2020/12/02 13:20

お返事遅れました。思っていた挙動が出来ました。すごい分かりやすいコメントありがとうございます。 これからもプログラム頑張ります!
guest

0

カメラをプレイヤーの子要素にするのではダメなんですか?

投稿2020/12/02 10:14

PinoMatcha

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Um_kok

2020/12/02 10:20

回答ありがとうございます。だめですね。後々、いじる必要があるので子にするのはだめです。 あとプレイヤーが傾いたらカメラも傾いてしまいますし。
PinoMatcha

2020/12/02 10:23

なるほど。 では、スクリプトによる制御で常にキャラクターの後ろを陣取ってキャラクターを映し続けなければいけない訳ですね
Um_kok

2020/12/02 10:24

そうです!わかりにくくてすみません。
PinoMatcha

2020/12/02 10:36

スクリプトを組んでみたので、もう一度回答しますね。
Um_kok

2020/12/02 10:37

ありがとうございます!
PinoMatcha

2020/12/02 11:40

回答しておきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問