トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

【Unity1week】日傘くるくる【お題:あつい】

 前回に引き続き、今回も参加させていただきます。

bibinbaleo.hatenablog.com

今回のお題はあつい

 よろしくおねがいします。

イデアだし

書きながら考えてます

・トマシープちゃんが溶ける。(Melt shaderを使って)

・地面のあついところを避けて歩く(影?)

・水を使った何か。

・サマー仮面

・熱盛!!!

 

 アセット見て何か・・・

・砂漠のなにか

・気球

・猫舌、熱い飲み物・・・

f:id:bibinbaleo:20180903095037p:plain

猫舌はおもしろいかも!

と思ったけど、実装できそうなゲームを思いつかない。

熱いステーキと水を交互に飲み食べて、猫舌ゲージがマックスにならないようにステーキをできるだけいっぱい食べる・・・とか

できる気がしないし面白くない

 

そして実際に熱い日差しの下に出た時のことを考えた。

はっ!日傘!!!日傘だ!!

太陽の方向に従って日傘の角度をよけるゲームにします!!!

用意

日傘っぽい?

poly.google.com

poly.google.com

モデルはマイムちゃんを使います。

f:id:bibinbaleo:20180903165600p:plain

あとスタンダードアセットの水を敷いて、空はみんな大好きFantasy Skybox FREE

f:id:bibinbaleo:20180903195256p:plain

dova-s.jp

環境音[1]|効果音ラボ

ピコん

http://taira-komori.jpn.org/game01.html

影とシェーダー

影を落とすのが重要になりますが、普段使っているUnlitシェーダーだと影が落ちないので、こちらのサイトを見て影が落ちるシェーダーを作りました。

[Unity] Unlitなシェーダで影付け | Cocoamix.jp

 

f:id:bibinbaleo:20180903153248p:plain

また傘の裏側が描画されていないの、Cull OffをStandardShaderに加えました。

f:id:bibinbaleo:20180903154548p:plain

f:id:bibinbaleo:20180903154550p:plain

[Unity] マテリアルとシェーダーについて/裏面も表示する – Shade3D チュートリアル

回転

太陽はこんな感じのスクリプトで3秒おきに角度がランダムに変わるようにしました。

void Update () {
timeleft -= Time.deltaTime;
if (timeleft <= 0.0)
{
timeleft = 3.0f;

transform.rotation = Quaternion.Euler(50, Random.Range(0.0f, 360.0f), 0);

}

 

日傘はまず回転の中心軸を手元にしたいので、なんやかんやで変えました。

f:id:bibinbaleo:20180903165334p:plain

最初は空のゲームオブジェクトを使ってできるかと思ったけど、うまくいかなくて、シリンダーとか2重構造とかなんやかんやしたら、できました。説明できない

f:id:bibinbaleo:20180903165337p:plain

そして回転は

transform.rotation = Quaternion.Euler(-30.0f,a, 0);

です。とりあえず

f:id:bibinbaleo:20180903195256p:plain

スライダーで傘を回転できるようにしました。

スライダーからの値の取得の仕方がよくわからなかったけど、スライダーにこのスクリプトを付けたらうまくいきました

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class kasamuki : MonoBehaviour {
    public int a;
    private Slider slider;
    private float num;
    public GameObject kasa;
    // Use this for initialization
    void Start () {
       
    }
	
	// Update is called once per frame
	void Update () {
        slider = this.GetComponent<Slider>();
        //slider.value = 1;
        num = slider.value;
        a = (int)num;
        Debug.Log(a);


        kasa.transform.rotation = Quaternion.Euler(-30.0f,a, 0);
    }
}

 

ただ最終的に、マウスの横移動で動くようにしました。


Vector3 pos = Input.mousePosition;
num = 300 * pos.x / Screen.width;
a = (int)num;


kasa.transform.rotation = Quaternion.Euler(-30.0f,a, 0);

判定

さて、判定

今回は太陽と傘の角度が同じになったらぴったり隠れるという判定ができたので、判定は簡単ですね。

    void Start () {
        point = 0;
       // Cursor.lockState = CursorLockMode.Confined;
    }
	
	// Update is called once per frame
	void Update () {
        sun.s = (int)sun.s;
        textsun.text = "SUN "+sun.s.ToString();
        textkasa.text = "KASA "+kasamuki.a.ToString();

        if (sun.s - 30 < kasamuki.a && kasamuki.a < sun.s + 30)
        {
            if (EndCanvas.activeSelf == false)
            {
                point = point + 1400 * Time.deltaTime;
               
                //Debug.Log(point);
            }
        }
        point = (int)point;
        textpoint.text = point.ToString();
        endpoint.text = point.ToString();
    }

前回とおんなじ感じ

角度の誤差が+-30度以内ならポイントが加算されます。

WebGL

途中でwebGLにビルドしたら影がめっちゃぼんやりになっちゃった。

f:id:bibinbaleo:20180903201529p:plain

クオリティを上げたら若干くっきりになった。

f:id:bibinbaleo:20180904163414p:plain

あと、Hardshadowにしたらくっきりなった。

f:id:bibinbaleo:20180904163421p:plain

f:id:bibinbaleo:20180904163206p:plain

ゴール

ゴールテープをClothで作った。

f:id:bibinbaleo:20180904163442p:plain

挙動が意味不明。

ゴールテープを長くしたら変な挙動になる。

サムネとか

めっちゃいい絵撮れた!

f:id:bibinbaleo:20180904163517p:plain

f:id:bibinbaleo:20180904163530p:plain

サムネ

f:id:bibinbaleo:20180904170906p:plain f:id:bibinbaleo:20180904170909p:plain

どっちがいいかな?

 

その他スタート画面とエンド画面。

今回は手抜き

f:id:bibinbaleo:20180904164058p:plain

f:id:bibinbaleo:20180904163958p:plain

完成

日曜日に公開になります。

https://unityroom.com/games/higasa

大体一日で完成しました。

判定部分らへんは前回とおんなじ感じなので、前回の記事を参考に作りました。

自分の記事は世界一役に立つな~~~