2020年11月12日

[Unity] VFX(Visual Effect Graph)を勉強する 〜削除やコピー等の基本操作〜

VFX Graphの基本的な操作(削除、コピー、複製、ノード作成、メモなど)についてまとめてみた。
たくさんあるので、自分が使うであろう機能だけに絞った。

詳しい説明はUnityブログの記事をどうぞ。



コンテキスト、ブロック、ノード


VFXエディタを使うときに必ず出てくるこの単語について調べてみた。

・コンテキスト = 「Spawn、Initialize Particle、Update Particle、…」といった、VFXを作る上での大きな要素。
・ブロック = コンテキストの中身を構成する要素。コンテキストは複数のブロックを持つ事が可能。
・ノード = ブロックの入力になる。色々組み合わせることで複雑な事ができる。

20201111_0.png



画面全体を動かす


マウスの中ホイールがあれば、何もないところでホイールを押しながらドラッグする。
※optionキーを押しながらドラッグしても同じことができる
※キー操作の名前はMacを前提にしています



拡大・縮小表示


マウスの中ホイールがあれば、ホイールを回す。



選択


Spawnコンテキストがあるので、

20201111_1.png

マウスを使ってSpawnコンテキストの枠を選択してみる。

20201111_2.png

この状態でコンテキストをドラッグ&ドロップすることでエディタ内で好きな位置に動かすことができる。



削除


コンテキストが選択された状態で右クリックをして、Deleteを選ぶと削除できる。
キー操作(Command + Del)でも削除できる。※ブロック、ノードについても同じ

20201111_3.png

コンテキスト・ブロック・ノードをつなぐ線についても、同様の操作で削除できる。

20201111_4.png



ブロックを無効にする


ブロックを一時的に無効にしたいときは、ブロック右側にあるチェックボックスを

20201111_5.png

オフにする。

20201111_6.png



コンテキストを追加する


コンテキストのインプット/アウトプットのところからドラッグする。

20201111_7.png

ドラッグ後、対応するコンテキストに絞られた検索窓が表示される。
※ドラッグせず、空欄で右クリックからも検索して追加できるけど、選択肢は絞られていない状況になる

20201111_8.png



ブロックを追加する


コンテキストの中で右クリック > Create Block を選ぶ。
または、コンテキスト内にカーソルを持ってきてからスペースキーを押す。

20201111_9.png



ノードを追加する


エディタ内の空欄で右クリック > Create Node を選ぶ。

20201111_10.png

検索窓で追加したいノードを探す。

20201111_11.png

見つけたらノードの名前をクリックすると、ノードが追加される。

20201111_12.png



ノードを接続する


ノードのインプット/アウトプットをマウスドラッグで接続することができる。
※コンテキストどうし、ノードからブロックへの接続も同じ操作

20201111_13.png



コンテキストの名前を変更する


コンテキストの名前(コンテキスト内の上部)をダブルクリックすると

20201111_22.png

名前を変更できる。

20201111_23.png



メモ帳を作る


空欄で右クリック > Create Sticky Note を選ぶ。

20201111_14.png

メモ帳が作成されるので、タイトルと本文を書くことができる。

20201111_15.png

メモ帳の上で右クリックをすると、テーマ(色)や文字サイズを変えることができる。



ノードのグループ化


複数のノードをドラッグで囲って選択。
※SHIFTを押しながら連続で選択するのもOK

20201111_16.png

右クリック > Group Selection を選択すると、グループ化できる。

20201111_17.png

グループ名もつけることができる。

20201111_18.png



グループにノードを追加する


新しくノードを作り、グループ内にドラッグする。

20201111_19.png

グループにノードが追加される。

20201111_20.png



グループからノードを抜く


グループ内から抜きたいノードを選択し、SHIFTを押しながらドラッグする。
※グループの枠だけを削除したい場合は、グループ名を選択して右クリック > Delete。または、Command + Del。
※グループ全体(中身のノードを含めて)削除したい場合は、グループ全体をドラッグで囲ってから右クリック > Delete。または、Command + Del。



グループの位置を変える


グループ名を選択すると、枠が強調表示される。

20201111_21.png

この状態でグループ名をドラッグすると、位置を変えることができる。



ショートカットキー


・Command + Del = 削除
・Command + C = コピー
・Command + D = 複製
・Command + K = カット
・Command + V = ペースト
・A = グラフ全体を表示
・コンテキスト・ブロック・ノードを選択した状態で F = 中央に表示する
・[ or ] = コンテキスト・ブロック・ノード等の選択を切り替える

posted by be-style at 23:00| Comment(0) | Unity

2020年11月09日

[Unity] VFX(Visual Effect Graph)を勉強する 〜Unity2020での導入〜

Unityで格好良いエフェクトを作れるというVFX Graph(Visual Effect Graph)を、VFX Graphの知識ゼロの状態から勉強していく過程を残していきます。



既存のパーティクルとの違いは?


エフェクトと言えば既にパーティクルがあるのですが、違いを調べてみると大きな違いはこんな感じ。

・パーティクル = CPUで実現(モバイルでたくさん描けないけど、どの機種でも表現できる)
・VFX Graph = GPUで実現(モバイルでたくさん描けるけど、機種によって対応していない)
※ググれば詳しい情報がヒットします
※スマホアプリで使うことを前提にしています



なぜVFX Graphか?


対応機種が増えてくるだろうし、これから多用されそうな気がするから。



導入してみる


@Unityをインストール
どうせなら現時点で新しいUnityを使おうということで、Unity2020をインストール。
スクショは「2020.1.12f1」ですが、実際に使っているのは「2020.1.9」。

20201108_1.png

Aプロジェクトを新規作成
将来的には、VFXを愚痴フリーで使いたいので、プロジェクトを新規作成するときは「2D」を選択。

20201108_2.png

BVisual Effect Graphをインストール
Window > Package Manager から、Visual Effect Graph を選んでインストール。
画面右に「Samples」とあるけど、VFXのサンプルをインポートすることが出来た(今回は無視)。

20201108_3.png

C早速VFX Graphを作ってみる
Projectウィンドウで右クリック > Create > Visual Effects > Visual Effect Graph を選択。

20201108_4.png

すると、「New VFX」というオブジェクトができます。

20201108_5.png

「New VFX」オブジェクトをHierarchyウィンドウにドラッグ&ドロップします。

20201108_6.png

すると、SceneウィンドウにVFXが表示されました。

20201108_7.png

DVFX Graphを確認する
Hierarchyウィンドウで「New VFX」を選択すると、Inspectorウィンドウに詳しい情報が表示されます。
その中の「Visual Effect > Edit」ボタンを押します。

20201108_8.png

すると、VFX Graphの中身が確認できるウィンドウが出現します。

20201108_9.png

基本的な使い方は、こちらの動画で紹介されています。




基本の4要素


VFX Graphで重要なのは、軸となる4要素です。
スクショでは上から順に

・Spawn = いくつパーティクルを生み出す
・Initialize Particle = どういう風にパーティクルを生み出す
・Update Particle = パーティクルを動かす
・Output Particle XXXX ※XXXX が何種類かある = パーティクルの見た目

となっています。
次回からは、このVFX Graphの使い方についてもう少し掘り下げていってみます。
posted by be-style at 22:09| Comment(0) | Unity

2020年09月20日

[iOS] Xcode12.0で「building for iOS Simulator, but linking in object file ... for architecture arm64」エラーの対処法

Xcode12.0にバージョンアップして作業していたところ、ビルドが実機では通るのにシミュレーターに切り替えたらエラーになる事があったので解決方法をメモ。

FIrebaseのSDKがひっかかった。
--------------------------------------------
ld: in /Users/[ユーザー名]/[プロジェクト名)/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector(FIRAnalyticsConnector_e321ed8e3db06efc9803f6c008e67a34.o), building for iOS Simulator, but linking in object file (/Users/[ユーザー名]/[プロジェクト名)/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector(FIRAnalyticsConnector_e321ed8e3db06efc9803f6c008e67a34.o)) built for iOS, file '/Users/[ユーザー名]/[プロジェクト名)/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector' for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
--------------------------------------------

TARGET > Build Settings > Excluded Architectures
の Debug と Release のに「Any iOS Simulator SDK > arm64」を追記することで、シミュレーターでもビルドが通った。

スクリーンショット 2020-09-20 12.51.09.png

参考:
https://stackoverflow.com/questions/63607158/xcode-12-building-for-ios-simulator-but-linking-in-object-file-built-for-ios
posted by be-style at 12:59| Comment(0) | iOS

2020年08月14日

[Unity] Unity2019.4のエディタで動くのにAndroidの実機でDynamoDB(AWS Mobile SDK for Unity)が動かないときの対処

Unity2017で作ったアプリをUnity2019で更新した時の話。エディタでは動くのにAndroidの実機でDynamoDBの関数を実行しようとしたら動かないことがあったのでメモ。

OS : macOS Catalina(10.15.4)
使用環境 : Unity2019.4.0f1

事の発端は、DynamoDBの関数を呼ぶところで謎のエラーが出たところから。
------------------------
ArgumentException: Object of type 'System.Object[]' cannot be converted to type 
'UnityEngine.AndroidJavaObject[]'.
at System.RuntimeType.CheckValue (System.Object value, System.Reflection.Binder binder,
System.Globalization.CultureInfo culture, System.Reflection.BindingFlags invokeAttr)
[0x00000] in <00000000000000000000000000000000>:0
at System.Reflection.MonoMethod.ConvertValues (System.Reflection.Binder binder,
System.Object[] args, System.Reflection.ParameterInfo[] pinfo, System.Globalization.CultureInfo
culture, System.Reflection.BindingFlags invokeAttr) [0x00000] in
<00000000000000000000000000000000>:0
------------------------

調べてみたら、AWSの公式プラグインではUnity2019には対応していないらしい。
参考: https://qiita.com/kosuke1113/items/904df92d444804d496c3

できるだけ簡単な対処方法を探していたところ、良いページを発見。
https://lhkmarcus.com/2020/04/05/how-to-use-aws-sdk-in-unity-2019/

このページを参考に、自分がやった事は以下の通り。

@link.xmlを確認。(変更なし)
実際に使ったlink.xmlはこの通り。

------------------------
<linker>
<assembly fullname="UnityEngine">
<type fullname="UnityEngine.Networking.UnityWebRequest" preserve="all" />
<type fullname="UnityEngine.Networking.UploadHandlerRaw" preserve="all" />
<type fullname="UnityEngine.Networking.UploadHandler" preserve="all" />
<type fullname="UnityEngine.Networking.DownloadHandler" preserve="all" />
<type fullname="UnityEngine.Networking.DownloadHandlerBuffer" preserve="all" />
</assembly>
<assembly fullname="mscorlib">
<namespace fullname="System.Security.Cryptography" preserve="all"/>
</assembly>
<assembly fullname="System">
<namespace fullname="System.Security.Cryptography" preserve="all"/>
<namespace fullname="System.ComponentModel" preserve="all" />
</assembly>
<assembly fullname="System.Configuration">
<namespace fullname="System.Configuration" preserve="all" />
</assembly>
<assembly fullname="AWSSDK.Core" preserve="all">
<namespace fullname="Amazon.Util.Internal.PlatformServices" preserve="all"/>
</assembly>
<assembly fullname="AWSSDK.DynamoDBv2" preserve="all"/>
<assembly fullname="AWSSDK.CognitoIdentity" preserve="all"/>
<assembly fullname="AWSSDK.CognitoIdentityProvider" preserve="all"/>
<assembly fullname="AWSSDK.SecurityToken" preserve="all"/>
</linker>
------------------------

AAWS for Unityのプラグインをダウンロード&インポート。
ダウンロード元: ※2020年8月13日現在 = aws-sdk-unity_3.3.796.0
https://docs.aws.amazon.com/ja_jp/mobile/sdkforunity/developerguide/setup-unity.html

zipファイルを解凍すると、各サービス用のUnityパッケージがあるので、その中の
「AWSSDK.DynamoDBv2.3.3.106.45.unitypackage」
をWクリックして、Unityプロジェクトにインポートする。

BAssets/Plugins/Android/AndroidManifest.xml を修正。
------------------------
<activity android:name="com.unity3d.player.UnityPlayerNativeActivity"
android:label="@string/app_name">
 ↓赤い箇所を削除
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:label="@string/app_name">
------------------------

CUnity2019用に修正されたSDKをダウンロード&解凍して、既存ライブラリを上書き。
このページにある「3.Download the fixed SDK here」から、Unity2019用に修正されたSDKをダウンロードする。
解凍すると、各サービス用にUnityパッケージがあるので、必要な分を選んで上書きする。
自分の場合は、link.xmlに記載されてあったサービスのを選んだ。

001.png

上書きされるのは、Unityプロジェクト内のAssets/AWSSDK にあるライブラリ。

002.png

これでビルドして実行したら、Androidの実機で無事DynamoDBが動作した!
本当にありがたい。

こうなるとUnity2020は、怖くて使えないなー。
posted by be-style at 00:45| Comment(0) | Unity

2020年08月12日

[Unity] Androidプラグインにおける依存関係の解決と重複クラスの解消方法

------ 後日談 ------
ビルドエラーはなくなったものの、AdMob広告が表示されなかったりGooglePlayServiceが動かなかったり、問題は残っています。
本ページの内容が何かしらのヒントになれば幸いです。
---------------------

UnityのAndroid用ビルドするとき、いつもプラグインにおける依存関係で問題があったりクラス宣言が重複したりとかで困っていたので、対処方法をメモ。


AdMobのプラグイン(2020年8月11日現在 v5.3.0)
https://github.com/googleads/googleads-mobile-unity/releases/tag/v5.3.0

Google Play Serviceのプラグイン(2020年8月11日現在 v0.10.09)
https://github.com/playgameservices/play-games-plugin-for-unity/releases

まずはビルドのエラーメッセージ。

001.png

Google Play Serviceにおけるクラス宣言の重複があるというエラー(たくさん表示される中から一部を抜粋)
---------------------------------------------
Duplicate class com.google.android.gms.common.data.DataBufferObserver found in modules classes.jar (:com.google.android.gms.play-services-base-17.1.0:) and classes.jar (:play-services-base-9.4.0:)
---------------------------------------------

これからUnityの機能を使って依存関係を解決するんだけど、ビルド時に自動でjarファイルを追加されないように設定しておく。

Assets > External Dependency Manager > Android Resolver > Settings

002.png

上から3つ目の「Enable Resolution On Build」のチェックを外す。そうしないと、この後の操作で消したはずのjarファイルがビルド時に復活してビルドエラーになる。

003.png

準備ができたところで、Project内を確認してみると、Assets > Plugins の中にたくさんのjarファイルがあって、この中のいくつかでクラス宣言が重複していたりするらしい。

004.png

なので、依存関係を解決してみる。
Assets > External Dependency Manager > Android Resolver > Resolve

005.png

うまくいくとこんなメッセージが表示される。

006.png

この状態でビルドしてもエラーになる。
なので、依存関係を解決したjarファイル(ライブラリ)を削除する。
Assets > External Dependency Manager > Android Resolver > Delete resolved Libraries

007.png

すると、たくさんあったプロジェクト内のjarファイルのいくつかが削除された。

008.png

これで終わったと思いきや、まだビルドエラーが出る。
今度はAdMobにおけるクラス宣言の重複らしい。

---------------------------------------------
Duplicate class com.google.unity.ads.RewardBasedVideo$2 found in modules classes.jar (:googlemobileads-unity:) and unity-plugin-library.jar (unity-plugin-library.jar)
---------------------------------------------

プロジェクトで、エラーメッセージにあった「googlemobileads-unity」で検索をかけてみると、Inspector画面の「Select platforms for plugin」にてAndroidにチェックが入っていたので、このライブラリではAndroid用に使用しないようにチェックを外し、Applyを押して更新する。

これでビルドが通った。
Unityってこんなに便利になってたんだ、と驚きました。
posted by be-style at 16:09| Comment(0) | Unity