如何在 Unity 中创建输入名称脚本 [重复]
Posted
技术标签:
【中文标题】如何在 Unity 中创建输入名称脚本 [重复]【英文标题】:How to Create an Input Name Script in Unity [duplicate] 【发布时间】: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;
【问题讨论】:
【参考方案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");
缺点:
-
您不仅可以在场景之间传递数据,还可以在实例之间(游戏会话)传递数据。
易于管理,因为 Unity 处理所有后台进程。
可用于存储数据以跟踪高分。
优点:
-
使用文件系统。
可以轻松地从 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;
【讨论】:
以上是关于如何在 Unity 中创建输入名称脚本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 2008 中创建具有新名称的重复表
3、在Unity3D中创建一个脚本,默认继承哪个类。( )?