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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Unity3D

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

Unity

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

Q&A

2回答

724閲覧

Unityのカメラ遷移の方法

SugKim

総合スコア10

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2019/04/08 05:06

前提・実現したいこと

Unityで3Dゲームを作成しており、内容は斜め上から俯瞰した簡単な棒避けゲームです。
避ける動作をするオブジェクトをMainPerson、避けるべき棒オブジェクトをBarとしており、
Barは配置したEmptyオブジェクトから一定時間毎にPrefab化したbarオブジェクトを生成してx方向に動く処理となっています。
MainPersonはz軸方向に平行移動のみできます。
棒を5つ避けるたびにカメラをいろんな角度から写すようにしたいのですが、
どうすればよろしいでしょうか。
※カメラはパッと切り替わってしまうと操作側の反応が追いつけないと思いますので、
なるべくヌルッと動かしたいです。

MainPersonScript (避ける側のスクリプト)

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class MainPersonScript : MonoBehaviour 6{ 7 //MainPersonの移動速度 8 public float mainPersonSpeed = 5f; 9 10 // 初期処理 11 void Start() 12 { 13 14 } 15 16 // フレーム処理 17 void Update() 18 { 19 //z軸に平行移動 20 transform.position += new Vector3(0f, 0f, Input.GetAxis("Horizontal")*mainPersonSpeed*Time.deltaTime); 21 } 22}

BarObstScript (棒自身のスクリプト)

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.SceneManagement; 5 6public class BarObstScript : MonoBehaviour 7{ 8 // Barの速度 9 public float bar_speed; 10 11 public GameObject MainPersonObject; 12 public MainPersonScript mainPersonScript; 13 14 // 実行時初期処理 15 void Start() 16 { 17 // Barの大きさは範囲内でランダム 18 transform.localScale = new Vector3(1f, 1f, Random.Range(3f, 6f)); 19 20 MainPersonObject = GameObject.Find("MainPerson"); 21 mainPersonScript = MainPersonObject.GetComponent<MainPersonScript>(); 22 } 23 24 // 毎フレーム実行処理 25 void Update() 26 { 27 // x+方向に動く 28 transform.position += new Vector3(bar_speed * Time.deltaTime, 0f, 0f); 29 } 30 31 private void OnCollisionEnter(Collision collision) 32 { 33 //MainPersonに衝突した場合 34 if (collision.gameObject.CompareTag("MainPerson")) 35 { 36 //ゲームオーバー 37 SceneManager.LoadScene("GameOverScene"); 38 } 39 } 40 41 private void OnTriggerEnter(Collider other) 42 { 43 //CubeBackに重なった場合 44 if (other.gameObject.CompareTag("Cube_Back")) 45 { 46 //Barを消す 47 Destroy(gameObject); 48 } 49 } 50}

BarObstReplicScript (棒を複製するスクリプト)

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class BarObstReplicScript : MonoBehaviour 6{ 7 // Barオブジェクトと結びつけ 8 public GameObject BarObst; 9 10 // 初期処理 11 void Start() 12 { 13 //一定時間毎に実行する処理 14 InvokeRepeating("SpawnBar", 0f, 1.2f); 15 } 16 17 // フレーム毎処理 18 void Update() 19 { 20 21 } 22 23 void SpawnBar() 24 { 25 //壁(左)の座標を取得 26 float cubeLeftThis = GameObject.Find("Cube_left").transform.position.z; 27 28 //インスタンス生成 29 Instantiate(BarObst, new Vector3(transform.position.x, transform.position.y, Random.Range(cubeLeftThis + 3.0f, 2.0f)), transform.rotation); 30 } 31}

開発環境

macOS Mojave 10.14.4(18E226)
Unity 2018.3.11f1
Visual Studio 7.8.3.2

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

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

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

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

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

stdio

2019/04/08 08:32

要らない情報が多過ぎて何がしたいのか良く分かりません。 > ※カメラはパッと切り替わってしまうと操作側の反応が追いつけないと思いますので、なるべくヌルッと動かしたいです。 質問を見る限り、ここだけの質問だと思いますので不要なコードは削除して、上記のプログラムだけ載せてもらってよろしいですか?
guest

回答2

0

カメラ自体を動かすのが一番はやいと思います。プレイヤーが棒をよけるたびにカウンターを一つずつ乗せ、5つ溜まったらカメラを動かすというコードをかいてみてはいかがでしょうか。
どのようにカメラを動かしたいのかわからないのですが、フィールドの中心を原点として円運動させるのがいいかもしれません。
その時に、プレイヤーの動く方向も変化すると面白いかもしれません。

投稿2019/04/09 09:11

toy_

総合スコア16

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

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

0

色々あるかとは思うのですが、パッと思いついたのはカメラ自体を動かす方法でしょうか?
スムーズに動かすとなると、Updateに処理を書くか、コルーチンでカメラを動かしてやる感じになるんだろうなと思うんです

それだとすごくめんどくさいかと思うのでTween系のPluginなりを使うのはいかがでしょうか。
無料でも使えるおすすめは、このあたりです → DOTween (HOTween v2)

Camera.transform.DoMove(動かしたい座標,動かす秒数); みたいな記述をすると1秒間かけてその座標に移動してくれたりします。Sequenceを使うと複数の命令も組み合わせられるので移動しながら画面を回転とかもできます。

カメラ以外にもUIを動かしたりとかに使えるので非常に便利です。

投稿2019/04/08 09:12

hogefugapiyo

総合スコア3302

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問