gologiusの巣

プログラミングなどの技術メモです。誰かの役に立てるとうれしいです。

【Unity エディタ拡張】 Labelの装飾

サイズと色と太字、斜体を一括設定する関数がなかったので作った。

コード

gistd5bd52cc37a31321143502ffbca3cba7

使用方法、動作確認方法

  1. Assets/Editor内にCustomWindow.csを作成(フォルダがなければ新しく作成する)。
  2. 上のコードをコピペ
  3. 下のようにWindow->CustomWindowをクリック

f:id:gologius:20171104093618p:plain

以下のような画面が出る(黒地のラベルが、今回のラッパーで作成した部分)

f:id:gologius:20171104093617p:plain

Akeytsuにおいてボーンの名前によっては「Mirror Selected」が使用できない

MMDのモデルは使いたいけどMMDは使いたくないので、

MMD→MMD4Mecanimでfbx変換→Akeytsuでモーション作成

みたいなことをしようとした。

普通にAkeytsuに取り込めた。が「Mirror Selected」が使えない。 f:id:gologius:20171022022041p:plain これがないと、左右対称のモーションを作るときに面倒

ちなみにモデルはこちらを使用しています。ありがとうございます。 bowlroll.net

解決策

ボーンの名前がダメらしいです。ピリオドか数字か何がわるいか知りませんが、先頭の数字+ピリオドを消して、半角英文字のみにしたらなおりました

f:id:gologius:20171022022328p:plain

f:id:gologius:20171022022918g:plain 脚のボーン名のみ変更して実行した結果。脚は動くがほかは動かない

Unity 地面との接触判定

【2018/04/07追記】 ※この方法、OverrapSphereの半径分だけ、空中で判定されちゃうんですよね。 なので、着地判定時にモーション再生するときに、空中で着地してるように見えてしまいますね。 ダメですねこれ

本文

↓このクソみたいな発想後に考えたまともな接触判定方法

Unity 簡単な地面との接触判定 - gologiusの巣

方法

CapsuleColliderの足元でPhysics.OverlapSphere()を使用する→Sphere内のオブジェクトを走査→中に無機物があれば地面に接触している

gist.github.com

実行結果はこちら。注意点としては、使用するCapsuleCollider自体の接触判定が常にあります。

f:id:gologius:20171015124126g:plain

【再再更新】Unityでカメラ追跡したときにガタつく原因を考える

Unityで,プレイヤーを追跡するカメラスクリプトを作成していました.

まぁやっている方はたくさんおられるので説明は略しますが...

 

で,ゆっくり追従(追尾、補間)するカメラをつくろうとしたら,カメラがガタついてしまいます.

Vector3.Lerp や Vector3.SmoothDampでの補間を利用したものです↓

Unity でプレイヤーを追跡するカメラのスクリプト

ちなみに僕は Vector3.SmoothDampでやっています.Lerpよりガタつきが減ったように見えたので.

 

調べたところ,物理演算とゲームループが同期できていない?(Unity カメラ がたつく,等で調べてください)のが原因の一つかもしれないことが判明.

【2017/10/15追記】Rigidbodyがついているオブジェクト を追跡する際に発生する問題っぽい?

対策1:Update()から移動させる

処理をFixedUpdate()がLateUpdate()に移植する。

どちらが良いかは不明。 RigidbodyをもつObjectを追跡するときはFixedUpdate()がよいのか?

やってみて治ればバンザイ(∩´∀`)∩

 

対策2:FPSを落とす

ふと,処理速度が速すぎて,追跡しきれてないのでは?と思いFPSを見てみたら300FPSとか普通に出てました.

f:id:kamiwo_koete:20160904104717p:plain

とりあえずFPS落としてみるかと思い↓等を参考にエディタ上やスクリプト上で落としてみました.

Unityゲーム開発所 - UnityでFPSを設定する方法

 

FPS落ちない.上記リンク先によるとビルド後でないと反映されないみたいです.

結局ビルドしてみたらがたつきは治りました. 

前もビルドしたら治った案件があったので,一回ビルドして確かめるのもいいかも.

 

対策3:RigidbodyのInterpolateを見直す

RigidbodyのInterpolateがNoneの場合とそれ以外(Interpolate,Extrapolate)とでがたつきが変わる。Noneにすれば治る場合がある

 

対策4: スクリプトの実行順番を変更する

追跡対象のGameObjectの移動が、カメラ追跡スクリプトの実行順より遅い場合、

・ カメラスクリプトで追跡→GameObjectが移動

となるので、ガタつく?

 

結果:よくわからん

前はFPSを弄ったら治ったし、今やってる案件ではFixedUpdate()に放り込んだら治った。よくわからない。以上。

Particle SystemでBillboardを無効化する(カメラ方向に常に向かないようにする)

問題

f:id:gologius:20171009101058g:plain

デフォルトだとParticleが常にカメラの方向に向く。

煙とかならよいが、壁のエフェクトを出したい、となると困る。実際困っている方がおられた。

[Unity] 頂点カラーを利用して平面メッシュをテクスチャアニメーションさせる - Qiita

解決策

「Render Alignment」を「Local」にしましょう(Unity環境は Version 2017.1.1f1)。 たぶん古いバージョンだと「Billboard Alignment」を弄ればよいと思われます。 f:id:gologius:20171009101331g:plain

f:id:gologius:20171009101428g:plain

Unity 簡単な地面との接触判定

SphereCastやらRaycastやら調べたら色々ありました。

しかし私は新しくLayerを作るのが気に入らなかった。

そこで私は考えた

Rigidbodyがアタッチされているなら、速度のy要素が(ほぼ)0になったとき、でよいのではなかろうか???

bool isGround = Mathf.Abs(rbody.velocity.y) < 0.001f ? true : false;

y要素が

  • 負なら重力による落下
  • 正ならジャンプ中など
  • (ほぼ)0なら地面に着くか、空中で静止している状態か

となる。

これでよくね?

追記(10/08)

ずっと平面なら別にいいんだけど、坂道があったらこの前提は崩壊します。

素直にSphereCastとか使いましょうね

おしまい