うにty生活

UnityChanを生活させたい

マイクラみたいな1日を表現する+α #5

# 2020/8/16に更新

今回は太陽の動きをシミュレーションしていきます

太陽を表現する

さて、Unitychanを360度観察できるようになったということで

次は太陽を動かして1日を表現していきたいと思います

 

と言ったもののもちろんやっている人はいるわけでして・・

gametukurikata.com

参考にさせていただきました。

 

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);
       }
f:id:tubakihimeLoveHate:20180621200654g:plain
ベットが用意できなかったため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);
        }

    }

}

 

f:id:tubakihimeLoveHate:20180621204126g:plain

右上のRotation xに注目

これでUnityChanのモーションと太陽の動きが別々にできました!

 

歩かせる時もそうだったけど

何にでもメリットデメリットってあるんだなぁ・・・

 

では今日はこの辺で