「$.onSteer コールバック」で操作可能な空飛ぶクラフトアイテムをつくろう

Cluster Creator Kit v2.26.0.1(以下、CCK)から、乗ることができるアイテムを制作できるコンポーネント「Ridable Item」での操作をスクリプトから操作できるAPI「$.onSteer コールバック」が追加されました。

これまでもCCKコンポーネント「Steer Item Trigger」で同じような処理を実装することができましたが、「Steer Item Trigger」はCCKワールドのみで利用できるものでした。「$.onSteer コールバック」を使うことで、クラフトアイテムでも同じような処理を実装することができるようになったのが、今回のポイントです(CCKワールドでもこちらのAPIは使用できます)。

現在テスト運用中のスペースでクラフトアイテムを置ける機能が許可されたワールドであれば、ワールドを探索する乗り物をつくって、それで探索できることも……!

今回は基本的な設定方法を解説します。

cluster公式の「スカイアスレチック」も空を飛ぶ乗り物があれば一っ飛び!?

本APIを使用するためには、スクリプトの対象となるGameObjectにRidable ItemMovable Itemがついている必要があります。

  • 新しいGameObjectをつくり、乗り物の見た目となるGameObjectを子に配置してください。
  • 親となるGameObjectにScriptable ItemRidable ItemMovable Itemコンポーネントを設定してください。
    • Movable Itemを設定した時に自動的に設定されるRigidbodyのisGravityのチェックは外してください。

以下が、スクリプトのサンプルになります。
プレイヤーが乗り物に乗った時のキー入力に応じて、アイテムが移動します。

$.onStart(() => {
  $.state.driver = null;
  $.state.steerInput = new Vector2(0, 0);
  $.state.steerAdditionalAxisInput = 0;
});

$.onRide((isGetOn, player) =>{
  $.state.driver = (isGetOn) ? player : null;
});

$.onSteer((input, player) =>{
  $.state.steerInput = input;
});

$.onSteerAdditionalAxis((input, player) => {
  $.state.steerAdditionalAxisInput = input;
});

$.onUpdate((deltaTime) => {
  if (!$.state.driver) {
    return;
  }
  if (!$.state.driver.exists()) {
    $.state.driver = null;
    return;
  }

  // プレイヤーが向いている方向に対しての移動量を求める
  const direction = $.state.driver.getRotation().createEulerAngles();
  const forwardRadian = direction.y * Math.PI / 180;
  const sideRadian = ((direction.y + 90) % 360) * Math.PI / 180;

  const vectorForwardInput = new Vector3(
    Math.sin(forwardRadian) * $.state.steerInput.y * deltaTime,
    0,
    Math.cos(forwardRadian) * $.state.steerInput.y * deltaTime
  );
  const vectorSideInput = new Vector3(
    Math.sin(sideRadian) * $.state.steerInput.x * deltaTime,
    0,
    Math.cos(sideRadian) * $.state.steerInput.x * deltaTime
  );
  const vectorVerticalInput = new Vector3(
    0,
    $.state.steerAdditionalAxisInput * deltaTime,
    0
  );

  const newPosition = $.getPosition()
    .add(vectorForwardInput)
    .add(vectorSideInput)
    .add(vectorVerticalInput);

  $.setPosition(newPosition);
});

乗り物の見た目はオリジナルでつくったり、本スクリプトサンプルの数字を差し替えたりするだけで、オリジナルの乗り物クラフトアイテムをつくることができます。ぜひ試してみてください!

記事をシェアしてワールド制作を盛り上げよう!

Cluster Creators Guide|バーチャル空間での創作を学ぶならをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む