【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オブジェクトのアニメーション登録も
別の回で書きたいと思うわ、まだ勉強することばかりね〜
霊夢

 

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

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

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


The reCAPTCHA verification period has expired. Please reload the page.

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