ProjectTinyを眺めてみる その1

前書き

アドカレ用に書こうと思います。
https://qiita.com/advent-calendar/2020/botti-unityqiita.com



注意点

DOTSなので今後もAPI等が変わる可能性が十分にあります。



環境



プロジェクトを開く

今回はProjectTinySamples/Tiny3Dを開きます。



眺める

プロジェクト自体は風車がくるくる回るだけのようです。
このシーンで用意されているスクリプトは2つあります。

Assets/Scripts/Components/Rotate.cs

回転に必要な要素を持つコンポーネントです。

using UnityEngine;
using Unity.Entities;

namespace Tiny3D
{
    [GenerateAuthoringComponent]
    public struct Rotate : IComponentData
    {
        public float speedX;
        public float speedY;
        public float speedZ;
    }
}
GenerateAuthoringComponent属性

これはGameObjectをEntityに自動で変換してくれるものです。
今までIConvertGameObjectToEntityを継承したクラスを作り、EntityManagerにコンポーネントをセットする必要がありました。

IComponentData

汎用コンポーネントを作るにはこのインターフェイスを継承する必要があります。

Assets/Scripts/Systems/RotationSystem.cs

using System;
using Unity.Burst;
using Unity.Entities;
using Unity.Mathematics;
using Unity.Transforms;
using Unity.Tiny;
using UnityEngine;

namespace Tiny3D
{
    public class RotationSystem : SystemBase
    {
        protected override void OnUpdate()
        {
            float time = (float)Time.ElapsedTime;
            Entities.ForEach((ref Rotate rotate, ref Rotation rotation) =>
            {
                quaternion qx = quaternion.RotateX(time * rotate.speedX);
                quaternion qy = quaternion.RotateY(time * rotate.speedY);
                quaternion qz = quaternion.RotateZ(time * rotate.speedZ);
                rotation.Value = math.normalize(math.mul(qz, math.mul(qy, qx)));
            }).ScheduleParallel();
        }
    }
}
SystemBase

Systemを実装するのに必要なクラスになります。一連のライフサイクルイベントが定義されおり、全てメインスレッドで動作します。

  • OnCreate()
    • GameObjectのAwake関数にあたります。
  • OnStartRunning()
    • GameObjectのOnEnable関数にあたります。
  • OnUpdate()
    • GameObjectのUpdate関数にあたります。
  • OnStopRunning()
    • GameObjectのOnDisable関数にあたります。
  • OnDestroy()
    • GameObjectのOnDestroy関数にあたります。
Entities.ForEach

ラムダ式の引数にコンポーネントを指定すると、含んでいるEntityを取得し処理します。
引数にrefを指定すると書き込み専用、inを指定すると読み取り専用になり、ジョブが最適化されます。
ジョブを実行するのに、Schedule()ScheduleParallel()を使います。前者は1スレッド、後者は複数スレッドでジョブを実行します。
また、Run()を使用すると、メインスレッド上で直ちにジョブが実行します。



最後に

今回は一番シンプルなシーンになっています。ECSの必要最低限の機能を紹介しました。
次回はこのシーンで使われているTiny用の汎用スクリプトを見ていきます。



ProjectTinyを眺めてみる その0

前書き

アドカレ用に書こうと思います。
https://qiita.com/advent-calendar/2020/botti-unityqiita.com



注意点

DOTSなので今後もAPI等が変わる可能性が十分にあります。



環境



準備

ProjectTinyを手に入れる

GitHubにあるProjectTinyをPullします。
github.com



フォルダ構成

  • RuntimeGeometry3D
    • 動的メッシュを作成するサンプル
  • Tiny2D
    • シンプルな2Dサンプル
  • Tiny3D
    • シンプルな3Dサンプル
  • TinyAquarium
  • TinyFactory
    • コードなしのアニメーションのサンプル
  • TinyGems
    • 2Dのゲーム
  • TinyKitchen
    • 高度なオーサリングフローを使用しているゲーム
  • TinyPhysics
    • 入力とPhysicsを組み合わせたサンプル
  • TinyRacing
    • ゲームに必要な機能が揃っているレースゲーム
  • TinySpaceship
    • 2Dのゲーム
  • TinyTime
    • テキスト・スキンメッシュレンダリングとライティングを動的に変更するサンプル



最後に

サンプルがしっかりあるのでDOTSを知るには良さそうでした。

3DVTuberになるためのツールまとめ

前書き

VTuberなりてえ~!!!となって雑にまとめました。
ある程度知っている人向けです。使い方はまとめていません。


[更新履歴]

2020/08/29:VMagicMirrorを追加。
2020/09/01:VMagicMirrorのリンクを追加。


ツールの組み合わせ

VMC

VRMモデルを全身動かしたいだけれあればこれ単体でできる。トラッカーがない場合は足などがIKで動く。

VMC + LIV

VMCで読み込んだモデルをゲーム内に反映させたい場合はこれ。

VMC + EVMC4U + CineSwitcher

VMCで読み込んだモデルをVR空間で物を持たせたりなどのシステムを組みたい場合はこれ。
CineSwitcherがなくても実現できるが、カメラワークが欲しくなるためセットであると良い。

VMC + waidayo

VMCで読み込んだモデルに表情を反映させたい場合はこれ。
ただし、顔認証機能のついたiPhoneiPadが必要。

Luppet + LeapMotion

VRMモデルをバストアップで動かしたい場合はこれ。WebカメラとLeapMotionを使うので頭、目パチ、手、指がトラッキングできる。

VMagicMirror

キーボードの操作やマウス操作がメインならこれ。頭トラッキングリップシンク、簡易ハンドトラッキングができる。Webカメラとマイクがあればすぐ始められるので非常にお手軽。


各ツール説明

OBS

配信ツール。グリーンバックなどで透過できます。割愛。
Open Broadcaster Software | OBS

VMC(VirtualMotionCapture)

VRMを読み込み、VR機器のトラッカーでトラッキングして、自分の動きをモデルに反映してくれる便利ツール。背景色を変えられるのでそのままOBSに流すだけで簡単に使える。
EVMC4Uなど他ツールにVMCの情報を送信するには、有料版を購入するか、GitHubにあるソースコードを自前でビルドする必要がある。
sh-akira.github.io

EVMC4U(EasyVirtualMotionCaptureForUnity)

VMCと連携してトラッキングしたモデルをUnity上に表示できる。コメントに合わせてギミックを出したりとUnity上で動かす必要があるため凝ったことをしたいなら必須。
VMCが情報を送信する必要があるので、VMCは有料版もしくは自前ビルドが必要。
github.com

CineSwitcher

カメラ制御を便利にするUnityのプラグイン。カメラ切り替えや追従を簡単にできる。Youtube Liveのコメントでカメラを切り替えることも可能。
booth.pm

waidayo

表情のキャプチャができるツール。舌、ほっぺ、眉などのブレンドシェイプができる。VMCに対応しており、キャプチャ情報を送ることでVMC上のモデルに反映できる。
ただし、顔認証機能のついたiPhoneもしくはiPadが必要。
github.com

Luppet

WebカメラとLeapMotionでトラッキングしてVRMモデルに反映させるツール。頭、目パチ、手、指のトラッキングができ、バストアップに特化している。
Webカメラ、LeapMotion、Luppetの3つだけなので値段が高くてVR機器に手が出せない人にオススメ。個人だと5000円のライセンスなので、他機材と合わせても2万円前後から始められる。また、顔や指の細かい動きを表現したい人にもオススメ。
luppet.appspot.com

VMagicMirror

Webカメラとマイクがあれば頭トラッキングリップシンクができる。キーボードやマスウを操作すれば手と腕がIKで動くので、トラッカーがない人でもそれっぽく動けるのが特徴。グリーンバッグができるのでそのままOBSに流せる。
booth.pm

LIV

SteamでVR空間にモデルを合成するツール。Webカメラ・キャプチャカードを使うと実写合成、フルトラッキングしたいならViveトラッカーが必要。実写の場合はグリーンバックが必要。
VMCでは仮想Webカメラとして入力することで合成できる。
store.steampowered.com
LIVで合成 · sh-akira/VirtualMotionCapture Wiki · GitHub


最後に

未だにVTuberデビューまでこぎつけてません。


参考文献

LIV - vrapp Wiki*

VSCodeでデバッガに引数を渡す方法(Python) 2020/5現在

前書き

久しぶりにVSCodePythonデバッグをしたく自分のブログを見たら、バージョンが古すぎて参考にならなかったので書き直しました。

引数などの説明は過去の記事を参考にしてください。
eorf.hatenablog.com


環境


手順

1. Runをクリックし、メニューを表示。

2. open a folderをクリック。

3. ワークスペースにしたいフォルダを選択する。

4. Runを押す。

5. create a launch.json fileをクリック。

6. Python File Debug the currently actice Python fileをクリック。

7. launch.jsonが開く。

8. 引数を設定する。

"args": [
    "args1",
    "args2"
]

を追加。
jsonなので上の行の末尾にカンマを忘れないように。

9. 実行して引数が渡ってることを確認する。


最後に

ドキュメントを読まなくても設定できるくらいには簡単でした。

【Unity】2019.3でプロジェクトが開けない問題

前書き

いろいろ試したのでメモ書き。


環境

Unity 2019.3.0f6
 ・Asset Pipeline v2 使用


背景

2018.4から2019.3に移行して作業をしていると、唐突にプロジェクトが開けなくなりました。

プロジェクトを開こうとしてもImportingで止まり、新規プロジェクトを作成しても止まりました。

Libraryフォルダを消したり、プロジェクトファイルを落としなおしたり、Unity 2019.3、Unity Hubを再インストール、ユーザーフォルダに入っているUnityのファイルを全て削除などをしましたが、ダメでした。


解決方法

Assetsフォルダと同階層にadb1.txtを作成し、プロジェクトを開く。

adb1.txtは空のままで大丈夫です。
これだけです・・・。

どうやらImportingが止まるのはAsset Pipeline v2に起因しているそうです。

そして、adb1.txtを置くとコマンドラインで-adb1オプションを付けたのと同じ効果が得られます。


【追記】2/17 Asset Pipeline v2で開く方法

  • 上記の方法でプロジェクトを開く
  • キャッシュサーバーをDisableにする
  • プロジェクトを閉じる
  • adb1.txtを削除
  • 再びプロジェクトを開く

私の環境だとキャッシューサーバーをDisableにすると問題なく開けました。


最後に

お気持ち。


Twitterではてなブログのサムネイルが更新されない問題

前書き

Twitterはてなブログの記事をツイートしたらサムネイルが前にブログのやつで困ってたのでメモ。


解決方法

ここのサイトにジャンプ
cards-dev.twitter.com

CardURLにツイートしたい記事のURLを入れて、Preview cardを押す。

Getting startedにツイート時のプレビューが表示されるので、表示された記事リンクに飛ぶ。

記事に飛んだら、記事のツイートボタンを押す。

これで反映される。


最後に

ツイートしたら違うサムネイルで焦った。


【Unity】Androidビルドでエラー"maxAspectRatio not found"

前書き

お久しぶりです。EFです。
Unityを使ってAndroidビルドしたところ、なぜか怒られたのでメモとして残しておきます。


環境

Unity 2019.3.0f6
 ビルド設定
 ・Minimum API Level - Android7.1 'Nougat' (API Level 25)
 ・Target API Level - Android7.1 'Nougat' (API Level 25)
Oculus Quest
 ・Android version 7.1 (API Level 25)


背景

元々、2018.4.6f1でAndroidビルドできていたものを、2019.3.0f6に移行した時に起きた問題です。
基本的にビルドに関わるところは、何もいじらない状態で行っています。

また、Oculus Questで起きた問題ですが、Androidバージョン7.1 (API Level 25)のデバイスであれば、今回の問題にぶち当たる可能性があります。

続きを読む