目次

棒で突くと勢いよく飛ぶビリヤードの玉を作る

onCollisionEnterを使用した、アイテムをぶつけた時に特定の力で別アイテムを動作させるサンプルです。

サンプルデータ

https://virtualcast.jp/products/3ece71b9b4213bf2e6a3f6552b6653466e764774ab635bc86678192654a4d1b9

チュートリアルビリヤード.zip

手順

オブジェクトが衝突したときの処理になるので「onCollisionEnter」を使用します。

各オブジェクトの設定は次のようになります。
SubItemのGroupIDは0以外で同じ数字にしておきます。
(同じ数字のSubItemはオーナー権が一致し、正しく物理演算が行われる)

GameObjectの「VCI Object」コンポーネントのScriptsのSizeを1に指定し、
Nameに「main.lua」を記入、Sourceに以下スクリプトを記入します。

AddForce(Vector3)はオブジェクトにVector3の力を加えます。

GetUp()でオブジェクトの上向き(ローカルY方向)単位ベクトルを得ることができます。
今回の場合はビリヤードのキューの先端の方向がy方向になっています。

VCIスクリプト

main.lua
function onCollisionEnter(item, hit)
    if (item=="bili_ball" and hit=="bili_q") or (item=="bili_q" and hit=="bili_ball") then
        local bili_ball = vci.assets.GetTransform("bili_ball")
        local bili_q = vci.assets.GetTransform("bili_q")
        bili_ball.AddForce(1000 * bili_q.GetUp())
    end
end