コード置き場「2DSTG #21 – #30」

コード置き場(2DSTG #21-#30)
スポンサーリンク

【2DSTG制作】の動画内で表示されるコード:#21 – #30

サムネイルをクリックすると、YouTubeの動画ページに移動します。

#22:ゲームオーバー画面

サムネイル#22

ボタンがクリックされた時の処理
[SerializeField] CanvasGroup groupRetry;

public void ButtonClick(string button)
{
    switch(button)
    {
        case "Retry":
            // 連打防止のためボタンを無効化
            groupRetry.interactable = false;
            // リトライ用の処理を実行
            Retry();
            break;
        case "Quit":
            groupRetry.interactable = false;
            // タイトル画面に戻る処理を実行
            Quit();
            break;
        default:
            break;
    }
}
UIのフェードイン・フェードアウト
using DG.Tweening;


public void FadeInRetry()
{
    groupRetry.DOFade(1, 1.0f).SetUpdate(true)
        .OnComplete(() =>
        {
            // フェードイン完了後にボタンを有効にする
            groupRetry.blocksRaycasts = true;
            groupRetry.interactable = true;
        });
}

public void FadeOutRetry()
{
    groupRetry.DOFade(0, 0.5f)
        .OnComplete(() =>
        {
            groupRetry.blocksRaycasts = false;
        });
}

#23:キャラクターセレクト

サムネイル#23

CharacterSelect
[SerializeField] CanvasGroup groupTitle;

[SerializeField] CanvasGroup groupRetry;

[SerializeField] CanvasGroup groupSelect;

// 生成するキャラクターの番号
public int characterNum;

public void ButtonClick(string button)
{
    // SE再生
    SoundManager.instance.PlaySE();
    switch(button)
    {
        case "Play":
            // 連打防止
            groupTitle.interactable = false;
            // キャラクターセレクト画面をフェードイン
            FadeInSelect();
            break;
        case "Retry":
            // リトライ用の処理を実行
        case "Quit":
            // タイトル画面に戻る処理を実行
        case "Kohaku":
            characterNum = 0;
            groupSelect.interactable = false;
            // UIをフェードアウト+ゲーム開始
            GameStart();
            break;
        case "Misaki":
            characterNum = 1;
            groupSelect.interactable = false;
            GameStart();
            break;
        default:
            break;
    }
}
プレイヤーユニットの生成
[SerializeField] GameObject playerA;

[SerializeField] GameObject playerB;

public void GameStart()
{
    // クリックしたボタンのキャラクターを生成
    if (characterNum == 0)
    {
        Instantiate(playerA, playerA.transform.position, Quaternion.identity);
    } else {
        Instantiate(playerB, playerB.transform.position, Quaternion.identity);
    }
}

#24:イベントを取得して音声を再生する

サムネイル#24

イベントの取得(Live2D)
using UnityEngine;


public class Live2dUserData : MonoBehaviour
{
    public void UserDataEventListener(string value)
    {
        // イベントに入力した内容に応じて分岐
        switch(value)
        {
            case "Voice1":
                // ボイス再生(戦闘開始!)
                SoundManager.instance.PlayVOICE(univ1220);
                break;
            case "Voice2":
                // ボイス再生(まだまだ!)
                SoundManager.instance.PlayVOICE(univ1230);
                break;
            ...省略...
        }
    }
}
CubismMotion3Json.cs
var animationEvent = new AnimationEvent
{
    time = UserData[i].Time,
    functionName = "UserDataEventListener",
    stringParameter = UserData[i].Value,
};

#25:プレイヤーの動きとLive2Dのパラメータをリンク

サムネイル#25

ターゲットの位置を取得
using Live2D.Cubism.Framework.LookAt;
using UnityEngine;


public class Live2dTarget : MonoBehaviour, ICubismLookTarget
{
    // ターゲット
    GameObject playerUnit;

    Vector3 targetPosition;

    void Start()
    {
        playerUnit = GameObject.FindWithTag("Player");
    }

    public Vector3 GetPosition()
    {
        // プレイヤーが存在すれば
        if (playerUnit != null)
        {
            // プレイヤーの位置を取得
            targetPosition = playerUnit.transform.position;
        } else {
            targetPosition = Vector3.zero;
        }
        return targetPosition;
    }

    public bool IsActive()
    {
        return true;
    }
}

#27:難易度の選択

サムネイル#27

難易度に応じてパラメータが変化
// 難易度を管理するスクリプト
[SerializeField] Manager manager;

// ヒットポイント
[SerializeField] int hp;

void Start()
{
    // 難易度に応じて耐久力を変化させる
    if (manager.difficulty == 1)
    {
        // EASYの場合は2分の1(小数点以下切り上げ)
        hp = Mathf.CeilToInt(hp * 0.5f);
    } else if (manager.difficulty == 3) {
        // HARDの場合は2倍
        hp = hp * 2;
    }
}

#29:撃ち返し弾

サムネイル#29

発射角度をランダムにする
// 弾の移動速度
[SerializeField] float speed;

// ランダムな角度の範囲
[SerializeField] int minAngle;
[SerializeField] int maxAngle;

void Start()
{
    // 撃ち返し弾の速度にランダムな値を加算
    speed = speed + Random.Range(-0.5f, 0.5f);

    // 撃ち返し弾の角度をランダムにする
    transform.localRotationo = Quaternion.AngleAxis(Random.Range(minAngle, maxAngle), new Vector3(0, 0, 1));
}
タイトルとURLをコピーしました