Language:

サイドバー

バーチャルキャスト公式Wiki

メニュー

Steam版

デバイス

アセット

配信

その他

リリース情報

デベロッパー向け


開発環境

GLB

vci:sample:gun:04

[銃VCI④]VCIスクリプトを作成


このページは
[銃VCI]FPS用の銃VCIを作る
解説ページです。


このページでやることを動画で確認

VSCodeの準備

VCIスクリプトを作成することで銃を使ったときに弾を前に飛ばすことが出来るようになります。
VCIスクリプトの開発環境の導入がまだの場合は、VCIスクリプトの開発環境の導入を参考にVSCodeの準備をしてください。
デバックを利用した本格的なスクリプトが不要の方は、準備しなくても構いません。

スクリプト全文

main.lua
--←はコメントアウトで説明を書くときなどに使う。
--アセットの取得
local Gun = vci.assets.GetTransform("Gun")   --UnityのObject名が「Gun」の物を Gun に取得。位置や回転を扱えるようにする。
local Bullet = vci.assets.GetTransform("Bullet")  --UnityのObject名が「Bullet」の物を Bullet に取得。位置や回転を扱えるようにする。
 
--銃をuseした時前方に弾を飛ばす
function onUse(use)
    local GunPos = Gun.GetPosition()          --銃の位置を取得。弾を銃の位置と合わせるのに必要
    local houkou = Gun.GetUp()                --銃の前方を取得。UnityのCylinderの場合、上が銃の前方になるのでGetUp()を使用
                                              --弾を銃の前方に飛ばすのに必要
 
    Bullet.SetPosition(GunPos + houkou*1.5)   --弾の位置を銃の位置(GunPos)から少し前方(houkou*1.5)に設定する。
    Bullet.SetVelocity(Vector3.zero)          --弾のrigitbodyにかかる速度をゼロにする。(1発目に撃った弾の速度を0にしてから力を加えないと挙動がおかしくなるため。)
    Bullet.AddForce(3000*houkou)              --弾に(銃の方向×3000)の力を加える。
                                              --3000の値を大きくすると弾速が速くなり、小さくすると遅くなる。
 
end

使用している関数一覧

手順

1. アセットの取得について

main.lua
--アセットの取得
local Gun = vci.assets.GetTransform("Gun")   --UnityのObject名が「Gun」の物を Gun に取得。位置や回転を扱えるようにする。
local Bullet = vci.assets.GetTransform("Bullet")  --UnityのObject名が「Bullet」の物を Bullet に取得。位置や回転を扱えるよう

Unityで作成したGun(銃本体)とBullet(弾)をスクリプトで制御するために、vci.assets.GetTransformを使用して変数(local Gun でGunという変数を作成している。)に取り出します。
スクリプトではここで指定した変数名を使ってUnityのObjectを操作します。
local 変数名 = vci.assets.GetTransform(“UnityのObject名”)

2. function onUse(use)について

main.lua
function onUse(use)
    --ここにVCIがUseされたときの処理を書く
end

onUseはイベント関数といってシステムによって関数名と関数の挙動が定義されているものです。
他にも触った時、つかんだ時のイベント関数もあります。詳しくはVCIイベント関数を参照してください。

3. 弾を発射するための準備

main.lua
local GunPos = Gun.GetPosition()          --銃の位置を取得。弾を銃の位置と合わせるのに必要
local houkou = Gun.GetUp()                --銃の前方を取得。UnityのCylinderの場合、上が銃の前方になるのでGetUp()を使用
                                          --弾を銃の前方に飛ばすのに必要

弾を飛ばすにはどこからどの方向に飛ばすのかを指定するための情報が必要になります。
今回は銃の位置から、銃を向けている方向に飛ばしたいのでGunPosに銃の位置(Gun.GetPosition())を、houkouに銃が向いている方向(Gun.GetUp())を指定します。

4. 弾を発射する

どこからどの方向にどれだけの速度で発射するかを弾に伝えます。

main.lua
    Bullet.SetPosition(GunPos + houkou*1.5)   --弾の位置を銃の位置(JyuPos)から少し前方(houkou*1.5)に設定する。
    Bullet.SetVelocity(Vector3.zero)          --弾のrigitbodyにかかる速度をゼロにする。(1発目に撃った弾の速度を0にしてから力を加えないと挙動がおかしくなるため。)
    Bullet.AddForce(3000*houkou)              --弾に(銃の方向×3000)の力を加える。
                                              --3000の値を大きくすると弾速が速くなり、小さくすると遅くなる。

Bullet.SetPosition(GunPos)は、弾を手順3で取得した銃の位置に移動する処理です。
ただし、このままだと銃と完全に位置が同じになってしまうので弾が銃に埋まって挙動がおかしくなります。

Bullet.SetPosition(GunPos + houkou*1.5)とすると、銃の位置から銃の方向に少しだけずらした位置に弾を移動することができます。

次にBullet.SetVelocity(Vector3.zero)で弾の速度を0に指定しています。
これをしないとUseする前の速度を引き継いでしまいます。

例えば、連続で弾を発射した場合、2倍、3倍、4倍・・・・と弾の速度がどんどん速くなります。(実際には重力で下方向にかかっている力をリセットできていないので1発目から挙動がおかしくなることがあります。)
Bullet.SetVelocity(Vector3.zero)を実行することで弾に何も力がかかってない状態にします。
これで、弾が銃の前方にきて静止している状態になりました。

次にBullet.AddForce(3000*houkou)で弾を前方に飛ばします。
これは、手順3で銃の向きをhoukouに取得しているので、houkouの向きに3000を掛けた力を弾に与えています。
3000は弾に与える力の大きさと考えて大丈夫です。

この値を大きくすると速い弾を、小さくすると遅い弾を発射します。

これで弾を発射する銃とスクリプトの準備ができました。
次にVCIとしてバーチャルキャストで使えるようにします。

vci/sample/gun/04.txt · 最終更新: 2023/10/04 18:19 by pastatto

ページ用ツール