【问题标题】:How to Create an Input Name Script in Unity [duplicate]如何在 Unity 中创建输入名称脚本 [重复]
【发布时间】:2020-02-25 04:59:56
【问题描述】:

我在第一个场景中有一个名字输入脚本,计划是我想在第二个场景中调用这个输入,当我在第一个场景中输入名字时,名字也会出现在第二个场景中,如何你会这样做吗?

public class NamaUser : MonoBehaviour {

    public InputField nama;

    public Text teks;

    public void NamaTeks () {
        if (nama.text == "") {
            teks.text = "Harap Isi Nama";
        } else {
            teks.text = "Namaku " + nama.text;
        }
    }
}

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    您可以保存输入值PlayerPrefs
    设置 PlayerPrefs:

    //Name of Pref in first parameter
    //Value in second parameter
    PlayerPrefs.SetString("value", teks.value);
    

    在第二个场景中获取 PlayerPref:

    //Name of Pref in first parameter
    //Returns value of PlayerPrefs
    String a = PlayerPrefs.SetString("value");
    

    缺点:

    1. 您不仅可以在场景之间传递数据,还可以在实例之间(游戏会话)传递数据。
    2. 易于管理,因为 Unity 处理所有后台进程。
    3. 可用于存储数据以跟踪高分。

    优点:

    1. 使用文件系统。
    2. 可以轻松地从 prefs 文件更改数据。

    【讨论】:

      【解决方案2】:

      或者,另一种方式——使用 Singelton 和 DontDestroyOnLoad()

      允许轻松访问字段并在场景之间保存对象。

      例如使用这个模板来创建你的类。

      using UnityEngine;
      public class Singelton<T> : MonoBehaviour where T : Singelton<T>
      {
      
          private static T instance = null;
      
          private bool alive = true;
      
          public static T Instance
          {
              get
              {
                  if (instance != null)
                  {
                      return instance;
                  }
                  else
                  {
                      //Find T
                      T[] managers = GameObject.FindObjectsOfType<T>();
                      if (managers != null)
                      {
                          if (managers.Length == 1)
                          {
                              instance = managers[0];
                              DontDestroyOnLoad(instance);
                              return instance;
                          }
                          else
                          {
                              if (managers.Length > 1)
                              {
                                  Debug.LogError($"Have more that one {typeof(T).Name} in scene. " +
                                                  "But this is Singelton! Check project.");
                                  for (int i = 0; i < managers.Length; ++i)
                                  {
                                      T manager = managers[i];
                                      Destroy(manager.gameObject);
                                  }
                              }
                          }
                      }
                      //create 
                      GameObject go = new GameObject(typeof(T).Name, typeof(T));
                      instance = go.GetComponent<T>();
                      DontDestroyOnLoad(instance.gameObject);
                      return instance;
                  }
              }
      
              //Can be initialized externally
              set
              {
                  instance = value as T;
              }
          }
      
          /// <summary>
          /// Check flag if need work from OnDestroy or OnApplicationExit
          /// </summary>
          public static bool IsAlive
          {
              get
              {
                  if (instance == null)
                      return false;
                  return instance.alive;
              }
          }
      
      
      
          protected virtual void Awake()
          {
              if (instance == null)
              {
                  DontDestroyOnLoad(gameObject);
                  instance = this as T;
              }
              else
              {
                  Debug.LogError($"Have more that one {typeof(T).Name} in scene. " +
                                  "But this is Singelton! Check project.");
                  Destroy(gameObject);
              }
      
          }
      
          protected virtual void OnDestroy() { alive = false; }
      
          protected virtual void OnApplicationQuit() { alive = false; }
      }
      

      使用示例:

      class MyClass Settings : Singelton<Settings>
      {
         string param;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        相关资源
        最近更新 更多