# 2020/8/16に更新
今回は太陽の動きをシミュレーションしていきます
太陽を表現する
さて、Unitychanを360度観察できるようになったということで
次は太陽を動かして1日を表現していきたいと思います
と言ったもののもちろんやっている人はいるわけでして・・
参考にさせていただきました。
Lightについては次回の記事で詳しく書いていきます。
じゃあ今日は終わり〜というのはもったいないので
せっかくなので応用して色々試そうと思います
マイクラみたいにベットに入ったら時間進めたい
マインクラフトというゲームではキャラクターが布団に入ると外が明るくなります
急にパッと明るくなるのではなく、太陽が高速で動いている感じです
とりあえず何もしないで太陽を動かす
コードはこんな感じ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LigthController : MonoBehaviour {
private Vector3 sun = new Vector3(360f,330f,0f);
[SerializeField]
//1日の時間 単位:second
private float oneDayTime = 1800;//30分で1日を表現
private float rotationPerSecond;
void Start () {
transform.localRotation = Quaternion.Euler(sun);
//0.1/s = 1秒間に0.1動く
rotationPerSecond = 360 / oneDayTime;
}
void Update () {
transform.Rotate(Vector3.right*rotationPerSecond*Time.deltaTime);
}
}
Updateに↓こちらを追加するだけ!
if(Input.GetKey(KeyCode.H)){
transform.Rotate(Vector3.right*rotationPerSecond*2);
}
ベットが用意できなかったためHキーで代用します笑
少しずつ動いている太陽ですが
Hキーを押している間だけ太陽が早く動き、もちろん離せば元のスピードに戻ります
UnityChanが止まっている時だけ時間を進める
太陽を動かした場合、今の所リアルタイムで影が生成されます。その処理が結構重たく、UnityChanの動作がもったりしてしまうので対策していきたい
先ほどの太陽を完全に手動だけで動かすというのも一つの対策で
もう一つがUnitychanが止まっている時だけ時間を動かせばいいんじゃない?
と思い、やってみました
UnityChanの動きをどうやって判断するの?
→Animator.GetBoolを使用します
tubakihimelovehate.hatenablog.com
過去の記事でも登場したAnimator
その中でモーションとモーションの
ステートを切り替える判断はパラメーターを使用するということでした
そのパラメーターの状態を取得してみました
前回から追加したコードは赤くしています
public class LigthController : MonoBehaviour {
private Vector3 sun = new Vector3(360f,330f,0f);
public GameObject player;
public Animator animator;
[SerializeField]
//1日の時間 単位:second
private float oneDayTime = 1800;//30分で1日
private float rotationPerSecond;
void Start () {
transform.localRotation = Quaternion.Euler(sun);
//0.1/s = 1秒間に0.1動く
rotationPerSecond = 360 / oneDayTime;
animator = player.GetComponent<Animator>();
}
void Update () {
//transform.Rotate(Vector3.right*rotationPerSecond*Time.deltaTime);
if(!animator.GetBool("walking")){
transform.Rotate(Vector3.right*rotationPerSecond*Time.deltaTime);
}
if(Input.GetKey(KeyCode.H)){
transform.Rotate(Vector3.right*rotationPerSecond*2);
}
}
}
右上のRotation xに注目
これでUnityChanのモーションと太陽の動きが別々にできました!
歩かせる時もそうだったけど
何にでもメリットデメリットってあるんだなぁ・・・
では今日はこの辺で