Unity 開発日記 [10 日目] - パララックス、メイン インターフェイス、ポーズ メニュー

目次

1.視覚的な違い

2.メインメニュー

3.ポーズメニュー 


1.視覚的な違い

今日は、楽しい機能 Parallax (パララックス) をゲームに実装してみましょう. 簡単に言えば、さまざまなレイヤーがさまざまな速度で移動し、よりレイヤードに見えるようにすることができます.

まず、背景画像を操作する必要があるため、不要なトラブルを回避するために、カメラ フォローを実現するために背景画像にコライダーを追加した新しいゲーム オブジェクトを作成し、背景画像のコライダーを削除します。次に、視差効果を実現するコードを記述します. このコードは変数 Cam を使用してカメラの動きを取得します. カメラの位置が変化すると、このコードを使用するオブジェクトは MoveRate の速度で移動します.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Parallax : MonoBehaviour
{
    public Transform Cam; //获得摄像机的位置
    public float MoveRate;  //移动的速度
    private float StartPoint; //初始位置

    void Start()
    {
        StartPoint = transform.position.x; //获得当前物体的坐标
    }

    
    void Update()
    {
        transform.position = new Vector2(StartPoint + Cam.position.x * MoveRate, transform.position.y); //移动
    }
}

コードを背景画像にドラッグ アンド ドロップしてから、対応する変数を追加し、速度を設定して (カメラをメイン カメラとして設定できます)、機能を実現します。

2.メインメニュー

ゲームは基本的に実装されました. 次に、ゲームのメイン メニュー インターフェイス (ゲーム開始インターフェイス) を実装しようとします. このインターフェイスを作成するには、新しいシーンを作成する必要があります. 主に、作成するための UI を作成する必要があります.このインターフェイス. 同じ手順に従ってください 前の UI 制作プロセスでは、最初にキャンバスを作成する必要があり、その上にパネル (Panel) を作成します。

パネルとは?

パネルはパネル コンポーネントとも呼ばれ、基本的に他の UI 要素を配置できるコンテナーです。パネルを調整すると、コンテナ内の他の要素も移動します。

しかし、パネルは丸みを帯びた長方形であり、下の背景が表示されるため、この問題を解決するために必要な最初のステップは、パネル インターフェイスで元の画像を設定することです。そうでない場合は、[なし] に設定できます。ここに私のゲームの一部 スクリーンショットを撮り、照明を調整してよりリアルにします

次に、ボタンをホストする新しい Panel を作成します。また、最終レンダリングである背景画像のカラー グラデーションを作成することもできます。

次に、このパネルに UI > ボタンを追加して、メイン メニューのインターフェイスを作成します。

ここで、画面サイズの変更後に UI が適応的に変更されないというバグが見つかりました.UI キャンバスで UI スケーリング モードを選択して画面サイズをスケーリングすると、この問題を解決できます。

また、リソース ストアからダウンロードしたフォントは、古いバージョンの Text でしか使用できません.TextMeshPro (TMP) を使用する場合は、対応するフォント リソースを生成する必要があります.具体的なプロセスについては、以下を参照してください.チュートリアル

https://www.bilibili.com/read/cv8395060/

TTF ファイルは、生成する前にここで見つける必要があることに注意してください。そうしないと、エラーが報告されます。

次に、解像度を変更した後、[適用] をクリックします。

次に、新しいボタンを作成した後、ボタン内の単語が自動的に作成されます. ボタンのフォントサイズと位置、および色を設定し、ボタンの色をここで設定します.

同じ方法を使用して、ゲームを終了する別のボタンを設定します。次に、対応するコードを 2 つのボタンに一致させて、それらの機能を実現する必要があります。コードを 2 つのボタンの親セットに追加します。コンテナー、コードは前のシーン切り替えのアイデアと同じです。次のシーンを直接ロードします。コードは次のとおりです: (シーン管理のヘッダー ファイルを追加することを忘れないでください)

using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using UnityEngine;

public class Menu : MonoBehaviour
{
    public void StartGame() //开始游戏
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1); //加载下一个场景
    }

    public void Exit() //退出游戏
    {
        Application.Quit();
    }
}

次に、コンテナーにコードをマウントすると、ゲームを開始するボタンが見つかり、インスペクターの下部に表示されます。

次のウィンドウで、プラス記号をクリックします 

 

次に、マウスがクリックされたときに、MainMenu のスクリプトで関数 StartGame を呼び出します。

テストする前に、現在のシーンをゲームに追加することを忘れないでください (左上隅: [ファイル] > [ビルド設定])。

次に、背景の段階的なアニメーションを作成します。これは、ダイアログ ボックスをフェードインおよびフェードアウトさせる前のプロセスと同じであるため、ここでは詳しく説明しません。常にループしないように、ループ時間をオフにすることを忘れないでください。次に、このフェードアウト アニメーションが再生されるまでテキストが表示されないようにします。新しいオブジェクトを作成し、タイトルとボタンを下に配置します。使用するかどうかを調整するだけでよく、インターフェイスの外観と非表示を制御できます。

次に、関数を実装するコードを書きましょう。

public GameObject UI;

public void UIEnable()
{
    UI.SetActive(true);
}

 UI オブジェクトを対応する位置にドラッグします

最後に、前と同様に、アニメーションの最後にこの関数を呼び出すイベントを追加します。

3.ポーズメニュー 

 以前と同様に、まず新しいパネルを作成し、それに続く UI を作成する必要があります。

次に、インターフェイスのウェイクアップを一時停止するボタンを作成します (このボタンはパネルをウェイクアップするため、パネルには配置されません)。

次に、新しいパネルを作成し、必要な戻るボタンを作成します. ここでは、現在のゲーム インターフェイスに戻るボタン、メイン インターフェイスに戻るボタン、およびボリューム コントロール スライダーの 3 つのボタンを作成しました。

 

 最終的に、おそらくこのように作成しました。スライダーには3つのサブ変数が含まれています

 背景: スライダーの背景

Fill Area: スライドする部分

ハンドル: スライダーのボタン

これら 3 つのボタンの色やその他のプロパティをそれぞれ変更できます. 調整したので、このパネルを作って遊んでみました. 次にコードを書き始めます. 2 つのボタンの機能は比較的単純です. はい, ボタンメイン メニューに戻るには、シーンのメイン メニューを直接ロードすることができます. 一方、一時停止ボタンを呼び出す関数を記述する必要があります. 目的は、一時停止したゲームのメニューを閉じた状態にすることです.起動すると、ゲームに戻る機能は、メニューを再度閉じるだけで済みます。具体的なコードは次のとおりです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class PauseMenu : MonoBehaviour
{
    public GameObject Menu;

    public void WakeupMenu() //唤醒暂停菜单
    {
        Menu.SetActive(true);
    }

    public void ReturnMain() //返回主菜单
    {
        SceneManager.LoadScene("Menu"); //返回主菜单
    }

    public void ReturnGame() //返回游戏
    {
        Menu.SetActive(false);
    }
}

 このように、2 つのボタンの機能はすべて実現されていますが、この時点で、一時停止ウィンドウが表示されたときにゲームがまだ動いていることがわかりました。ゲームを一時停止する時間が必要なので、コードの行を追加する必要があります。それを達成するために対応する位置に。

Time.timeScale = 0f; //暂停游戏时间
Time.timeScale = 1f; //恢复游戏时间

PS: また、メイン インターフェイスに戻ったときにゲーム時間を復元する必要があります。そうしないと、スタックしたバグが発生します。 

 [注] この値を変更することで、時間の加速または減速の効果を得ることができます

次に、ボタンをスライドして音量を制御しようとします. この機能を実現するには、新しいオーディオ ミキサーを作成する必要があります。

上のウィンドウのメニューで [オーディオ ミキサー] ウィンドウを見つけます。

 オーディオ ミキサーは実際にはミキサーであり、各サウンドは独自のチャンネルを持つことができ、ミキサーで制御できます。たとえば、前に追加したバックグラウンド ミュージックには出力チャンネルがないことがわかります。

マスターに追加できます

 このように、オーディオ ミキサーでこのサウンドを調整できます。このサウンドの範囲は -80 ~ 20 であることがわかりますが、20 はサウンドを増幅するためのものであり、サウンド アーティファクトが存在する可能性があることに注意してください。 -80 から 0 と書くこともできます

 この範囲をスライダーに割り当てます

 次に、これら 2 つをリンクする必要があります。コードに進みます。まず、ヘッダー ファイルを追加する必要があります。

UnityEngine.Audio を使用して、対応するオブジェクトを作成できるようにします

public AudioMixer BGMAudio; //背景音乐

 次に、対応するオーディオ ミキサーをそれに追加します。

まず、コードを使用してボリューム値を変更するには、対応するプロパティ コードをオーディオ ミキサーで編集可能にする必要があります。

上の図に示されているインターフェイスに入り、インスペクターでボリュームを右クリックし、クリックしてコードを編集可能にして、横に表示できるようにします (この名前は自分で変更できますが、する必要があります)

したがって、次のコードを使用してこの値を変更できます

    public void SetVolume(float value) //音量控制
    {
        Audio.SetFloat("MainVolume", value);
    }

次に、スライダーのインターフェイスでこの関数を呼び出すことができます (ここで関数を選択するときに選択する同じ名前の関数が 2 つあることに注意してください。上記の関数を選択する必要があり、次の選択では設定する必要があることに注意してください)。固定浮動小数点数、上記は自動的にスライダーの値を取得します)

 

 同様に、すべての特殊効果の音量を制御できます。

すると、シーンが切り替わると音量スライダーは元に戻るのに、音量が変わらないという問題が見つかりました。そこで、一時停止ボタンを押すたびにスライダーの位置を現在の音量で初期化することにしました

コードは以下のように表示されます:

    public Slider BGMSlider; //背景音乐滑块
    public Slider SoundSlider; //音效音乐滑块

    private float volume; //用以初始化的音量

    public void WakeupMenu() //唤醒暂停菜单
    {
        /* 初始化音量滑块部分的位置 */
        Audio.GetFloat("BGMVolume", out volume);
        BGMSlider.value = volume;
        Audio.GetFloat("SoundVolume", out volume);
        SoundSlider.value = volume;
    }

おすすめ

転載: blog.csdn.net/qq_50688324/article/details/127132201