この二日ほどで、いろんな問題点がみつかった「キツネくん森へいく」ゲーム。
その問題点を、かなり解決することができた。
問題1.
一昨日から急にフレームレートが爆上がりして、もともとはほわほわ飛んでいた蛍のような光がミサイルのように飛び回るようになってしまった問題。
フレームレートはGAMEが画面右上の「Stats」タブを開いて見ていたので、とにかくものすごい数字(900を超える瞬間もあり)になっているのは確認できていた。数日前まではそんなことはなかったのに、なぜこうなってしまったのかは謎のまま。しかし、解決策は見つけることができてその通りにやったところ、標準的な60という数字に落ちけることができた。
参考サイト https://ekulabo.com/frame-rate-time
こちらのサイトに出ていたコード↓をそのままコピーさせて頂いた。
void Start() | |
{ | |
Application.targetFrameRate = 60; | |
} |
これをFPS_Controllerというスクリプトを作って、これだけをペーストして保存。
そして、これを各シーンに入れたかったので、どのシーンにもあるメインカメラにアタッチしたところ、すべてのシーンのfpsが60前後で落ち着き、蛍もほわほわと飛ぶようになった。因みに、ProjectSettingのQualityの VSyncCountは Don't Sync にして、 左上にある表のチェックは全部外してみたが、フレームレートにはなんの変化もなかったので、これの意味はよくわからなかった。しかしスクリプトで指示するのが効果を発揮してくれたので、まあ良かった!
問題2.
画面が横長になっていたりシーンによってそろっていない問題。これはメインカメラの位置があっちゃこっちゃにあるようなので、それが原因かと推測。メインカメラはどのシーンでも触らずに、その中にうまく収まるように、シーンの方を拡大したり、場所を移動させることで、落ち着いた。シーンを作り始めるときは、メインカメラは常にポジションもスケールも同じにしようとポンさんと話あった。Z軸の位置は-10で。プレーヤーを配置するとVcamがプレーヤーをおいかけ、メインカメラもそれに従うのでXとYはそのあとは変化するのだと理解しているが、最初はメインカメラの位置を軸にしてオブジェクトを配置することに。ほかのシーンのオブジェクトをすべてコピーしてペーストしたようなときに、ずれたりしていたのかも。
問題3.
メイズシーンでゲームオーバーになった時に、ゲームオーバーというテキストを出した後、3秒してから、元の振り出し位置に戻されるようにしたかったのに、3秒待たずに元のシーンをリロードしていまう問題。これは、コードを書く場所が間違っていたことが分かった。
if (currentHealth <= 0)
{
//Debug.Log("体力ゼロ");
text1Text.SetActive(true);//ゲームオーバー、やりなおしのテキスト表示する
// Invoke(" GotoMazeScene", 3.0f );
//↑これだとシーン開始からの時間になるので使えなかった。
//時間の経過を計測し始める
elapsed += Time.deltaTime;
Debug.Log("経過時間は" + elapsed +"です");
if (elapsed > 3.0f)
{
GotoMazeScene();//Mazeシーンをリロードする関数を呼びだす。
}
}
アンダーラインの部分は、Updete()関数の中に入れなくてはいけなかったのに、ChangeHealth()関数の中に書いていたので、時間の計測ができなかったわけだ。
そしてStart()関数の中に、elapsed = 0f; を書き加えておいた。
因みにスクリプトの最初の部分に、 public float elapsed = 0.0f;と宣言してはあったが、Start()の中にも書いて初期化しておかないと、ダメだった。
問題4.
キャンバスのボタンにくるくる回るお花のアニメーションをくっつけて、ボタンにマウスが乗ったらActiveになり、マウスが離れるとFalseになるインジケーターとして利用したかったのに、最初からクルクル回るお花が見えてしまっていた問題。
これは新しいスクリプト、「IndicatorController」というのを作り、最初はFalseですよと書いただけ。
public class UIIndicator : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
this.gameObject.SetActive(false);
}
// Update is called once per frame
}
この単純なスクリプトをヒエラルキーにあるImage(Indicator)にアタッチするだけで、問題解決。
(こん)