LoginSignup
0
0

More than 3 years have passed since last update.

20日目:リストバンド型入場券で学ぶスクリプト装着

Posted at

この記事はアドベントカレンダー「【VCI】テーマパーク を作ろう 」の20日目の記事です。

今回の内容

今回は以下のリストバンド型の入場券を自動装着できるようにしていきます

ボタンを押すと出現し、自動的に腕に装着されるようにします。
今回は学ぶ技術は以下となります。
 ・スクリプトでの自動装着

Unity概要

今回はリストバンドを作成しますが、リストバンドを付ける位置(手首よりちょっと肘寄り)と装着可能ボーンな位置が異なっているという課題があります。(装着可能位置は各ボーンの始点であり、今回つけたい位置は肘ボーンと手首ボーンの中間です。)

普通にoffsetでも位置調整はできなくはないとは思いますが、今回は以下のように装着位置調整用オブジェクトを作りそこに装着機能をもたせます。
こうしておくと、スクリプトで位置調整用オブジェクトを動かすことで装着位置を自由に調整できて便利です。
image.png

また、腕輪型の装着VCIを作成する場合は装着対象は「~Hand(手首)」ではなく「~LowerArm(肘)」にしてください。
~Handに設定すると、以下のように手首を動かすと腕から外れてしまいます。

コードの作成

装着VCIのスクリプトの書き方は以下の公式ページを御覧ください。
 ・ExportTransform(ページの下の方に乗っています)
装着するにはAttachToAvatar()を使いますが、その際にアイテムがちゃんと装着可能な位置にある必要があるのでご注意ください。

今回はボタンを押したら装着されるようにしたいと思います。
コードは以下のようになります。

function onUse(use)
  if use == "Button_WristBand_Appear" then
    -- 出現対象とする腕輪を探す。関数はチュロスのときのものとほぼ作りは同じのため省略。
    local wristband   = fetchWristBand()
    -- リストバンドと同じnoの装着用子オブジェクトを取得する.
    if wristband then
      --位置調整用オブジェクトを取得
      local attachItem  = getAttachItem(wristband.GetName()) 
      --装着対象のボーンの位置を取得
      local avatar = vci.studio.GetLocalAvatar()
      local lowerArmBone = avatar.GetBoneTransform("LeftLowerArm")
      local handBone = avatar.GetBoneTransform("LeftHand")

      if lowerArmBone and handBone then
        --リストバンドをいい感じの位置(肘と手首の間の位置)に移動。
        local wristPos = lowerArmBone.position*0.4 + handBone.position*0.6
        wristband.SetPosition(wristPos)
        wristband.SetRotation(lowerArmBone.rotation)

        --装着用の子オブジェクトを肘の位置に移動
        attachItem.SetPosition(lowerArmBone.position)
        --装着させる。
        attachItem.AttachToAvatar()

      end
    end
  end
end

function getAttachItem(wristband)
  local no = string.match( wristband,"WristBand (.+)" )
  if no then
    return vci.assets.GetTransform("WristBand_Attach "..no)
  end
end

実際に動かすと以下のようになります。

終わりに

いかがでしたでしょうか?
今回はただ装着させただけですが、ゆくゆくはこのリストバンドを当てると動く仕掛けなどを作りたいと思います。
次回の内容は未定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0