YAMADA TAISHI’s diary

ゲームについてとか私の日記とか。このブログのあらゆるコードは好きにどうぞ。利用規約があるものは記事内のGitHubのRepositoryのリンクで貼られていると思うので、そちらを参照ください。

【Unity】GameObjectがActiveの場合にSetActiveした時の負荷は?

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / X )です。
この間、仕事中にUnityでGameObjectがActiveの場合にSetActiveをしてしまうコードを書いてしまっていました。
そこで、プルリクにて負荷をできるだけ減らしたいので辞めて欲しいと言われました。
実際のところ負荷はどの程度なのか気になったので、今回は負荷検証をしていきたいと思います。

目次


前提


Unity2022.3.7f1にて検証
DeepProfileをつけた状態で
1万個キューブを作成しかかる時間を測定しました。

結論


まず、ぐだぐだと書くのもなんなのでまずは結論を書いておきます。
フラグを立てて自前で処理する場合は確かに自身に対する処理速度は早くなる可能性があるが
結局ifの処理を挟むということはチェックが必ず必要ということでもあるのでデメリットも有る。
とはいえ、ActiveToActiveはぶっちゃけ気にする程度の処理負荷は出ない。
というのが私の見解です。

具体的にどのような負荷検証をしたのか


以下のようなシーンを用意。

スポーンするキューブはこれ。

スポーンするオブジェクトにアタッチされたコンポーネントはこれ。

Canvasに以下のようなスクリプトをアタッチ

using System.Collections.Generic;
using UnityEngine;

public class ActivateScript : MonoBehaviour
{
    [SerializeField] private GameObject cube;

    private List<GameObject> objects = new ();
    
    // Start is called before the first frame update
    void Start()
    {
        for (int i = 0; i < 10000; i++)
        {
            objects.Add(Instantiate(cube));
        }
    }

    public void SetActivate()
    {
        System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
        sw.Start();
        foreach (var item in objects)
        {
            item.SetActive(true);
        }
        sw.Stop();
        Debug.Log(sw.Elapsed);
    }

    public void SetDeactivate()
    {
        System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
        sw.Start();
        foreach (var item in objects)
        {
            item.SetActive(false);
        }
        sw.Stop();
        Debug.Log(sw.Elapsed);
    }
}

スポーンするオブジェクトにはこのようなコードをアタッチ

using UnityEngine;

public class Test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("Start");
    }

    private void OnEnable()
    {
        Debug.Log("OnEnable");
    }

    private void OnDisable()
    {
        Debug.Log("OnDisable");
    }

動作確認


まずは動作確認がてら、全オブジェクトをアクティブ、非アクティブを切り替えてみる。

まずはアクティブ状態化から非アクティブ化
OnEnableでのログも走るし、普通に負荷があると思われる。

まぁ1秒以上かかる

ちなみに1000ミリ秒1秒なので、60fpsで動作させるためには約16ms以内に終わらす必要がある。

非アクティブ状態からアクティブ化

こちらも結構な時間がかかる。

いざ検証。


Deep ProfileをOnにした状態で、エディタの検証をしてみる。

Active To Active

確かに負荷がかかる。
1万個のオブジェクトを切り替えて約6msだろうか。

(ちなみにOnEnableは走らなかった)

Diaciteve To Deactive

なぜかDivacitiveの方がかかる6ms~7ms

実際にDeepProflie上はどうなのかと見てみると0.4msとすごく少ない時間になっている。

どうやらDeepProflie起動中はStopwatchでは純粋な時間を測れるわけでは無いようだ。

(ちなみにOnDisableは走らなかった)

疑問1. エディタ上では遅いだけで、実機ビルドでは遅くないのでは説


他の方の記事を見たが、実機の速度は測られていない。
Unityはビルド時に最適化されGCが走らなくなる処理などがある。
例えばGetComponentなどがそうだ。

これもそうなのではないかという疑問が湧いてきた。

実際にDevelopmentBuildでProfile有りでの検証を行った。

すると

ActiveToActive

かなり速度が違う!!
やはり、実機のほうが処理時間が大幅に早い。

2msほどになった。
先程は6msだったので大きな差だ。

Diaciteve To Deactive

疑問2.activeSelfで事前チェックをすると早くなるのか?


            if (!item.activeSelf)
            {
                item.SetActive(true);
            }

などと書いてみてチェックをしてみた。

私の予想ではエディタ上では書いたほうが早いがデベロップメントビルドは変わらない説

なぜか遅くなった

どうやら調べてみると

object.wbarrier_conc()

という処理に時間がかかっている。

どうやらこの処理はメモリ監視の処理らしい。
DeepProfileをつけた状態ではメモリ監視の処理が余分に入ってこっちのほうが遅くなってしまうようだ。
DeepProfileを上ではソレ以外の明示的に処理が減っているように見えたので、少しは早くなっているかもしれないが、
そもそもactiveSelfにアクセスする前のインスタンスへのアクセス処理が見受けられた。
これならば自身でBoolフラグを作ったほうがGameObjectに対するアクセスをせずに済むので若干activeSelfをみるよりは早いかもしれない。

ちなみに実機の方で見てみたが、activeSelfなしと大した処理の差は見受けられなかった。

疑問3.10個子供を持つキューブを1000個作った場合は1万個キューブを切り替えるときとどっちが負荷があるのか


私の予測では命令処理は減るはずだから軽くなるはずだが……?

正解。

アクティブ化、非アクティブ化どちらもステートが変更済みの場合は命令処理が減るので早くなるようだ。

疑問4. 3D Objectではなく、2D上のObjectだとどうか?


Canvas上のオブジェクトは再描画処理が走ってしまうなどはあるのか?
気になった。

→特に無かった。

若干キューブと比べて処理速度は違ったが、誤差の範囲に思えた。

Canvas自体の方を切り替えても同じだった。(インスタンス化自体が重かったが……)

まとめ


最初の結論に戻るが
フラグを立てて自前で処理する場合は確かに自身に対する処理速度は早くなる可能性があるが
結局ifの処理を挟むということはチェックが必ず必要ということでもあるのでデメリットも有る。
とはいえ、ActiveToActiveはぶっちゃけ気にする程度の処理負荷は出ない。

1万個のオブジェクトを操作するなら気をつける必要性はあるかもしれないが、
そこまで行くとECSとJobSystemなどを使うことになるだろうと思うので
ぶっちゃけUnityではActiveToActiveは気になる処理負荷にはならないというのが私の結論となった。

【Unity】アセットFinalIKって結局何ができるの?

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
むかーしにFinalIKというアセットを買ったのですが、ずっと積んでいたので今回はアセット紹介です。

目次


そもそもFinalIKってどんな商品?


assetstore.unity.com

いい感じのIKです。
IKとはInverse kinematicsの略です。
無理やり日本語で表すと逆運動学です。
まぁ3Dモデリングにおいては3DCGキャラクターを動かすためのスケルトン構造を制御する方法の1つ程度の理解でOKです。

ジョイントの位置に対して自動的に角度とかを決定してくれるもの程度に理解しておいてもらえればと思います。

で、その中でUnityのFinalIKとはかつてUnity界隈では様々なVRのアセット戦争がありました。
それぞれの開発者が独自のIKを作りました。
ソレもそのはずでUnityでVRの開発が簡単でしたOculusのDK(デベロッパーキット)を買うとUnityのProライセンスが一緒についてくると言った時代もあったようです。
また、Kinectの開発も行いやすく、人のトラッキングVR、ARにおいて無くてはならないのがIKなのです。

VR黎明期、様々なIKがあったなか生き残ったのがFinalIKというわけです。
もちろん各用途に応じて近年は開発をしている会社も今は少なくないと思います。

とはいえ、このFinalIK、VRIK以外にも機能が入っています。
今回は簡単に一緒に中身を見ていきましょう。

全部で16種類の機能


基礎的なIKは数種類だとは思うのですが、
そこから実際の実装例としてDemoが13種類ほどあります。
(Demoがないコンポーネントもある)

1. Aim IK


AimIKソルバーは、CCDアルゴリズムの変更であり、階層の骨を回転させて、その階層の子Transformがターゲットを目指すようにするらしい……。

言葉じゃ分かりづらいのでgifです。

↓こういう銃のDEMOもあります

2. Biped IK


標準的な二足キャラクター向けのIKシステムで、Unityの組み込みキャラクターIKセットアップの動作を複製し、強化するように設計されています。
とあります。

よくわかりませんが、要はアニメーターで変なアニメーション例えば首の骨が折れたようなアニメーションが出来ないように補助してくれるもののようです。

まぁこれはUnity標準のAnimatiorIKも進化してきているので目立った機能には見えないですね。

3. CCD IK


よくわからないですが、紐みたいなIKですね?

DDCとはCyclic-Coordinate-Descent
階層構造の各関節を一つずつ動かし、目標に向かってエフェクタ(アームの先端部分)を動かす方法らしい。

ロボットとか動かすのに向いてそう

www.youtube.com

4. FABRIK


CCDIKと似ています。

どうやらFABRIKとCCDIKはどちらも多関節アームで
違いはBoneの計算方法が違うらしいです。

FABRIKの方が良さそう?

qiita.com

5. FABRIK Root


FABRIK をつなぐ機能みたいです。

6. Full Body Biped IK(FBBIK)


日本語訳すると全身二足歩行IKという名前……

ヒューマノイドキャラクターの全身をIKで制御するためのコンポーネントらしい。
ヒューマノイドをFKではなくIK制御するためのコンポーネント程度の理解で良さそう。

7. Limb IK


リムIK。
連結された2本の骨の先端位置が与えられた目標位置に到達するように、2本それぞれの骨の姿勢を同時に決定するIK処理。

8. Trigonometric IK


余弦の法則に基づいて 3 セグメントのボーン階層を解決する最も基本的な IK ソルバー。
超基礎的なIK処理が基礎的な挙動だからか、Demoすらない。

9. Interaction System


FullBodyBipedIKで作られていることを前提に、
インタラクション、もとい相互作用的に色々できる様になるコンポーネントらしいです。

主にドアノブを掴むとかボタンを押すとかものを持つとか。

10. Grounder


俗に言うFootIK。
犬とかロボとか人間とか関係なくできるっぽい。

11. Rotation Limits


回転制限をつけるものみたいです。
肘など関節が反対方向に曲がってしまう問題などの対処に使えそうです。

12.Baker


モーションキャプチャなどアニメーション クリップの内容を記録してくれる。

youtu.be

13. VRIK


VR アバターのアニメーション化専用の高速全身ソルバーです。

まぁ英語だけどこの記事見るのが早そう。

root-motion.com

14. Look At IK


任意のキャラクタまたは他のボーン階層で使用して、ボーンのセットを回転してターゲットに面することができる。
いわゆる任意のボーンをターゲットの方向に向かせるようにする機能。

キャラクターがカメラの方向に顔を傾けてたりしてくれるやつ。

15. Arm IK


VRIK の 4 関節二足歩行アーム ソルバーのラッパー コンポーネントらしい
腕の動き自体を制御するもの。
ドアノブを掴むとか。
Interaction Systemと似てる部分もあるがInteraction Systemは総括的なシステム。

16. LegIK


VRIK の 4 関節二足歩行ソルバーのラッパー コンポーネントらしい
FootIKといえばGrounderにも使われてそうだが、多分Grounderは設置判定に対する総括的な機能で、LegIKは足だけの機能。

おわり


意外と拡張性が高く、開発者として勉強になるアセットです。
ここでIKの作り方について理解できれば、今後別のゲームエンジンでも利用可能だと思うので一度参考に買ってみるのも有りなアセットだと思いました。

以上、やまだたいしでした。

【備忘録】(Unity)gitからPackageManagerへの追加方法

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
Unityへパッケージを追加する時、GitURLで追加することがあります。
度々書き方を忘れるので備忘録用に記事化します。

目次


GitURLによる追加する意義


パッケージは直接UnityPackageなどでも追加出来るが、Githubなどで運用されているものは、
gitから落とせるようにしておくことで、バージョン管理がしやすくなる。

Packagesで入れると要らないファイルが残ってしまったりすることもあるので、gitで管理したい所。

package.jsonに追加しない場合はココからの追加になる。

基本ルール


2つの指定は必須

  • GitのURLまたはSSHでの接続URLの指定
  • pakcage.jsonが格納してあるフォルダまでのパス指定

(もちろんpakcage.jsonがない場合や特殊なアセットはそのgitのReadmeにかかれていることが多いと思うのでソチラに従ってほしい)

GitのURLまたはSSHでの接続URLの指定

https://~~~.git

or

git@~~~.git

ちなみにUnityはhttps推奨

pakcage.jsonが格納してあるフォルダまでのパス指定

(gitのリポジトリ頭からの相対パス)

?path=/Assets/~~~

合わせるとこんな感じ

https://~~~.git?path=/Assets/~~~

プライベートリポジトリへのアクセス

(githubの場合)

https://your token:x-oauth-basic@github.com/

ブランチへのアクセス

https://~~~.git?path=/Assets~~~#my-branch

tagの指定

(ブランチと書き方は一緒)

https://~~~.git?path=/Assets~~~#my-branch

参考


docs.unity3d.com

まとめ


以上です。
unitypackage配布してるからってソレに頼り切りになって入れ替え時に
面倒だったので、極力git管理したものを使いたい。

【Unity】GitLabCIでAndroidBuildがうまくいかない不具合の解消

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
不具合にぶつかったので共有する。

目次


前提条件


Unity 2021.3.15f1前提。
私の使用環境は
- Gitlab Runner - Windows 11

不具合の焼成


以下のようなエラーメッセージが表示され、ビルドが失敗する。

Running Gradle task 'assembleRelease'... FAILURE: Build failed with an exception. What went wrong: Execution failed for task ':app:mergeReleaseResources'.

このメッセージは特定のリソースが見つからないというもので、
通常ならGradleからリソースが適切に参照されていないため、Gradleの修正で解決できるはずです。

しかし、今回私が報告する不具合は、バッチファイルやGUIからのビルドが問題なく行える状況で、
GitlabからCIを実行した際にのみ発生する場合の話です。

一旦、GUI上などからBuildしてみた場合に同様の不具合が発生する場合は今回の対策は対象外になるので注意。

GitlabからCIを回したときにのみにだけ発生。
エラーメッセージは、Firebaseにて追加される.aarファイルが見つからない旨の表示がされる。

原因


私も完全には確認できていないのですが、
GitlabCIのユーザー権限レベルが低いか、
または、Gitllabにて環境変数が上書きされてしまい
の結果、Gradleからの.aarファイルへのパスが変更されてしまうと考えられそうだ。

↓Unityのフォーラムにて見つけた同様の不具合。
forum.unity.com

解決策


私の場合は、BatchModeでの実行をやめることで問題を解決。
もう少しまともな解決策を検討するなら、
環境変数まわりで何が上書きされているかの調査や

より深堀りするには、どの環境変数が上書きされているかの調査や、
ユーザー権限レベルがどのように設定されているかを確認する必要がありそうです。

UnityのAndroidプロジェクトは一旦Gradleプロジェクトにエクスポート出来るので
一旦エクスポートしてしまって、更にGradleのBuildをCI側からする方法なども検討出来るかも知れない。

まとめ


以上です。
(更新してなかったので久々のブログ更新)

ちなみに


Unity2021.3.15では次のパスに.gradleという名前でGradleプロジェクトの中間ファイルが生成されるようです。
(他バージョンでは異なる場合があるのでバージョンが違うなら要確認)

Library\Bee\Android\Prj\IL2CPP\Gradle

GRADLE_USER_HOMEをその.gradleに指定してみたりもしたが、
何らかの理由でデッドロックしてしまいBuildが終わらなくなった。
少なくとも単純にGRADLE_USER_HOMEの指定で問題は解決しなさそうだ。

ゲーム"プログラマー"でもエフェクトが作りたい

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
私はゲームプログラマーですが、ゲームを作る上でエフェクトを作りたいと思うことが多々あります。
なぜかというと、演出などを組み込んでいく中、エフェクトがあることで印象が大きく変わることを実感するからです。
しかし、基本的にプログラマーはデザイナーのエフェクトを組み込むだけ。
もう少し自分で作れれば魅力的に出来るのではないかと思ったから今回プログラマー目線で作成してみることにしました。

目次


そもそもここでいうエフェクトとは……?


今回は2Dエフェクトではなく3D VFXで尚且つ、ゲームで使えるものを表します。
ゲームで使えるものなので、ハイポリゴンのシネマティックなエフェクトは含めません。
できればスマホでも使えるような低負荷な物が作れると良いなと思っています。
スマホ向けであれば今はUnityが一番強い&Unityを普段遣いしているのでUnity想定で語ります。

普通エフェクトはどう作るのか?


ゲームのエフェクトは通常Houdini + After Effects + ゲームエンジンのパーティクル機能などで作ります。

3Dメッシュを作りそこにテクスチャを張ってアニメーションさせ、大量に出すことで基本的には成立します。

ツールはそれぞれ
・Houdiniは3Dメッシュの作成
After Effects(以下AE)はメッシュに貼り付けるアニメーションテクスチャやパーティクルエフェクトテクスチャの作成(Houdini上で完結することもある)
ゲームエンジンのバーティクル機能はそれらの表示や挙動の制御
に使います

またこれらを全部やってくれるミドルウェアツールなどもあります。
PopconrnFXやSPARK GEAR、BISHAMON、Effekseerなどなど……。

ツールが高い


ツールが高いです。
学生なら安く使える場合もありますが、私は社会人……
商用として使うならHoudiniはインディライセンスでも年間約3万円
AEは28,776円/年です。

高いッ……!

ミドルウェアツールはどうでしょうか、
PopconrnFX→月約3,594円
SPARK GEAR→法人向けなので個人で買える価格ではないです……。100万
BISHAMON→パーソナルライセンス¥60,000買い切りなのは良心的だが安くはない
Effekseer→無料……!だが、チョットローポリすぎでエフェクトのセンスが古いかも……?工夫次第でなんとかなる?

Effekseer以外は高いッ……!

代替ツール


Houdini の代替ツールはBlenderです。
しかし、Houdiniのようにプロシージャルにモデリングするのは難しいです。
対応するアドオンなどもあるのですが、Blenderが処理負荷に耐えきれずにすぐに落ちてしまうので同じようには使えません。

似たようなエフェクトだけど若干違うエフェクトを作るときにはHoudiniでの作成は重宝します。
Blenderで作る場合はいちいち作る必要があるので大変ですが代替出来なくはないという感じです。

AEの代替ツールは無いです。
しかし、基本的にエフェクトというのはShaderで作成可能な場合が多いです。
というのもエフェクトの表現はノイズベースの表現が多いからです。
我々はプログラマーですのでShaderの書き方を覚えてみるのは良いかも知れません。
UnityならばShaderGraphがありノイズ生成のプログラムも簡単です。

Shaderで書ければ表現出来ますが私個人としてはできればAEは欲しいです。
というのもノイズ生成の処理は正直Shaderとしては軽い処理ではありません。
ですので、どちらかというと連番テクスチャ、テクスチャでのアニメーションで処理してしまえるならソチラが理想ではあります……。

Effekseerを使ってみる


EffekseerはBISHAMONに影響を受けたツール。
OSSで無料で使用可能だ。

effekseer.github.io

私も少し触ってみたが、ぶっちゃけUnityのパーティクルシステム機能に毛が生えた程度に感じた。
3Dモデルも殆ど自前で用意するしかなくちょっと微妙に感じた。
使い込めばちゃんと使えそうだが、正直、サンプルが古いゲームのようでダサいものが多い。

UnityのVFXGraphを使ったほうが良いかもしれない。

NovaShaderを使ってみる


実はサイバーエージェントがUnity用にエフェクトに特化したShaderを公開している。
その名はNovaShader。

developers.cyberagent.co.jp

Unityのパーティクルシステムに特化したシェーダー。
ちょっとしたものならこれで良いかもしれない。

何はともあれ作ってみる……。


とりあえず、色々ツールを調べた所でまずは作ってみることにする。
正直、作ってみないとわからないことが多すぎる。
今回はまずは剣撃エフェクト(Sword Slash Effect)を作成することに。

1.3Dモデルの用意


3Dを用意する。
我々はプログラマーである。
3Dモデラーではない。
頑張って1時間使って3Dモデル作るのもいいとは思うが、
時給換算すると1000円を超える。

3Dエフェクトのモデルはかなり汎用性があり、使い回しが効く。
今回はコチラの3Dモデルを購入させて戴くことにした。

booth.pm

2.テクスチャの用意


多分今回はShaderを使うので必要ない……はず。

3.実際に作ってみる


今回はVFX Graphを触ってみようと思う。
URPで2021.3.15f1を利用する。

まず、VFXGraphをパッケージマネージャーより入れる。

Assetウィンドウより右クリック、Create→Visual Effect→Visual Effect Graph

そうすると新しくエフェクトが作れられる。

ついでに、シェーダーグラフを使えるように設定もイジっておく。
Edit→Prefarences→VisualEffect→Improved Shader Graph Generation

4.なんかいい感じに


正直、現状どれを見ればいいと言うような、まとまった資料はあまりないようです。
私が参考にした資料を貼っておこうと思います。
(細かく解説しようかと思いましたが、チョット面倒でした)

UnityJapanとかの動画
learning.unity3d.jp

Unityのエフェクトの作り方を紹介しているYoutubeチャンネル
www.youtube.com

公式のプリファレンス
docs.unity3d.com

公式サンプル
blog.unity.com

↓炎のShaderはコチラを参考にしました(ちょい無駄処理があるので修正しましたが……)
www.youtube.com

正直UnityJapanの高橋 啓治郎さんの動画さえ見てれば簡単なものは作れる。
後はShaderGraphと同じ感覚で作れる部分が多い。
(動画はみるのに時間がかかるのが玉に瑕か……?)

ちなみに私が作ったエフェクト↓

もっと苦戦するかと思っていましたが意外とすんなり組むことが出来ました。
(強いて言うならCurvesを編集するときにEnterを押すと直で値が入力できると知らなくて途中まで苦戦していたぐらい)
VFX Graphは意外とプログラマーライクでプログラマーShuriken(パーティクルエフェクト)よりコチラのほうが作りやすいかも知れません。

まとめ


ゲームでエフェクトを作るのは大変ですが、最近はゲームエンジン側の機能も充実化しているのを肌で感じることが出来ました。
正直Effekseerも触ったことがあったのですが、今ならVFX Graphを直接触ったほうが早いかも知れません。
UnityにかぎらずUEでもNiagaraというものが使えます。
今後はVFXツールを使わなくて済むようになってきそうですね。
また、UnityではSubGraphというものがあり処理を流用できます。
テンプレートなGraphを揃えておけば今後のゲーム制作に役立つかも知れませんね。

以上、やまだたいしでした。

TextMeshProで特定の端末で■になってしまう不具合の対応

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
TextMeshProの設定をしていたのですが
■表示になってしまう不具合があったので、今回はその時の知見を共有したいと思い記事化しました。

目次


TextMeshProで■になる


塗りつぶされた四角になる場合はFontAtlasサイズが描画解像度に対して大きすぎる場合に■で表示されてしまうようです。

↓を変えればOK

どうしても多くの文字をベイクしたいときもあるので、もしかしたらマルチテクスチャ設定をすればいけるかも知れませんが
基本的には使用文字を減らしたり、DynamicFontなどを使いながら対応するしかなさそうです……。

その他


□のように表示されてしまう場合は、Font参照自体がうまく言ってないと思われますので別原因です。
テスクチャサイズを超えている、そもそも参照する文字がFontに組み込まれていないなどなど。

BlenderとUnityの3Dモデルの状態を同期してくれるMeshSyncを触ってみる

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
今回はMeshSyncツールの備忘録です。
短い記事になってしまったので、ずっと公開していないでアーカイブしていたのですが、勿体ないかなぁと思い公開しました。

目次


MeshSync?


MeshSyncとはUnity公式が作っているMayaやBlenderなどDCCツールとUnityを連携させる機能です!

これを使うことによって毎回モデルをインポートしなおす必要がなくUnity上で動作確認が出来ます。
VRChatterも嬉しいね!

しかも、日本語の説明もある。

docs.unity3d.com

環境


Blender3.0.0
URP環境
Unity側のプラグインは0.12.6-previewを利用
(0.12.0ではなくて0.12.6を使う理由としてはURP対応してるため)
github.com
docs.unity3d.com

Blender側は0.12.0-preview
github.com
(0.16.2でも挙動確認済み)

Unityバージョンは2021.2.17f
(2021.3.15でも確認済み)
Windows 10
(Windows 11でも確認済み)

Unity側のインストール


Window>Package Manager

  • ボタンをクリック、Add package from git URL…

com.unity.meshsync@0.12.6-preview と記入(com.unity.meshsyncと入力すれば最新版取得できる)

インストールされたか確認

ダウンロードされたら更新マークをクリックして、
InProjectで絞り込んで、検索ウィンドウにMeshなどと入れ
候補に表示されていたらインストールされている。

Blender側のインストール


Unity側でインストールしたら、Unity側のプラグインと一緒にUnityのプロジェクトフォルダにBlenderプラグインもダウンロードされています。(多分)

Unityのプロジェクトフォルダ\Library\PackageCache\com.unity.meshsync.dcc-plugins@0.12.0-preview\Editor\Plugins~\UnityMeshSync_Blender_Windows.zip

(バージョンはインストールしたものを使ってください)
(最近Pythonファイルに変わったっぽいけど手順は一緒のはず……知らんけど)

無理だったら、別途コチラからzipインストール。
github.com

UnityMeshSync_Blender_Windows.zipを解凍しておきます。

アドオンインストールをしていきます。
編集→プリファレンス

アドオン、インストール

そして先程解凍した、UnityMeshSync_Blender_Windowsフォルダ配下の該当Blenderバージョンのzipを選択。 今回はBlendr3.0がないので、一旦前バージョンのもの、blender-3.0.1を選択しておきます。
(ちゃんと動かなかったらBlender側のバージョンを上げたほうが良いかも?ちなみに2.93.7は動きませんでした)

チェックを入れて有効化

使い方

UnityのGameObjectメニューから、MeshSync> Create Serverを選択して、サーバーオブジェクトを作成。
(なかったらUnity開き直す、ダウンロードバージョンの見直しなどを行ってください)

MeshSyncServerがつくられたらシーンを実行。

同じPC上でBlenderを開き、同期したいメッシュを持つプロジェクトを開きます。

[アクティブツールとワークスペースの設定]タブの[MeshSync]パネルにある[AutoSync]ボタンをクリック

シーン上にメッシュが生成されれば成功です。

↓日本語で各パラメータの説明を見たい人はコチラ

docs.unity3d.com


まとめ

Unity上でのアニメーションをさせる場合Unityのアセットでアニメーションさせるツールも有るが、やはりBlenderなどのDCCツールには使い勝手が及ばない部分も非常に多い。
かといって、Unity上でちゃんと上手く動くかインポート作業を何度もするのも問題です。
そういったときにこのMeshSyncはを作るときに便利そうだなーと思いました。マル