目次
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;
}