時計

[【完走目指す】初心者が25日で強くなる Advent Calendar 2022](https://qiita.com/advent-calendar/2022/aruhitoganbaru)
10日目です。
今回は今まで勉強した知識を使って、なるべく調べないで作っていきます。
大学の課題がいつもよりも多めなのでボリュームが減ってますが、気にしないでください。
# 時計
アナログ時計とか、デジタル時計とか。
時間があればどっちも作ります。

# デジタル時計
まずはデジタル時計から作ります。
２４時間表示です。
まず、
![時計デジタルⅡ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/08cf614d-2647-b19e-77e0-e6f2a9e67536.png)
と
![時計デジタル３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/cbbde59d-fe83-089a-475d-ea5213d12e1e.png)
を用意します。
さて、ここで２通りの作り方が思いつきました。
1.これで数字の画像を作ってそれを表示
2.この２種類の画像を使い分けてデジタルっぽく作る
今回は、2のほうで行きます。
# 制作
#### ならべる
![スクリーンショット_20221209_015037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/d048f596-1f22-dab9-e6de-1ad54bd4c8c9.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;




        }
    }
}
```
一番右の数字を制御しています。
こんな感じのやつを４つ作り、それぞれの数字を制御します。
今回は、うるう秒にも対応するためにcaseを６０まで取っています。
結果
##### 動かない。
~~caseの取り方が悪かったようです。~~
追記
caseでも行けるかもしれないです。
BarGrayとBarBlackが逆になってました。
## 改善
caseは１つの処理に１個しか付けられないようなので、caseの中身をまとめます。
ここのswitchでは分の一番右、一の位を制御しています。
なので、どうにかして　Minの一の位だけを取得　→　その数字に対応した処理を行う
このようにしたいわけです。
そういえば、MOS試験を受けた時にleftとかrightとかいう関数について書いてありました。使えそう。
↑使えませんでした。C#は対応していない関数のようです。
では、C#ではどのように書くのか調べました。

https://santerabyte.com/c-sharp-get-nth-digit-num/

やはりありました。
今回はToString（）を使用します。
分（１の位）
```
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;




            }
        }
    }

```
分（１０の位）
```
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で条件分岐　→　１０分以下の時だけ特殊な処理（強制的にSPMinB）を0としています。

# 結果
![スクリーンショット_20221210_012428.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/a3d86eb3-467a-8251-b6e2-3f90d3aac4ca.png)

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

１０日目　終わり