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

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

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

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

Q&A

解決済

1回答

742閲覧

Unity.C# ビルド時にカメラが遅くなってしまう

rito_program

総合スコア2

C#

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

0グッド

0クリップ

投稿2021/10/04 02:06

ビルドした際のカメラの挙動

Unityのカメラについてです。ゲームがロードされた時、最初下にスクロールし、カメラのy値が0になったら下スクロールをやめ、プレイヤーの初期値まで上昇。その後Playerの位置についたら、カメラがPlayerを追従するというスクリプトを作りました。Unity内で実行した際には何の問題もなかったのですが、実際にビルドして実行した際に、カメラが最初に下スクロールする処理と、プレイヤー追従開始時後にカメラが上スクロールするときのみ、スクロール速度が極端に遅くなってしまいます。カメラはPlayerのy値のみ追っています。フレームレート落ちが原因かとも思いましたが、Player追従開始後の下降時の下スクロールは予定どうりの速度で実行されるので、原因がよくわからず質問させていただきました。

該当のソースコード

C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class CameraController : MonoBehaviour
{

GameObject player; public GameObject Mario; public float slide = 1.0f; bool _isStart = false; public float hideback = 0.8f; float riset = 0; float descamera = 0; float firstCamera = 1; // 最初のマリオの定位置へカメラが移動する際に使用 void Start() { //Application.targetFrameRate = 60; this.player = GameObject.Find("Mario"); // カメラを数秒間止める処理 Invoke("second", 2); } void second() { _isStart = true; } // Update is called once per frame public void Update() { if (!_isStart) { return; } Vector3 playerPos = this.player.transform.position; Transform tfp = this.transform; Vector2 pos = tfp.position; // メインカメラを取得 Camera camera = Camera.main; // カメラを前に移動し続ける if (pos.y <= 0) { //hideback = 0.8f; slide = 0f; } if (playerPos.y+0.8f > pos.y) { //Debug.Log("one"); firstCamera = 1f; } else if(playerPos.y+0.8f < pos.y) { //Debug.Log("zero"); firstCamera = 0f; } if (slide == 1.0f && PlayerHealth.destroyCount != 5) { camera.gameObject.transform.Translate(new Vector2(0.0f, -0.003f)); } if(firstCamera==1f && slide == 0f && PlayerHealth.destroyCount != 5) { camera.gameObject.transform.Translate(new Vector2(0.0f, 0.003f)); } if (playerPos.x < 10 && PlayerHealth.destroyCount != 5 && firstCamera == 0f) { if (/*playerPos.y + 0.8f == pos.y &&*/ slide == 0f) { transform.position = new Vector3( transform.position.x, playerPos.y + 0.8f, transform.position.z); } } if (playerPos.x > 10) { slide = 1.0f; } if(PlayerHealth.destroyCount == 5 && pos.y < 3) { descamera = 1; camera.gameObject.transform.Translate(new Vector2(0.0f, 0.003f)); Invoke("OnTitle", 5); } } void OnTitle() { SceneManager.LoadScene("Title"); }

補足情報(FW/ツールのバージョンなど)

ここでいうdestroyCountというのは、プレイヤーの残機数のことです。Playerpos.y <10等の処理は、Playerをdestroyではなく、死亡判定時にPlayerをy=30に飛ばしているからです(destroyさせるとほかの部分でバグが生じてしまうため)。そのため、Playerpos.yが10より上か下かで死亡を判定しています。Unityは初心者で、スクリプトの汚さやわかりずらい点が多々あると思います。わけのわからない処理等ありましたら、答えさせて頂きます。

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

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

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

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

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

guest

回答1

0

自己解決

すみません
すでに制作仲間が解決してくれていました。

投稿2021/10/04 02:10

rito_program

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問