ビルドした際のカメラの挙動
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は初心者で、スクリプトの汚さやわかりずらい点が多々あると思います。わけのわからない処理等ありましたら、答えさせて頂きます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。