【Unityメモ書き6】アニメーション追記&シーン切替時にライティングが変になるバグの修正

おもったより
Unity講座が長くなってしまって
いつ終わるか見えなくなってきました

 

それだけ
いままで勉強してなかったってことだわね
これから仕事でも主体になっていくから必死よ

 

いままで
適当にやってきた
ツケが回ってきたってことだな

 

今回は
Unityのバグ?に関することと、アニメーションでやっていくうちにわかったことがあったので
それを追記していこうと思います

 

大規模なゲームを作っている人ならおそらくハマった箇所
シーン切り替え時に3D空間のライティングが
正しくされない、暗いと言った問題に当たったことはないでしょうか?

 

ライティングの設定を変えても
一向に変化なく
ライトを増やして双方向から当てても変わらないのよね……

 

デバッグでそのシーンだけを再生すると
正しくライティングされるんだよな
結構致命的な感じだな

 

このバグ、どうやら
Unityさんが高速化のために予めライティング情報を設定していて
それが更新されないために発生しているようです

 

直し方は簡単です
Window → Lighting → Lighting設定
でライティングの設定画面を表示させます(すでに表示している場合は必要ありません)

 

出てきたウインドウの
下部にあるAuto Generateのチェックボックスを外して、Generate Lightingのボタンを押してね
チェックボックスじゃないのに注意よ

 

しばらく何かの作業が行われて
動作が鈍くなるけど、終わるまで待てば完了だ
おそらくLighting情報をこれで作り直したんだろうな

 

この情報、意外とネットにもなくて
製作中も3日ぐらい考えてました
見つけたときはすごく嬉しかったですね

 

次にUnityのアニメーションについてです
前々回に一度書いたのですが、ゲームを作っていくうちに説明不足だなと思うようになってきまして
新たに書きたいと思います

 

■指定の箇所にアニメーションを止める

 

おそらくUnityのアニメーションは
止めることは考えて作ってないのでしょうね
stop関数とかないので別の方法で再生を止める必要があります

 

// アニメーターの取得
Animator lAnimator = this.GetComponent();
// 再生速度を0にする(停止する)
lAnimator.speed = 0;

 

上のコードがアニメーションを一時停止する方法よ
単純に再生速度を0にする方法ね
これ以外止める方法が(わから)ないのでどうしようもないわ……

 

// アニメーターの取得
Animator lAnimator = this.GetComponent();
// 再生速度を0にする(停止する)
lAnimator.speed = 0;
// 指定位置に再生位置(5)を移動
lAnimator.Play("anime_01", 0, 0.5);

 

上のコードが、アニメーションを指定位置で停止させるコードだ
前のコードと違う点はPlay関数を記述して、第3引数が入力されているところだな
ここが再生位置を設定する箇所だ

 

再生位置はノーマライズ(正規化)された値になるので
0~1までの値になります
半分なら0.5と記述します

 

     // アニメーションの再生時間を取得
     mAnimatorStateInfo = mFrontScreenAnimator.GetCurrentAnimatorStateInfo(0);
     mAnimeTimeLength = mAnimatorStateInfo.length;
     mAnimeTimeCur = 0;
     

 

前回、こんな風に
現在の再生位置(再生時間ー現在時間)を求めようとしていましたが
AnimatorにあるnormalizedTimeで現在の正規化された再生時間が取得できます

 

     // アニメーションの再生時間を取得
     if(lAnimator.normalizedTime => 1.0f)
     {
        // 再生終了した
     }
     

 

と、これだけでよかったのよね……
3Dオブジェクトのアニメーション登録も
別の回で書きたいと思うわ、まだ勉強することばかりね〜

 

気軽にコメントをどうぞ!

この記事に関すること冬月に聞きたいこと等、小さいことでもコメントしていただける嬉しいです。冬月に直接連絡したい方は下のお問合せフォームをお使いください。(メール送信されます)

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。※メールアドレスは公開されることは有りません。


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

Android | iOS | PC | Unityの関連記事