【ロブロックスでプログラミング学習】ゲームの作り方!Part02 移動アニメーション

Roblox

アニメーションを作ろう!その2

移動(走る)アニメーション

前回は動いていないアイドル状態のときに大剣を構えるアニメーションを作ったから、今回は移動状態のときに大剣を担いで走るアニメーションを作って、切り替えるコードもプログラミングしていくよ。

また前回と同じように自分のモデルを使ってアニメーションを作っていくよ。

ヘッダーメニューのPLUGINから「AnimationEditor」をクリック。

Animation Editor

アニメーションを作りたいModelを選択するとアニメーション名を聞かれるから名前をつけよう。移動状態のアニメーションだから、ここでは「moving」にするね。

move animation

今回は両腕のパーツを回転させただけ。大剣を担ぐだけだからタイムライン「0:00」の1コマでいいね。

次に優先度を「Movement」に設定。アニメーション名の右端の「・・・」から「Set Animation Priority」を選択。

Priority Movement

前回は「Idle」にしたから今回は「Movement」以上の優先度じゃないとうまく切り替わらないんだ。

次にこのアニメーションをRobloxで使えるようにIDを発番するよ。もう一度アニメーション名の右端の「・・・」から「Publish to Roblox」を選択。

Asset Configuration moving

Descriptionで説明を追記できるけど、今回はこのまま「Submit」。

moving submit

IDのとなりの「□」をクリックするとコピーできるよ。コピーしたら「Close」で閉じて。

次に剣にアニメーションを追加するよ。

moving properties
  1. 「StarterPack」>「Buster Sword」>「Handle」の「+」から「Animation」を追加。
  2. 追加したAnimationを選択して、PropertiesからNameを「Animation」から「moving」に変更。
  3. AnimationIdにさっきコピーしたIDをペースト。

プログラミングでアニメーションを適用

あとは大剣を装備した状態で移動したら、このアニメーションが適用されるように前回のスクリプトを編集していくよ。

local Tool = script.Parent

local idleAnim1
local idleAnim2

local Event
	
-- Animations
local idle = Tool.Handle.idle
local moving = Tool.Handle.moving

Tool.Equipped:Connect(function()
  local humanoid = Tool.Parent:FindFirstChildWhichIsA('Humanoid')
  if humanoid then
    idleAnim1 = humanoid:LoadAnimation(idle)
    idleAnim2 = humanoid:LoadAnimation(moving)
    idleAnim1:Play()
		
    Event = humanoid:GetPropertyChangedSignal("MoveDirection"):Connect(function()

      local magnitude = humanoid.MoveDirection.Magnitude

      if magnitude == 0 then
        if idleAnim2 then
          idleAnim2:Stop()
        end
        idleAnim1:Play()
      else
        if idleAnim1 then
          idleAnim1:Stop()
        end
        idleAnim2:Play()
      end
          
    end)
  end
end)

Tool.Unequipped:Connect(function()
  Event:Disconnect()
  if idleAnim1 then idleAnim1:Stop() end
  if idleAnim2 then idleAnim2:Stop() end
end)

まずは前回と同じように、あとで使う変数を用意しておいて、ツールを装備したときに実行する処理から追記していくよ。

humanoid:GetPropertyChangedSignal("MoveDirection"):Connect(function()

なんか長いやつ出てきたけど、「Humanoid」の機能で「Humanoid」のプロパティが変更されるたびに信号を発信してくれる関数を使ってるんだ。どのプロパティかというと「MoveDirection」。

Properties Humanoid

「Humanoid」のPropertiesを見てみると「MoveDirection」ってのが見つかるよ。これはHumanoid(ここではプレイヤー)が移動するとX,Y軸の座標数値が変化するプロパティなんだ。

ようするにこのコードは、「プレイヤーが移動したときの信号をキャッチしたら後続の関数に接続する」っていうことになるね。

後続の処理も見ていこ~。

humanoid.MoveDirection.Magnitude

これはHumanoid(プレイヤー)の移動の大きさだね。それを「magnitude」っていう変数を用意して格納してるよ。

もし移動の大きさが「0」と等しいとき「idle」アニメーションを再生して、「moving」アニメーションを停止。

そうでなければ(else)「moving」アニメーションを再生して、「idle」アニメーションを停止。

なんとなくわかるかな?こまかい書き方のルールは難しく感じるかもしれないけど、少しずつ慣れていけば大丈夫だよ。

最後に装備を外したときの処理に「moving」アニメーションの停止を追記したのと、「Event:Disconnect()」も追加してる。

Event = humanoid:GetPropertyChangedSignal("MoveDirection"):Connect

ここでプレイヤーの移動の信号をキャッチし続けているから、このイベントをあとで切断するために「Event」っていう変数を用意して格納しておいたんだ。装備を外したタイミングで切断してあげよう。これをしないと装備をはずしてるのに「moving」アニメーションだけ適用されてしまうよ。

それじゃあ。実際にテストしてよう。

moving animation

移動していないときは「idle」アニメーション、移動しているときは「moving」アニメーションが適用されていれば成功だよ!

次回は敵と戦うための「斬る」アニメーションを作っていくよ。

それじゃ~またね~。(@^^)/~~~

コメント

タイトルとURLをコピーしました