Unity放置ゲームmemo

```C# GameManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;
using System;

public class GameManager : MonoBehaviour
{
    private const int MaxOrb=10;
    private const int RespanTime=1;
    //const:後から内容を変えられない定数
    
    //オブジェクトの参照

    public GameObject orbPrefab;
    public GameObject leveltext;
    public GameObject canvasGame;
    public GameObject textScore; //ScoreTextのゲームオブジェクトを格納するpublic変数
    //public変数にするとインスペクター上でアッタチして変更可能
    //GameObject型にしておくとゲームオブジェクトやプレハブがアタッチ可能

    //メンバ変数
    private int score=0;
    private int nextScrore=100;
    private int currentOrb=0;
    private int nowlevel=0;
    private int nextexp;
    private int nowexp;
    private int[] exptable =new int[]{5,10,20,30};

    private DateTime lastDateTime;
    /// <summary>
    /// DateTime型の変数は時刻を扱うのに便利な構造体である
    /// </summary>
    void Start()
    {
        //初期オーブ生成
        for(int i=0; i<MaxOrb; i++){
            CreateOrb();
        }
        RefleshText();
    }

    // Update is called once per frame
    void Update()
    {
        if (currentOrb < MaxOrb){
            TimeSpan timeSpan=DateTime.UtcNow - lastDateTime;
            if (timeSpan >=TimeSpan.FromSeconds (RespanTime)){    ///TimeSpan.Fromsconds (RespanTime)でint型をTimeSpan型に変更している
                while (timeSpan >=TimeSpan.FromSeconds (RespanTime)){
                    CreateNewOrb();
                    timeSpan-=TimeSpan.FromSeconds(RespanTime);
                }

            }
        }
    }

    //オーブ生成の関数
    public void CreateOrb(){
        GameObject orb=(GameObject)Instantiate(orbPrefab);
        //↑GamaObject型の変数　　↑Instantiateでプレハブから新しいインスタンスを生成し、ゲームオブジェクト型に変換
        orb.transform.SetParent (canvasGame.transform,false);
        //Setparentは親オブジェクトの設定
        orb.transform.localPosition=new Vector3(
        UnityEngine.Random.Range(-300.0f,300.0f),
        UnityEngine.Random.Range(-140.0f,500.0f),
        0f);
    }

    
    public void GetOrb(){
        score+=1;
        RefleshText();
        currentOrb--;
        nowexp++;
        LevelUp();

    }
    void RefleshText(){
        textScore.GetComponent<TextMeshProUGUI>().text="徳:"+ score+"/"+nextScrore;
    }
    public void CreateNewOrb(){
            lastDateTime=DateTime.UtcNow;
            ///UtcNow:その時点での時刻を表す
            if (currentOrb >= MaxOrb){
                return;
            }
            CreateOrb();
            currentOrb++;
        }
    
    public void LevelUp(){
        nextexp=exptable[nowlevel];
        if (nowexp  < nextexp){
            return;
        }
        nowlevel++;
        nowexp=nowexp-nextexp;
        nextexp=exptable[nowlevel];
        leveltext.GetComponent<TextMeshProUGUI>().text="Lv."+ nowlevel;

    }
}
```
```C# orbManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public class orbmanager : MonoBehaviour
{
    // Start is called before the first frame update
    private GameObject gameManager;
    void Start()
    {
        gameManager=GameObject.Find("GameManager");
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    public void TouchOrb(){
        if(Input.GetMouseButton (0) ==false){
            return;
        }
        //マウスボタンが押されていなかったらreturnで関数から脱出する
        gameManager.GetComponent<GameManager> ().GetOrb();
        //GameManagerコンポーネントはここではアタッチしたスクリプトで、その中のGetOrbメゾットを呼び出している。
        Destroy(this.gameObject);
    }
}
```