この記事はアドベントカレンダー「【VCI】テーマパーク を作ろう 」の記事です。
今回の内容
ボタンを押すとどんどん加速し、ボタンから手を離すと止まるようにします。
今回は学ぶ技術は以下となります。
・オブジェクトの正面方向を取得する方法
・オブジェクトに速度を設定する方法
Unity概要
Unityは特に新しい設定はありません。乗る部分とハンドル部分は別々のVCIで作り、Jointでつなげています。
ほかの設定はどうするのがベストわかりませんでしたが、試行錯誤の結果今回は今回は以下のようになりました。
・カートのisGravityをON
・カートのConstraintsのFreezeRotationのx,zをON
・カートのMassを100に変更(こうした方が体などに押されて飛びにくくなるかもと思い設定。実際のところは不明?)
コースは特に何もしてないです。
コードの作成
今回作成する処理には、「オブジェクトの向きを取得」して「その向きにオブジェクトの速度を設定」するという流れとなります。
・ExportTransform
この中でGetForwardとSetVelocityを使用します。
コードは以下のようになります。
local kartSpeed= 0
function updateAll()
local kart = vci.assets.GetTransform("Kart")
kart.SetVelocity(kart.GetForward()*kartSpeed)
end
function onUse(use)
--ボタンを押したら加速する
if use == "Controller_Kart" then
kartSpeed = kartSpeed + 1
end
end
function onUngrab(target)
--ボタンを離したら停止
if target == "Controller_Kart" then
kartSpeed = 0
end
end
実際に動かすと以下のようになります。
ゴーカート追加したので記事書きました!操作性は難ありです!٩( 'ω' )و https://t.co/LK4tAaMnAx pic.twitter.com/paEqs0UAw5
— #らいと(きょろ、ちょべりば→ぐ) (@lightjug) December 28, 2020
補足
今回は移動の方法として速度を設定する方法を取りましたが、他にも以下のような方法があるかと思います
・毎フレーム位置を移動する(SetPositionで移動)
・物体に力を加える(addforceを使用)
それぞれ長所短所が在ると思うので内容に応じて使い分けるといいと思います。(正直私もよくわかってないです)
また、他にも方法があれば教えていただきたいです。
終わりに
いかがでしたでしょうか?
今回はカートという地面に接する物を作りましたが、もちろん空をとぶようなものを作成することも可能だと思います。
(もしかしたらそちらのほうがカートよりも楽かもしれません)
次回は花火を作成予定です。2回に分ける予定です。