差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
takeoff処理another [2023/04/14 15:11] fumble 作成 |
takeoff処理another [2023/04/14 15:40] (現在) fumble |
||
---|---|---|---|
行 1: | 行 1: | ||
- | =====TakeOffプラグインの処理アナザー===== | + | =====TakeOff プラグインの処理アナザー===== |
- | TakeOffプラグインは選択されたメイドをTakeOffするプラグインとして機能を記述します。\\ | + | TakeOff プラグインは選択されたメイドを TakeOff するプラグインとして機能を記述します。\\ |
- | TakeOffが脱衣というのは許せない、メイドを飛ばさないとダメだ!!という方はこちらです。\\ | + | TakeOff が脱衣というのは許せない、メイドを飛ばさないとダメだ!!という方はこちらです。\\ |
+ | // [ 実行 ]ボタン | ||
+ | if (GUILayout.Button(" | ||
+ | { | ||
+ | // TODO : 実行ボタン押下時の処理を記述(ひな形ではログを出力するだけ) | ||
+ | ConsoleLog.Information(" | ||
+ | } | ||
+ | この部分を | ||
+ | if (GUILayout.Button(" | ||
+ | { | ||
+ | // 飛び上がらせるコルーチンを定義する | ||
+ | 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/ | ||
+ | yield return new WaitForSeconds(1f/ | ||
+ | // 計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/ | ||
+ | yield return new WaitForSeconds(1f/ | ||
+ | // 計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 座標を下げてコルーチンを終了しています。\\ | ||
+ | |||
+ | ====欲張りなあなたへ・・・==== | ||
+ | 脱衣後に打ち上がられてもいいんじゃよ。\\ |