LoginSignup
1
0

More than 1 year has passed since last update.

【完走目指す】初心者が25日で強くなる Advent Calendar 2022
10日目です。
今回は今まで勉強した知識を使って、なるべく調べないで作っていきます。
大学の課題がいつもよりも多めなのでボリュームが減ってますが、気にしないでください。

時計

アナログ時計とか、デジタル時計とか。
時間があればどっちも作ります。

デジタル時計

まずはデジタル時計から作ります。
24時間表示です。
まず、
時計デジタルⅡ.png

時計デジタル3.png
を用意します。
さて、ここで2通りの作り方が思いつきました。
1.これで数字の画像を作ってそれを表示
2.この2種類の画像を使い分けてデジタルっぽく作る
今回は、2のほうで行きます。

制作

ならべる

スクリーンショット_20221209_015037.png
さっきのをこんな感じに並べます。
灰色のやつの下には、黒色のやつが隠れています。
これで準備OKです。

書く

試しに以下のように書いてみました。
switchってcaseをこんな風になれべられたっけと考えましたが、エラーになっていないのでOKです。とりあえず動かしてみます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class Clock : MonoBehaviour
{
    public GameObject[] BarGray;
   
    public int  Min;
   

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Min = DateTime.Now.Minute;

        Debug.Log(Min);
        switch (Min)
        { case 1:case 11: case 21:case 31:case 41: case 51:
                BarGray[5].SetActive(false);
                BarGray[6].SetActive(false);
                
                break;
            case 2:
            case 12:
            case 22:
            case 32:
            case 42:
            case 52:
                BarGray[5].SetActive(true);
               
                BarGray[1].SetActive(false);
                BarGray[2].SetActive(false);
                BarGray[3].SetActive(false);
                BarGray[4].SetActive(false);
                
                break;
            case 3:
            case 13:
            case 23:
            case 33:
            case 43:
            case 53:
                BarGray[1].SetActive(true);
                BarGray[2].SetActive(true);
               
               
                break;
            case 4:
            case 14:
            case 24:
            case 34:
            case 44:
            case 54:
                BarGray[2].SetActive(true);
               
                BarGray[4].SetActive(true);
               
                BarGray[0].SetActive(false);
             
              
                break;
            case 5:
            case 15:
            case 25:
            case 35:
            case 45:
            case 55:
               
                
                BarGray[5].SetActive(true);
               
              
                BarGray[2].SetActive(false);
               
                BarGray[4].SetActive(false);
               
                break;
            case 6:
            case 16:
            case 26:
            case 36:
            case 46:
            case 56:
             
              
                BarGray[1].SetActive(false);
               
                break;
            case 7:
            case 17:
            case 27:
            case 37:
            case 47:
            case 57:
                BarGray[0].SetActive(true);
                BarGray[1].SetActive(true);
                BarGray[2].SetActive(true);
                BarGray[3].SetActive(true);
               
                BarGray[5].SetActive(false);
              
                break;
            case 8:
            case 18:
            case 28:
            case 38:
            case 48:
            case 58:
               
                BarGray[0].SetActive(false);
                BarGray[1].SetActive(false);
                BarGray[2].SetActive(false);
                BarGray[3].SetActive(false);
              
                break;
            case 9:
            case 19:
            case 29:
            case 39:
            case 49:
            case 59:
               
                BarGray[1].SetActive(true);
                
               
                
                break;
            case 0:
            case 10:
            case 20:
            case 30:
            case 40:
            case 50:
            case 60:
                
               
                BarGray[3].SetActive(true);
               
               ;
                BarGray[1].SetActive(false);
                
               
                break;




        }
    }
}

一番右の数字を制御しています。
こんな感じのやつを4つ作り、それぞれの数字を制御します。
今回は、うるう秒にも対応するためにcaseを60まで取っています。
結果

動かない。

caseの取り方が悪かったようです。
追記
caseでも行けるかもしれないです。
BarGrayとBarBlackが逆になってました。

改善

caseは1つの処理に1個しか付けられないようなので、caseの中身をまとめます。
ここのswitchでは分の一番右、一の位を制御しています。
なので、どうにかして Minの一の位だけを取得 → その数字に対応した処理を行う
このようにしたいわけです。
そういえば、MOS試験を受けた時にleftとかrightとかいう関数について書いてありました。使えそう。
↑使えませんでした。C#は対応していない関数のようです。
では、C#ではどのように書くのか調べました。

やはりありました。
今回はToString()を使用します。
分(1の位)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class Clock : MonoBehaviour
{
    public GameObject[] BarGray;
    public int SPMin;
    public int Min;


    // Start is called before the first frame update
    void Start()
    {
        BarGray[0].SetActive(true);
        BarGray[1].SetActive(true);
        BarGray[2].SetActive(true);
        BarGray[3].SetActive(true);
        BarGray[4].SetActive(true);
        BarGray[5].SetActive(true);
        BarGray[6].SetActive(true);

    }

    // Update is called once per frame
    void Update()
    {
        Min = DateTime.Now.Minute;
        if (Min >= 10)
        {
            String ChMin = Min.ToString();

            int InMin = ChMin[1];
            SPMin = InMin - 48;
        }
        else
        {
           


            String ChMin = Min.ToString();

            int InMin = ChMin[0];
            SPMin = InMin - 48;
        }
            
            switch (SPMin)
            {
                case 1:
                    BarGray[0].SetActive(true);
                    BarGray[1].SetActive(true);
                    BarGray[2].SetActive(true);
                    BarGray[4].SetActive(true);
                    BarGray[5].SetActive(true);
                    BarGray[6].SetActive(true);
                    BarGray[5].SetActive(false);
                    BarGray[6].SetActive(false);


                    break;
                case 2:

                    BarGray[5].SetActive(true);
                    BarGray[6].SetActive(true);
                    BarGray[1].SetActive(false);
                    BarGray[2].SetActive(false);
                    BarGray[3].SetActive(false);
                    BarGray[4].SetActive(false);
                    BarGray[5].SetActive(false);
                    break;
                case 3:
                    BarGray[1].SetActive(true);
                    BarGray[2].SetActive(true);
                    BarGray[3].SetActive(true);
                    BarGray[4].SetActive(true);
                    BarGray[5].SetActive(true);
                    BarGray[2].SetActive(false);
                    BarGray[3].SetActive(false);
                    BarGray[4].SetActive(false);
                    BarGray[5].SetActive(false);
                    BarGray[6].SetActive(false);

                    break;
                case 4:
                    BarGray[2].SetActive(true);
                    BarGray[3].SetActive(true);
                    BarGray[4].SetActive(true);
                    BarGray[5].SetActive(true);
                    BarGray[6].SetActive(true);
                    BarGray[0].SetActive(false);
                    BarGray[3].SetActive(false);
                    BarGray[5].SetActive(false);
                    BarGray[6].SetActive(false);

                    break;
                case 5:
                    BarGray[0].SetActive(true);
                    BarGray[3].SetActive(true);
                    BarGray[5].SetActive(true);
                    BarGray[6].SetActive(true);
                    BarGray[0].SetActive(false);
                    BarGray[2].SetActive(false);
                    BarGray[3].SetActive(false);
                    BarGray[4].SetActive(false);
                    BarGray[6].SetActive(false);
                    break;
                case 6:
                    BarGray[0].SetActive(true);
                    BarGray[2].SetActive(true);
                    BarGray[3].SetActive(true);
                    BarGray[4].SetActive(true);
                    BarGray[6].SetActive(true);
                    BarGray[0].SetActive(false);
                    BarGray[1].SetActive(false);
                    BarGray[2].SetActive(false);
                    BarGray[3].SetActive(false);
                    BarGray[4].SetActive(false);
                    BarGray[6].SetActive(false);
                    break;
                case 7:
                    BarGray[0].SetActive(true);
                    BarGray[1].SetActive(true);
                    BarGray[2].SetActive(true);
                    BarGray[3].SetActive(true);
                    BarGray[4].SetActive(true);
                    BarGray[6].SetActive(true);
                    BarGray[4].SetActive(false);
                    BarGray[5].SetActive(false);
                    BarGray[6].SetActive(false);
                    break;
                case 8:
                    BarGray[4].SetActive(true);
                    BarGray[5].SetActive(true);
                    BarGray[6].SetActive(true);
                    BarGray[0].SetActive(false);
                    BarGray[1].SetActive(false);
                    BarGray[2].SetActive(false);
                    BarGray[3].SetActive(false);
                    BarGray[4].SetActive(false);
                    BarGray[5].SetActive(false);
                    BarGray[6].SetActive(false);

                    break;
                case 9:
                    BarGray[0].SetActive(true);
                    BarGray[1].SetActive(true);
                    BarGray[2].SetActive(true);
                    BarGray[3].SetActive(true);
                    BarGray[4].SetActive(true);
                    BarGray[5].SetActive(true);
                    BarGray[6].SetActive(true);
                    BarGray[0].SetActive(false);
                    BarGray[2].SetActive(false);
                    BarGray[3].SetActive(false);
                    BarGray[4].SetActive(false);
                    BarGray[5].SetActive(false);
                    BarGray[6].SetActive(false);





                    break;
                case 0:

                    BarGray[0].SetActive(true);
                    BarGray[2].SetActive(true);
                    BarGray[3].SetActive(true);
                    BarGray[4].SetActive(true);
                    BarGray[5].SetActive(true);
                    BarGray[6].SetActive(true);
                    BarGray[0].SetActive(false);
                    BarGray[1].SetActive(false);
                    BarGray[2].SetActive(false);
                    BarGray[4].SetActive(false);
                    BarGray[5].SetActive(false);
                    BarGray[6].SetActive(false);


                    break;




            }
        }
    }

分(10の位)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class Clock2: MonoBehaviour
{
    public GameObject[] BarGray;

    public int Min;
    public int SPMinB;

    // Start is called before the first frame update
    void Start()
    {
        BarGray[0].SetActive(true);
        BarGray[1].SetActive(true);
        BarGray[2].SetActive(true);
        BarGray[3].SetActive(true);
        BarGray[4].SetActive(true);
        BarGray[5].SetActive(true);
        BarGray[6].SetActive(true);

    }

    // Update is called once per frame
    void Update()
    {
        Min = DateTime.Now.Minute;
        if (Min >= 10)
        {
            String ChMin = Min.ToString();

            int InMin = ChMin[0];
            SPMinB = InMin - 48;
        }
        else
        {




            SPMinB = 0;
        }
       
        switch (SPMinB)
        {
            case 1:
                BarGray[0].SetActive(true);
                BarGray[1].SetActive(true);
                BarGray[2].SetActive(true);
                BarGray[4].SetActive(true);
                BarGray[5].SetActive(true);
                BarGray[6].SetActive(true);
                BarGray[5].SetActive(false);
                BarGray[6].SetActive(false);


                break;
            case 2:

                BarGray[5].SetActive(true);
                BarGray[6].SetActive(true);
                BarGray[1].SetActive(false);
                BarGray[2].SetActive(false);
                BarGray[3].SetActive(false);
                BarGray[4].SetActive(false);
                BarGray[5].SetActive(false);
                break;
            case 3:
                BarGray[1].SetActive(true);
                BarGray[2].SetActive(true);
                BarGray[3].SetActive(true);
                BarGray[4].SetActive(true);
                BarGray[5].SetActive(true);
                BarGray[2].SetActive(false);
                BarGray[3].SetActive(false);
                BarGray[4].SetActive(false);
                BarGray[5].SetActive(false);
                BarGray[6].SetActive(false);

                break;
            case 4:
                BarGray[2].SetActive(true);
                BarGray[3].SetActive(true);
                BarGray[4].SetActive(true);
                BarGray[5].SetActive(true);
                BarGray[6].SetActive(true);
                BarGray[0].SetActive(false);
                BarGray[3].SetActive(false);
                BarGray[5].SetActive(false);
                BarGray[6].SetActive(false);

                break;
            case 5:
                BarGray[0].SetActive(true);
                BarGray[3].SetActive(true);
                BarGray[5].SetActive(true);
                BarGray[6].SetActive(true);
                BarGray[0].SetActive(false);
                BarGray[2].SetActive(false);
                BarGray[3].SetActive(false);
                BarGray[4].SetActive(false);
                BarGray[6].SetActive(false);
                
                break;
            case 6:
                BarGray[0].SetActive(true);
                BarGray[2].SetActive(true);
                BarGray[3].SetActive(true);
                BarGray[4].SetActive(true);
                BarGray[6].SetActive(true);
                BarGray[0].SetActive(false);
                BarGray[1].SetActive(false);
                BarGray[2].SetActive(false);
                BarGray[3].SetActive(false);
                BarGray[4].SetActive(false);
                BarGray[6].SetActive(false);
                break;
            case 7:
                BarGray[0].SetActive(true);
                BarGray[1].SetActive(true);
                BarGray[2].SetActive(true);
                BarGray[3].SetActive(true);
                BarGray[4].SetActive(true);
                BarGray[6].SetActive(true);
                BarGray[4].SetActive(false);
                BarGray[5].SetActive(false);
                BarGray[6].SetActive(false);
                break;
            case 8:
                BarGray[4].SetActive(true);
                BarGray[5].SetActive(true);
                BarGray[6].SetActive(true);
                BarGray[0].SetActive(false);
                BarGray[1].SetActive(false);
                BarGray[2].SetActive(false);
                BarGray[3].SetActive(false);
                BarGray[4].SetActive(false);
                BarGray[5].SetActive(false);
                BarGray[6].SetActive(false);

                break;
            case 9:
                BarGray[0].SetActive(true);
                BarGray[1].SetActive(true);
                BarGray[2].SetActive(true);
                BarGray[3].SetActive(true);
                BarGray[4].SetActive(true);
                BarGray[5].SetActive(true);
                BarGray[6].SetActive(true);
                BarGray[0].SetActive(false);
                BarGray[2].SetActive(false);
                BarGray[3].SetActive(false);
                BarGray[4].SetActive(false);
                BarGray[5].SetActive(false);
                BarGray[6].SetActive(false);





                break;
            case 0:

                BarGray[0].SetActive(true);
                BarGray[2].SetActive(true);
                BarGray[3].SetActive(true);
                BarGray[4].SetActive(true);
                BarGray[5].SetActive(true);
                BarGray[6].SetActive(true);
                BarGray[0].SetActive(false);
                BarGray[1].SetActive(false);
                BarGray[2].SetActive(false);
                BarGray[4].SetActive(false);
                BarGray[5].SetActive(false);
                BarGray[6].SetActive(false);


                break;




        }
    }
}

時間も同様に書けばOKです。

追記
BarGrayと書いてますが、すべてBarBlackの誤りでした。
直す気力もないし、ちゃんと動くので大丈夫です。
時間も同様に書けばOKです。
10分以下(0~9分)は、char型の[1]がうまく機能しないので、
ifで条件分岐 → 10分以下の時だけ特殊な処理(強制的にSPMinB)を0としています。

結果

スクリーンショット_20221210_012428.png

動いた!
 

まとめ

自分で考えて書くのは難しい。
多分、わからないことはすぐ調べたほうが早く終わる。

10日目 終わり

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0