Skip to main content

椅子で回転する

子どものように椅子でくるくる回ってみたいと思ったことはありませんか?今ならできます!このチュートリアルでは、キャラクターと椅子に操作可能な回転を追加する方法を紹介します。

目が回る、目が回る!

椅子の道具を準備する​

技術的には、このチュートリアルに椅子の道具は必要ありませんが、あったほうが楽しいでしょう。Warudo の Discover タブから、Steam Workshop にある Computer Chair の道具をダウンロードできます。(もちろん、Mod SDKを使って独自の椅子の道具をインポートすることもできます!)

キャラクターが椅子に座るように、キャラクターと椅子の道具を配置します。

キャラクターを回転させる​

カメラをアニメーションさせるチュートリアルで Set Asset Transform ノードを覚えているかもしれません。しかし、ここではキャラクターの回転だけを扱いたいので、代わりに Set Asset Rotation ノードを使えます。(トランスフォームは、位置、回転、スケールを組み合わせたものです。)次のノードはトリガーされると何をするか、推測できますか?

これはキャラクターを (0, 180, 0) に回転させます。Y軸は上向きなので、キャラクターの頭を通って足から出る棒を軸に180度回転させると想像できます。結果として、キャラクターは椅子の背もたれの方を向きます!

ヒント

キャラクターを (180, 0, 0) に回転させると何が起きるか推測できますか?では (0, 0, 180) では?試してみてください!

ここまでくれば、次のステップはおそらく直感的に分かるでしょう。このノードの Rotation データ入力に何かを接続する必要があります。この何かは時間とともに変化する値で、キャラクターが時間とともに回転するようにするものです。変数を使うことを考えるかもしれませんが、もっと簡単な方法があります。

少し考えてみましょう。キャラクターの元の回転が (0, 0, 0) だとします。これを (0, 180, 0) まで回転させたいとします。どうすればよいでしょうか?直接 (0, 180, 0) に回転させることもできますが、それでは上のように回転が急に変わるだけで、あまり面白くありません。途中にもう1ステップ入れるかもしれません。まず (0, 90, 0) に回転し、少し後に (0, 180, 0) に回転します。あるいは、さらに多くの中間ステップを入れます。(0, 30, 0)、(0, 60, 0)、(0, 90, 0)、(0, 120, 0)、(0, 150, 0)、(0, 180, 0)。もっと多くのステップではどうでしょう?(0, 10, 0)、(0, 20, 0)、(0, 30, 0)、...、(0, 180, 0)。要点は、十分なステップがあれば、キャラクターが滑らかに回転しているように見えるということです!

この並び、(0, 10, 0)、(0, 20, 0)、(0, 30, 0)、...、(0, 180, 0) を見ると、Y軸が各ステップで10ずつ増えていると分かります。言い換えると、各ステップで現在の回転を教えてもらえれば、次の回転を示せます。Y軸に10を足すだけです!

これは、まさに以下のブループリントが行っていることです。

詳しく見ていきましょう。固定の回転の代わりに、変化する回転を使いたいと言っています。この変化する回転はキャラクターの現在の回転に基づきます。現在の回転 (X, Y, Z) を3つの数値 X、Y、Z に分解し、それぞれの数値を読み取れるようにします(Decompose Vector3 ノード)。Y に10を加え(Float Addition ノード)、新しい Y と、0のままの X と Z を使って新しい回転 (X, Y, Z) を作成します(Vector3 ノード)。最後に、キャラクターの回転をこの新しい回転に設定します(Set Asset Rotation ノード)。

Set Asset Rotation ノードの Enter フロー入力をクリックしてみてください。クリックするたびに、キャラクターが10度回転することが分かります!

キャラクターを自動的に回転させるには、毎フレームトリガーされる On Update ノードを使うだけです。

ヒント

キャラクターをより速く回転させたい場合、何を変更すればよいでしょうか?遅くするにはどうでしょう?ホットキーで回転速度を制御する方法を思いつきますか?(ヒント:回転速度を保存するには変数を使えます。)

しかし、これではキャラクターだけが回転するので、椅子も回転させましょう。

これでキャラクターと椅子の両方がコマのように回転します!

情報

選択した椅子の道具はデフォルトでキャラクターと同じ向きになっているはずです。そうでない場合は、椅子を正しい向きに回転させるための追加ノードが必要になることがあります。

Gate​

キャラクターが今や全速力で回転していますが、どうすれば止められるでしょうか?On Update ノードを切断すればよいです。

ただし、それは便利ではありません。ブループリントを無効化することもできますが、別の方法を試してみましょう。On Update ノードからのフローを止める方法を探します。

城に住んでいて、城に入ってくる人々の流れを止めたいと想像してください。何をしますか?門を作ります!

同様に、On Update ノードのフローを止めるために……Gate ノードを使えます。

Gate ノードはその名のとおりです。Enter フロー入力を通過するフローは、ゲートが「開いている」場合にのみ Exit フロー出力を通過できます。デフォルトではゲートは開いています(Opened は Yes に設定されています)が、Close フロー入力をクリックするとゲートは閉じ(Opened は No に設定されます)、Exit フロー出力を通過できるフローはなくなります。

つまり、ゲートを切り替えるホットキーを設定できます!以下のブループリントを使うと、いつでも R を押してゲートを切り替えられ、それに応じてキャラクターは回転を開始または停止します。

回転をリセットする​

ここまでの内容には1つ問題があります。R を押して回転を止めると、キャラクターと椅子は回転の途中であっても即座に停止します。元の回転へ戻したいところです。

これを直すために、以下のノードを追加しましょう。

これらの動作は簡単です。T を押すと、キャラクターと椅子が元の回転へ滑らかに戻ります。Transition Time は0.5、Transition Easing は OutBack に設定されており、遷移の最後に少し「跳ね返る」ことに注意してください。

しかし、なぜ (0, 360, 0) に回転させるのでしょうか?なぜ単に回転を (0, 0, 0) に設定しないのでしょうか?これは、Set Asset Rotation ノードが常に目標回転までの最短距離で回転するためです。現在、時計回りに90度回転していると想像してください。0度に戻るには、反時計回りに90度回転することも、時計回りに270度回転することもできます。Set Asset Rotation ノードは常に最短距離、つまり反時計回りに90度回転する方を選びます。しかし椅子で回転するときは、最短距離など考えません。元の回転に戻るまで時計回りに回転し続けたいだけです!

そこで、目標回転を (0, 360, 0) に設定して Set Asset Rotation ノードを「だまします」。Get Asset Rotation ノードが返す回転は常に360度以下なので、Set Asset Rotation ノードは常に時計回りに360度まで回転します。

Sequence​

これでほぼ完璧ですが、小さな点が1つだけあります。今は回転を止めたい場合、まず R を押し、それから T を押す必要があります。R を押すだけで回転を止められるようにはできないでしょうか?

一見、これは簡単な作業に見えます。2つのフロー出力を交互に切り替える Flip Flop ノードには、かなり慣れています。そのため、「ゲートを開いて回転を開始する」と「ゲートを閉じて回転を停止し、さらに元の回転へ戻す」を交互に切り替えればよいのです。前者は簡単です。Flip Flop → A を Gate → Open に接続するだけです。

しかし後者はどうでしょうか?Flip Flop → B を Gate → Close に接続した場合、Set Asset Rotation ノードもトリガーして元の回転に戻すにはどうすればよいでしょう?覚えておいてください。フロー出力は1つのフロー入力にしか接続できないため、Flip Flop → B を Gate → Close と Set Asset Rotation → Enter の両方には接続できません。

そこで必要になるのが Sequence ノードです。Sequence ノードには可変数のフロー出力があり、トリガーされると各フロー出力を順番にトリガーします。Sequence ノードを使えば、最初にゲートを閉じ、その後で元の回転へ戻せます。

これで R を押すだけで、回転を開始したり、優雅に停止したりできます!

最終更新日 2026.10.06