====== アイテムを消したり出したりする(scaleの変更) ====== [[https://developer.virtualcast.jp/vci-docs/api/classes/ExportTransform/SetLocalScale.html|SetLocalScale]]を利用した、**SwitchのSubitemをUse**した時に、**Targetが消えたり出たりする**サンプルです。\\ 実際にオブジェクトが消えてるわけではなく、縮小する事で消えてるように見せています。 注意点として、縮小するだけではその場に極小のオブジェクトが残ります。\\ メッシュを完全に見えなくするには、透明のマテリアルに変更したり、縮小と同時に地下や接触不可な場所に位置変更する等といった方法があります。 === サンプルデータ === {{ :vci:sample:transform:subitemhyde.zip |}} ==== コンポーネント設定 ==== {{ :vci:sample:transform:no3:subitemhyde.png?direct }} 基本的に**GrabできるSubitemを2つ作ればOK**ですが、以下ポイントになります。 **GroupIDを0以外の値で揃える**\\ transformを変更する際は、所有権が移った状態で行うのがよいです。\\ GroupIDの仕組みについては を参考にしてください。 **ColliderのIsTriggerを有効にする**\\ 物理的な接触を行わなくなるので、扱いやすくなります。 **rigidbodyのUseGravityを無効にし、IsKinematic有効にする**\\ 自由落下がなくなり、空中に固定されるので扱いやすくなります。 ===== VCIスクリプト ===== ''local _Target = vci.assets.GetTransform("Target")'' \\ Targetという名前のSubitemを検索し、Subitemの情報を _Target という変数に格納します。\\ Targetのsubitemの情報は_Targetにアクセスする事で知る事ができます。 ''_Target.GetLocalScale().x'' \\ Targetのx方向の大きさにアクセスする事ができます。\\ 縮小時(非表示)はこの値が0.001になり、拡大時(表示)はこの値が1になります。\\ なので、この値を比較する事によって、現在拡大されているか、縮小されているかを知る事ができます。 ''local scale = Vector3.%%__%%new(1, 1, 1)''\\ ''_Target.SetLocalScale(scale)''\\ アイテムの大きさはX方向、Y方向、Z方向の3つの値(ベクトル3)を使用します。\\ '' Vector3._new() '' で変更したい大きさを作成し''_Target.SetLocalScale()''で適用します。 実際にアイテムは消滅するわけではないですが、縮小する事によって消えてるように見えます。\\ 問題点としては、接触の判定自体はなくならないという点と、scaleの値が表示・非表示でしか使えなくなるという点です。\\ その他に、ポジションを遠くに動かして消してるおうに見せる方法もあります。\\ 作りたい物によって、scaleを変更するか、positionを変更するか使い分ける事になるでしょう。 -- Target を検索して _Target に格納する local _Target = vci.assets.GetTransform("Target") function onUse(use) -- Useしたアイテムの名前が Switch だった時 if use == "Switch" then -- 小さくなってる場合は大きくする if _Target.GetLocalScale().x < 0.1 then local scale = Vector3.__new(1, 1, 1) _Target.SetLocalScale(scale) end -- 大きくなってる場合は小さくする if _Target.GetLocalScale().x > 0.1 then local scale = Vector3.__new(0.001, 0.001, 0.001) _Target.SetLocalScale(scale) end end end