takeoff処理another

差分

このページの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("実行", 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.1681452681.txt.gz
  • 最終更新: 2023/04/14 15:11
  • by fumble