うにty生活

UnityChanを生活させたい

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

 

# 2019/9/24に更新

どうも、初コメ頂いて嬉しいラブへです

どんどん感想や意見などできるだけ返信するのでコメントお願いします!

 

◆太陽を表現する

さて、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のモーションと太陽の動きが別々にできました!

 

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

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

 

では今日はこの辺で