Unity基礎[No.1]

  • インスタンスを参照できるようにする

  • シーンの移動

  • シーンの再読み込み

  • ボタンの使い方

  • オブジェクトの表示/非表示と破壊

  • プレファブの生成と親要素の変更

  • セーブとロード

  • 解像度が変わってもUIを固定する

インスタンスを参照できるようにする

using UnityEngine.UI; //UI要素を使うとき

[SerializeField] GameObject prefab;//エディターでオブジェクトをセットする
public PlayerManager player; //publicでも宣言できる
[SerializeField] Text nameText; //オブジェクトをセットすることでそのコンポーネントも取得できる


nameText.text = "テキスト"; //代入する

シーンを移動するメソッド

File>Build Settingsから必要なシーンをドラッグ&ドロップする

using UnityEngine.SceneManagement;
        
SceneManager.LoadScene("シーン名");

シーンの再読み込み

using UnityEngine.SceneManagement;

string currentScene = SceneManager.GetActiveScene().name;
SceneManager.LoadScene(currentScene);

ボタンの使い方

ButtonをCanvas内に配置する。TMPがインポートされてなければインポートする
Imageに背景色やスプライトを設定する
子供のTextに文字を設定する

On Click()にボタンが押された時のpublic メソッドを書いたスクリプトをセットしたオブジェクトを設定する

EventTriggerコンポーネントでボタン(離した時)以外のアクションも設定できる
コライダーがついたオブジェクトのアクションも設定できる。
ボタンは UIでしか使えない

オブジェクトの表示/非表示と破壊

[SerializeField] GameObject image;//対象のオブジェクトを前もってセットする必要がある

image.SetActive(false); //trueだと表示
Destroy(image); //imageを破壊

gameObjectではない場合はgameObjectをつける

public Script script;

script.gameObject.SetActive(false);
Destroy(script.gameObject);

プレファブの生成と親要素の変更

まずプレファブ化する

    [SerializeField] Transform parent; //親要素を取得
    [SerializeField] GameObject imagePrefab; //プレファブを取得
    void Start(){
        //プレファブからオブジェクトの生成
        GameObject image = Instantiate(imagePrefab);
        // 親要素の変更
        image.transform.SetParent(parent, false); //falseにすると親と同じ位置に配置される
    }
//第三引数をfalseにするとローカル座標、trueにするとワールド座標
Instantiate(prefab, this.transform, false); //今ある親子関係を引き継ぐ (自分の親の子になる)
Instantiate(prefab,); //親は無しで生成される

セーブとロード

文字列のセーブ

//myNameをキーにstring型のxを保存    
    string x = "セーブデータ";
  PlayerPrefs.SetString("myName", x); 
  PlayerPrefs.Save();
  string saveText = PlayerPrefs.GetString("myName");

文字列以外は一度json形式に置き換える
クラスの場合は[Serializable]する

using System;//serializableするために必要

[Serializable]
public class PlayerModel{
    //static化した
    static PlayerModel Instance = null;

    static public PlayerModel GetInstance()
    {
        if(Instance == null)
        {
            Instance = new PlayerModel();
        }
        return Instance;
    }

    [SerializeField]
    int hp;
    [SerializeField]
    int atk;
    [SerializeField]
    int currentStage;

    string SAVEKEY = "PLAYER-SAVE-KEY";

    public void Save()
    {
        PlayerPrefs.SetString(SAVEKEY, JsonUtility.ToJson(this));
        PlayerPrefs.Save();
    }

    public void Load()
    {
        string jsonPlayer = PlayerPrefs.GetString(
            SAVEKEY, JsonUtility.ToJson(new PlayerModel()));//第二引数はなけれな新しいインスタンスをつくるという意味
        Instance = JsonUtility.FromJson<PlayerModel>(jsonPlayer);
    }

    public void DeleteSaveData()
    {
        PlayerPrefs.DeleteKey(SAVEKEY);
        PlayerPrefs.Save();
        Load();
    }
}

解像度が変わってもUIを固定する

Canvas ScalerのUI Scale ModeをScale With Screen Sizeにする
Reference Resolutionを好きな値に設定する
小要素にpanelを追加してその下に UIを配置する
panelのアンカーをcenterに変更してwidthとheightがReference Resolutionと同じ値になってるか確認する

この記事が気に入ったらサポートをしてみませんか?