質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.31%
Unity3D

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

Q&A

解決済

1回答

2436閲覧

Unity3D カメラをプレイヤーを中心に回転しながら追尾させる方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

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

0グッド

0クリップ

投稿2022/03/16 06:57

提示コードですがモン〇ン、マ〇オ64 等のプレイヤーが移動しながらカメラがプレイヤーを中心に回転するという処理を実装したいのですが
カメラ回転とカメラ追尾を同時に実装する方法が知りたいです。提示コードですがMove()関数をの中身のコメントアウト部を解除するとカメラがその場で回転してしまいます。同時に実装するにはどうしたらいいのでしょうか?

知りたい事

プレイヤーが移動しながらカメラがプレイヤーを中心に回転するという処理を実装したい同時に実装する方法

イメージ説明

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class CameraControl : MonoBehaviour 6{ 7 public GameObject player; 8 public float rotateSpeed = 5; 9 public float moveOffset = 0; 10 private Vector3 offset; //カメラとプレイヤーのオフセット 11 private float range; //カメラとプレイヤーの距離 12 private Vector3 moveVector; //進む向き 13 14 // Start is called before the first frame update 15 void Start() 16 { 17 offset = transform.position - player.transform.position; 18 } 19 20 // Update is called once per frame 21 void Update() 22 { 23 Rotate(); //カメラ回転 24 Move(); //追尾 25 } 26 27 private void Move() 28 { 29 30 //transform.position = player.transform.position + offset; 31 32 } 33 34 private void Rotate() 35 { 36 Vector3 angle = new Vector3(Input.GetAxis("Mouse X") * rotateSpeed, Input.GetAxis("Mouse Y") * -rotateSpeed, 0); 37 38 transform.RotateAround(player.transform.position, Vector3.up, angle.x); 39 transform.RotateAround(player.transform.position, transform.right, angle.y); 40 } 41} 42

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

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

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

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

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

guest

回答1

0

ベストアンサー

///コメント部のように動いた差分を足すという方式で実現できました。カメラがその場で回転してしまうという問題が解消されました。

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class CameraControl : MonoBehaviour 6{ 7 public GameObject player; 8 public float rotateSpeed = 5; 9 public float moveOffset = 0; 10 private Vector3 offset; //カメラとプレイヤーのオフセット 11 private float range; //カメラとプレイヤーの距離 12 private Vector3 moveVector; //進む向き 13 private Vector3 targetPosition; 14 // Start is called before the first frame update 15 void Start() 16 { 17 offset = transform.position - player.transform.position; 18 targetPosition = player.transform.position; 19 20 } 21 22 // Update is called once per frame 23 void Update() 24 { 25 Rotate(); //カメラ回転 26 } 27 28 void LateUpdate() 29 { 30 Move(); //追尾 31 32 } 33 34 private void Move() 35 { 36///////////////////////////////////////////////////////////////////////////////// 37 transform.position += player.transform.position - targetPosition; 38 targetPosition = player.transform.position; 39///////////////////////////////////////////////////////////////////////////////// 40 } 41 42 private void Rotate() 43 { 44 Vector3 angle = new Vector3(Input.GetAxis("Mouse X") * rotateSpeed, Input.GetAxis("Mouse Y") * -rotateSpeed, 0); 45 46 transform.RotateAround(player.transform.position, Vector3.up, angle.x); 47 transform.RotateAround(player.transform.position, transform.right, angle.y); 48 } 49} 50

投稿2022/03/16 07:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問