イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

Unity なんか使えそうなパーティクル集

++リーフ

leaf-particle.unitypackage - Google ドライブ

 

++チャージ

スフィアで出して、速度をマイナスに

 

++花形

 

f:id:arumogina:20190313011214p:plain

f:id:arumogina:20190313011229p:plain

f:id:arumogina:20190313011244p:plain

 ++グルグル回る

 

f:id:arumogina:20190311002332p:plain

 

f:id:arumogina:20190311002350p:plain



Unity3D #2017 - How to make particles move in circle - YouTube

Unity パーティクルについて

++パーティクル入門

このあたりの記事が分かりやすかった

Unityのパーティクルシステムの詳細とサンプル | Unityを使った3Dゲームの作り方(かめくめ)

Unityのパーティクルの粒子1つ1つの衝突をスクリプトで検知する | Unityを使った3Dゲームの作り方(かめくめ)

Unityパーティクル初心者の遊び(11) すぐ再現できる電撃エフェクト - LemonteaのUnity部屋

Unity4のパーティクルシステム(Particle)を1日で自在に操るコツ!【後編】 - Unity不定期便

Collision モジュール - Unity マニュアル

 

 サンプル集ー

Unity Particle Pack 5.x - Asset Store

 

パーティクルはUnityのデフォルトのパーティクルのパラメータを一つずつ説明を読みつつ、実際に変更してどのように変化するか試して、大体のパラメータを把握した後に、作り方の書かれてるエフェクトを真似して作っていくのが勉強しやすいのではないかと思う。

アセットストアにあるエフェクトは独自のテクスチャを使ってたり、ほぼアニメーションだったり、多数のパーティクルから構成していたりと初心者がいきなり見ても混乱するので、ある程度慣れてから見るのがいいと思う。

 

++必要がなくてもemitterのburstsで放出するべし

あとでSubEmitterのdeathトリガー等で出したくなった場合、数が多ければ修正が非常に面倒なことになる。なので、必要なくともemitterのburtstsで放出しておくべきである

 

++SubEmitter

パーティクル放出後、各パーティクルからbirth,collision,deathの三種のトリガーで、別のパーティクルを放出することが出来る。

birthは放出と同時に、collisionは衝突時に、deathはパーティクルが消滅したタイミングで放出される。

birthはパーティクルをセットするだけで作用するが、collision,deathはSubEmitterによって放出されるパーティクルのEmittionモジュールにてBurstを設定しておく必要がある

 

++

velocity over lifetimeをlocalで使う場合、simulation spaceをworldにしていても、そのパーティクル・システムの回転方向が放出されるパーティクルに影響されるっぽい

 

++チップス

Unity パーティクルシステム Shuriken 個人的に役に立った小技集

 

 ++パーティクルのサイズ変更

パーティクルの大きさをScaleで調整する【Unity】 - (:3[kanのメモ帳]

scaling modeをlocal か hierarchyにする。hierarchyなら親オブジェクトのサイズの影響を受ける

 

++パーティクルを光らせる

 

Lightsモジュールを使用する

f:id:arumogina:20190310044228p:plain

Lightsモジュールを使ってもイマイチ光らない場合はマテリアルが暗いのだと思われる。StandardAssetsのParticleAfterBaner等を使うといい感じで光る

 =>というか、lightsモジュールって光を放出するだけでパーティクル自体の輝度は変わらないのでは?

 

++collisionをオンにしたとき、パーティクルが途中で消えてしまう場合

当たり判定が大き過ぎるのが原因の可能性。VisualizeBoundsにチェックを入れれば判定を視認出来る。Radius Scaleで判定の範囲を限定

f:id:arumogina:20190312033123p:plain

 

++パーティクルの枠を消す

gizmos=>selection outlineのチェックを外す

Unity パーティクルシステム Shuriken 個人的に役に立った小技集

 

++コリジョン

当たり判定を有効にするにはCollisionモジュールをオンにする。

衝突時にパーティクルを消したければ、ligetime lossを1にする。

別のパーティクルを表示したければ、SubEmitterにCollision設定でパーティクルを設定する。SubEmitterを使う場合、Birth以外の場合はSubEmitterで出すパーティクルをEmision=>Burstsで出す必要がある。

 

f:id:arumogina:20190319110900p:plain

 

++スクリプトから操作する場合

unity パーティクルをスクリプトから弄る場合 - イラスト、モデリング、Unity、VR関連

 

++教訓

Unityのパーティクルはエフェクトであってメッシュと同じように扱うことはできない。例えば、当たり判定では、triggerだと衝突先オブジェクトを取得出来ないなど致命的な欠点などがある

 

Unity アニメーションについてのメモ

+UnityのアニメーションはAnimationClipという形式でアニメーション単体を扱い、それらをAnimationコントローラで管理する。アニメーションの遷移はコントローラ内にA-Clipを設置する必要がある。

 

++赤いボタンを押して、オブジェクトの操作をすると、アニメーションのどっぷシートの白い線にキーフレームが挿入される。

f:id:arumogina:20190310022519p:plain

AddPropertyの下にあるCurvesで数値の変化をグラフとしてみることが出来る。点を右クリックすることでも操作が可能。変化を綺麗に直線・曲線にした場合に有効

f:id:arumogina:20190310022439p:plain

 

Unity blenderのシェイプキーをアニメーションクリップに変換する(vrchat向け)

Blenderでシェイプキーを作成し、fbx形式でunityにインポートし、ヒエラルキーに設置。

インポートしたディレクトリ内にあるメッシュのファイルのSkinedMeshRendererコンポーネント内に、作成したシェイプキーがあることを確認する。

 

f:id:arumogina:20190309063842p:plain

インポートしたオブジェクト全体をコピーする。オリジナルのオブジェクトは非アクティブにしておく。

(コピーをするのはバックアップのため・・・のはず)

プロジェクトウィンドウ内でアニメーションクリップを作成する

f:id:arumogina:20190309064210p:plain

作成したアニメーションクリップをコピーしたオブジェクトのルートディレクトリにアタッチする。

Window=>animationでアニメーションウィンドウを開く。

アニメーションウィンドウ内にある赤いボタンをクリック。

コピーしたオブジェクト内にあるシェイプキーの設定されたメッシュファイルを選択し、SkinedMeshRenderer内のシェイプキーの数値を変更する。すると、アニメーション内に要素が追加される。

f:id:arumogina:20190309065131p:plain

白い線をずらして、アニメーションウィンドウ内のシェイプキーの数値を変更すると、キーフレーム(♢のマーク)が新たに追加される。この二つのキーフレームがシェイプキーの0~100(アニメーションの最初から最後)を表す。

 

プロジェクトウィンドウに戻り、作成したアニメーションクリップを元のオブジェクトのルートディレクトリにアタッチ。

 

++ここからvrchat向け

CustomOverrideEmptyをコピーし、VRC_Avatar_DescriptorのCustomStandingAnimationに設定。CustomOverrideEmpty内の適当な項目にAnimationClipをアタッチ。

これでアップロードすれば、指定した項目に対応した動作をしたとき、Animationが再生される。

 

 

ocurasgo unity上では動いても一部スクリプトがocurasgo上で動かない問題

例えば、gameObject.tagでunity上ではタグ名が変えされるが、ocurasgoで実行した場合、Null(で、なければ空の文字列)が返ってきてしまう。

また、

private Renderer Rend;

Rend = GetComponent<Renderer>();

Rend.material.EnableKeyword("_EMISSION");
Rend.material.SetColor("_EmissionColor",new Color(0,0.7f,2.4f));

というような、エミッションのカラーを変更するようなコードがunity上では動いてもocurus go 上では動かなかったりする。

 

ただ、この問題については解決した。

一つだけでもいいので、オブジェクトのemissionをアクティブにし、black以外の色を設定する

f:id:arumogina:20190303214009p:plain

こうすれば、なぜかSetColorがOculusGo上でも機能するようになった.

このマテリアルを適用したオブジェクトはアンアクティブにしておいてもよい。

 

ocurasgoのゲーム開発で使用したunityのノウハウリスト

++C#の勉強

C# によるプログラミング入門 | ++C++; // 未確認飛行 C

 

++非同期処理・コルーチン・Invokeについて

プロセスとスレッドとタスクの違いを知ってUnity非同期完全理解に近付く - Qiita

Taskを極めろ!async/await完全攻略 - Qiita

MonoBehaviour-Invoke - Unity スクリプトリファレンス

引数が二つ以上あるときは次のように書く

StartCoroutine(TimerDestroy(aaa,bbb));

 

単に一定時間後に非同期で実行したい、という場合はInvokeを使ってもいい。

 

++スクリプトの設計

【Unity 設計の話】初心者がやりがちな設計ミスにマサカリを投げてみる - rn.log

オブジェクト指向設計実践ガイド を読む - arumogina-tech’s blog

 

++当たり判定

・どちらか片方にRigidBodyが必要

・物理演算?を使う場合はisTriggerを互いに外す。この場合、OnCollider___がメソッドとなる

・片方にisTriggerが付いてる場合は範囲判定となり、OnTrigger___がメソッド名となる

 

++接触したオブジェクトの名前を取得する

void OnTriggerEnter(Collider obj){

  obj.gameObject.name;

}

Collider.gameObjectを覚えておく

 

++他のオブジェクトのスクリプトにアクセスする

GameObject.Find("object_name").GetComponent<script_name>();

 

++オブジェクトを発光させる

Renderer Rend;
Rend = GetComponent();
Rend.material.EnableKeyword("_EMISSION");
Rend.material.SetColor("_EmissionColor",new Color(0,0.7f,2.4f));

++オブジェクトの回転

UnityでRotation(Quaternion)をうまく使いたい - お米 is ライス

 

++パーティクル

Unity パーティクルについて - イラスト、モデリング、Unity、VR関連

 

 

++シェイプキーの取り込み

Unity blenderのシェイプキーをアニメーションクリップに変換する(vrchat向け) - イラスト、モデリング、Unity、VR関連

 

++シリアライズフィールド

Unityのスクリプトはpublicかつ変数名に大文字が含まれていればインスペクタから操作できるようになるが、カプセル化の原則破っててオブジェクト指向的に良くないよね、と思ってたら、

  [SerializeField] int maxScore = 100;

のように宣言すれば、publicでなくともインスペクタから操作出来るようになるらしい

Unityの[SerializeField]について色々な疑問に答えてみる - Qiita

変更に強くするため、軽量化のためにもFind,GetComponentは使わずにSerializeFieldを使うべきである。

 Unity開発で気をつけておきたい7つの事 -2015年版- - 渋谷ほととぎす通信

 

注意点として、DontDestoryOnLoadでシングルトンにするスクリプトの場合、DontDestoryLoadしないオブジェクトをシリアライズフィールドで管理すると、シーンを移動した場合、そのオブジェクトが消えてシリアライズフィールドが空になってしまう

 

++回転のアニメーションをスムーズにする

回転のアニメーションを作成したのちに、AddPropertyの下にあるcurvesをクリック。点を右クリックして、Both=>Linerを選択、

これで変化の度合いを変更できる。

f:id:arumogina:20190313083035p:plain

 

++シーン間での変数の共有

http://tsubakit1.hateblo.jp/entry/2015/11/07/024350 

 

++UNET

Unity UNETについてのメモ - イラスト、モデリング、Unity、VR関連

unet の検索結果 - イラスト、モデリング、Unity、VR関連

 

 

++レイキャスト・レイヤーマスク

RayCastその2、衝突するオブジェクトの制限【Unity】 - (:3[kanのメモ帳]

Physics-Raycast - Unity スクリプトリファレンス

 

++DontDestroyOnLoadのシングルトン

【Unity】シングルトンを上手く活用しよう - はなちるのマイノート

windows10 ハードウェア予約済みとなってるメモリ割合が高い場合

windows10において、総量は16GBになってるのに、ハードウェア予約済みの分が8.1GBになっているという例の問題に遭遇した。

システム構成の最大メモリのチェックを外す、方法は効果がなかった。

メモリを一度抜いて再度差したら解決した。

B450M PRO4というマザボを使用してるのだが、これが片側しか爪がついておらず、しかも期待通りのところまで押し込めば自動で爪が立ってくれるわけではないのでちゃんと刺さってるのか分かりずらく、半挿しになっていたようだ。

ちゃんと挿し込まれてると、動く方の爪が何も刺さってない状態の爪と平行線に並ぶので、ずれていたらちゃんと刺さってないと思ったほうがいい。

挿し方のコツだが、動かない方の爪側で、メモリの端をカチリという音がするまで挿し込んだ後に、反対側の動く方の爪側でメモリを押さえつけて、爪を戻す。