6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VirtualCast上にUnityちゃんを表示してアニメーションさせる

Last updated at Posted at 2019-10-16

VirtualCastでは、VR空間上にユーザーが作った3Dオブジェクトを配置し、Luaスクリプトから自由に操作できます。このインタラクティブな3Dオブジェクトを**VCI(Virtual Cast Interactive)**と言います。

VCIのSDKであるUniVCIは、v0.21から複数のアニメーションを再生させる機能が追加されました。この機能を用いて、Unityちゃんの3Dモデルをスクリプトによってアニメーションさせてみます。

VCIの詳細は、こちらをご覧ください。
https://virtualcast.jp/wiki/doku.php

UniVCIは、こちらからダウンロードできます。
https://github.com/virtual-cast/VCI/releases

Unityちゃんの3Dモデルはこちらからダウンロードします。
http://unity-chan.com/

今回はSDユニティちゃん 3Dモデルデータ 1.01を用います。

プロジェクトの作成と準備

必要なファイルは、以下の2つです。

Unityは2018.4.8を使用します。

  1. Unityで新規に3Dプロジェクトを作成してください。

  2. PlayerSettingApi Compatibility Level.NET 4.x にしてください。
    2019091201.png

  3. SD_UnityChan-1.unitypackageUniVCI-0.21.unitypackage をダブルクリックして、プロジェクトに導入してください。

これで準備は完了です。

3Dモデルの準備

Unityちゃんの3DモデルをVirtualCast上で表示させるには、マテリアルとアニメーションの変換が必要になります。

  1. Assets/UnityChan/SD_Unitychan/Models/Materialsにある5つのマテリアルのShaderをVRM/MToonに変更してください。

20190912_02.png

2.Assets/UnityChan/SD_Unitychan/Animations/SD_unitychan_motion_Genericにある、以下のアニメーションクリップを複製し、Legacyのチェックを有効にしてください。

  • Standing@loop
  • Running@loop
  • Salute

それぞれのアニメーションクリップを選択し、Edit/Duplicateで複製し、インスペクタの右上のメニューからDebugモードを選択すると、Legacyプロパティが表示されるので、チェックを入れてください。

手順がよくわからない場合は、こちらのエディタ拡張を使ってください。

AnimationConverter.cs

アニメーションクリップを右クリック→Animations/CopyAnimationClipAsLegacyをクリックすると、Asset以下に、Legacy設定のアニメーションクリップが複製されます。

VCIの作成とエクスポート

変換した3Dモデルを使ってVCIを作成し、VCIファイルとしてエクスポートします。

1: シーンを新規作成し、GameObject/VCI/Plain VCIを選択し、空のVCIオブジェクトを作成してください。

VCIObjectが作成されます。

2: VCIObjectにAssets/UnityChan/SD_unitychan/Prefabs/SD_unitychan_generic.prefabをドラッグアンドドロップしてください。

SceneビューにUnityちゃんが表示されます。

2019-09-13.png

3: Hierarchy上のSD_unitychan_genericを右クリック→Unlock Prefab Completelyを選択し、Prefab化を解除してください。

4: SD_unitychan_genericのInspectorを表示し、アタッチされているComponentを全て外してください。

2019-09-13 (1).png

5: SD_unitychan_genericのGameObject名をUnitychanにリネームしてください

6: UnitychanのGameObjectにAnimationコンポーネントをアタッチして、Inspectorから、AnimationsのSizeを3にして、さきほど複製したアニメーションをStanding@loop、Running@loop、Saluteの順にセットしてください。

7: AnimationのPlay Automaticallyのチェックを外してください。

UnitychanのInspectorは、このような表示になっていればOKです。
2019-09-16.png

8: VCIObjectのInspectorを以下のように設定してください。

TitleAuthorの欄に適当な値を入力してください。

ScriptsSourceに、以下のコードを貼り付けてください。

local subItem = vci.assets.GetSubItem("Unitychan") -- アイテムを取得
local anim = subItem.GetAnimation() -- アニメーションを取得
local currentAnimationId = 0 -- 再生中のアニメーションID
local timer = 0 -- アニメーションを切り替えるためのタイマー

function update() -- UnityのUpdateと同じく毎フレーム実行される
    if timer > 0 then -- タイマーが0より上ならタイマーを減算
        timer = timer - 1
        return
    end

    local axis = vci.me.GetAxisInput() -- キーボードの軸入力を取得
    axis.y = 0 -- y軸の入力は無効化

    if axis == Vector3.zero then -- 軸入力がない時
        SwitchAnimation(0, true) -- アイドルアニメーションを再生
    else -- 軸入力がある時
        local currentPos = subItem.GetLocalPosition() -- 現在位置を取得
        local nextPos = currentPos + axis * 0.05 -- 次の位置を決める
    
        subItem.SetLocalPosition(nextPos) -- 次の位置をセット
    
        local rot = Quaternion.LookRotation(axis, subItem.GetUp()) -- 次の回転を設定
        subItem.SetLocalRotation(rot) -- 次の回転をセット

        SwitchAnimation(1, true) -- 走るアニメーションに切り替える
    end

    if vci.me.GetButtonInput(1) then -- 数値キーの1が押された時
        timer = 70 -- タイマーをセット
        SwitchAnimation(2, false) -- 敬礼のアニメーションを再生
    end
end

function SwitchAnimation(id, loop) -- アニメーションを切り替える
    if currentAnimationId ~= id then -- 再生中のアニメーションを停止
        anim.Stop()
    end
    anim._ALL_PlayFromIndex(id, loop) -- 新しいアニメーションを再生
    currentAnimationId = id -- 再生中のアニメーションIDを更新
end

Model Data License TypeOtherにして、ユニティちゃんライセンスを貼り付けてください。

© Unity Technologies Japan/UCL

参考: http://unity-chan.com/contents/guideline/

Script License Typeの設定は任意です。本記事のサンプルコードは自由に使ってください。

Scriptを実行中に編集したい場合は、Script SettingsScript Write Protectedのチェックを外し、Script Enable Debuggingのチェックを有効にしてください。

VCIObjectのInspectorは、このような表示になっていればOKです。

insp.png

9: VCIObjectのInspector下部にあるExport VCIボタンから、VCIのデータをファイルに出力してください。

expt.png

VCIObject.vciという名前で出力されます。

VCIのアップロード

VCIをVirtualCastで表示させるために、The Seed OnlineにVCIをアップロードします。VirtualCastはThe Seed Onlineから、VCIをダウンロードしてスタジオ上に表示させます。

アップロード方法の詳細は、こちらをご覧ください。
https://virtualcast.jp/wiki/doku.php?id=seed:top

動作確認

VirtualCastを起動して、タイトル画面でThe Seed Onlineと連携を行った後にスタジオに入り、リングUIのカスタムアイテムメニューを表示すると、アップロードしたVCIが表示されます。VCIを選択するとUnityちゃんが表示されます。

res.jpg

このサンプルでは、何もしていないときはアイドルアニメーション、カーソルキーを押すと走るアニメーション、数値の1キーで敬礼のアニメーションが再生されます。VirtualCastのウィンドウが最前面にない場合、キー入力を受け取れないのでご注意ください。

今回作成したVCIは、こちらから取り込めます。
https://seed.online/items/438bebc29aa4a80a09d5555ce162c132bd951891e2dfc98f3c05402b5cca184a

6
1
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
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?