ユーザ用ツール

サイト用ツール


takeoff処理another

TakeOff プラグインの処理アナザー

TakeOff プラグインは選択されたメイドを TakeOff するプラグインとして機能を記述します。
TakeOff が脱衣というのは許せない、メイドを飛ばさないとダメだ!!という方はこちらです。

// [ 実行 ]ボタン
if (GUILayout.Button("実行", this.uiStyleButton) && this.maid != null)
{
    // TODO : 実行ボタン押下時の処理を記述(ひな形ではログを出力するだけ)
    ConsoleLog.Information("実行されたメイドさんは{0}。", maid.status.fullNameJpStyle);
}

この部分を

if (GUILayout.Button("実行", this.uiStyleButton) && this.maid != null)
{
    // 飛び上がらせるコルーチンを定義する
    IEnumerator takeOff(Maid targetMaid)
    {
        // 飛び上がった量
        var height = 0f;
        // 飛び上がる速度
        var speed = 0f;
        // 加速度
        var acceleration = 0.01f;
        do
        {
            // 速度を加速度分加速
            speed += acceleration;
            // 今回飛び上がる分を加算
            height += speed;
            // 現在のメイド位置を取得
            var newPosition = targetMaid.transform.position;
            // 今回飛び上がる分をY座標に加算
            newPosition.y += speed;
            // 今回飛び上がらせた位置を反映
            targetMaid.transform.position = newPosition;
            // 1/60秒待つ
            yield return new WaitForSeconds(1f/60f);
            // 計200上昇するまで繰り返す
        } while (height < 200f);
        // 現在のメイド位置を取得
        var orgPosition = targetMaid.transform.position;
        // 飛び上がった分をY座標に減算することで元の位置に
        orgPosition.y -= height;
        // 戻した位置を反映
        targetMaid.transform.position = orgPosition;
    }
    
    // 飛び上がらせるコルーチンを起動する、その際選択中のメイドを渡す。
    this.StartCoroutine(takeOff(this.maid));
}

に変更します。

処理を解説していきます。

// 飛び上がらせるコルーチンを定義する
IEnumerator takeOff(Maid targetMaid)

関数内ローカル関数でコルーチンを定義します。
渡されたメイドに対して 1/60 秒ごとに、上方向に座標を変更するコルーチンを定義します。

// 飛び上がらせるコルーチンを起動する、その際選択中のメイドを渡す。
this.StartCoroutine(takeOff(this.maid));

定義したコルーチンに選択中のメイドを渡し実行します。

IEnumerator takeOff(Maid targetMaid)
{
    // 飛び上がった量
    var height = 0f;
    // 飛び上がる速度
    var speed = 0f;
    // 加速度
    var acceleration = 0.01f;
    do
    {
        // 速度を加速度分加速
        speed += acceleration;
        // 今回飛び上がる分を加算
        height += speed;
        // 現在のメイド位置を取得
        var newPosition = targetMaid.transform.position;
        // 今回飛び上がる分をY座標に加算
        newPosition.y += speed;
        // 今回飛び上がらせた位置を反映
        targetMaid.transform.position = newPosition;
        // 1/60秒待つ
        yield return new WaitForSeconds(1f/60f);
        // 計200上昇するまで繰り返す
    } while (height < 200f);
    // 現在のメイド位置を取得
    var orgPosition = targetMaid.transform.position;
    // 飛び上がった分をY座標に減算することで元の位置に
    orgPosition.y -= height;
    // 戻した位置を反映
    targetMaid.transform.position = orgPosition;
}

コルーチンは連続した処理を一定間隔やフレーム毎に実行させる処理を定義できる関数です。

acceleration ずつ speed をあげて、その speed 分メイドの Y 座標を上に変更します。
変更した量は height に記録しておいて、200 以上上昇するまで 1/60 秒待ってループしています。
200 以上上昇後は、 height に記録してある上昇量分メイドの Y 座標を下げてコルーチンを終了しています。

欲張りなあなたへ・・・

脱衣後に打ち上がられてもいいんじゃよ。

コメント

コメントを入力:
 
takeoff処理another.txt · 最終更新: 2023/04/14 15:40 by fumble