如何将得分值从一个场景传递到另一个场景?
我尝试过以下方法:
场景一:
void Start () {
score = 0;
updateScoreView ();
StartCoroutine (DelayLoadlevel(20));
}
public void updateScoreView(){
score_text.text = "The Score: "+ score;
}
public void AddNewScore(int NewscoreValue){
score = score + NewscoreValue;
updateScoreView ();
}
IEnumerator DelayLoadlevel(float seconds){
yield return new WaitForSeconds(10);
secondsLeft = seconds;
loadingStart = true;
do {
yield return new WaitForSeconds(1);
} while(--secondsLeft >0);
// here I should store my last score before move to level two
PlayerPrefs.SetInt ("player_score", score);
Application.LoadLevel (2);
}
Run Code Online (Sandbox Code Playgroud)
场景二:
public …Run Code Online (Sandbox Code Playgroud) MonoBehaviour扩展了行为和行为扩展组件.我想知道为什么这些类是分开的和这些类的语义含义.是否有任何分离这些课程的目的?是否有任何类直接扩展行为或组件?
我知道我们必须使用MonoBehaviour在Unity中创建C#代码.但是,我对Unity作为游戏引擎的架构感兴趣.
我一直在使用Unity中的保存和加载,我将序列化的类保存到文件中.我有一个Serializable类:
[Serializable]
class Save
{
public List<int> ID = new List<int>();
public List<int> Amounts = new List<int>();
}
Run Code Online (Sandbox Code Playgroud)
并将其保存到文件A-OK.我可以加载它没有错误,但如果我想稍后添加:
[Serializable]
class Save
{
public List<int> ID = new List<int>();
public List<int> Amounts = new List<int>();
public int extra = 0;
}
Run Code Online (Sandbox Code Playgroud)
我运行我的脚本它给了我一个反序列化错误,我完全理解,当我将反序列化文件转换为我的新类'保存'时,我添加的新变量不存在,它给了我错误.
我在商店中修复资产时发现了这个错误,我知道一个修复可以只是更改文件名,因此创建了一个新文件,但我不想只删除之前保存的内容.
所以我的问题是,如果我想在我的序列化类中添加更多变量,如果人们要更新资产,我将如何捕获并调整旧版本的变量?
谢谢!
假设我有一堂这样的课:
[System.Serializable]
public class Item {
private Transform _transform;
private float _value;
}
Run Code Online (Sandbox Code Playgroud)
我想使用 BinaryFormatter 序列化此类。我无法序列化Transform组件,因此我需要在序列化时忽略它,但我仍然需要此_transform字段在检查器中可见。在此示例中,仅应序列化字段_value 。
如果我在_transform字段上使用[System.NonSerialized],它将在 Unity 检查器中不可见,如果我使用[SerializeField],我无法使用 BinaryFormatter 序列化 Transform。
看起来有点像悖论……可以这样做吗?
主要目标:从在线网址加载图像,然后在移动设备上的/ Repo/{VenueName}目录中本地保存图像(任何类型).这样,当场景加载首先检查本地图像然后调用www请求(如果移动设备上已不存在)时,它将有望保存在未来的移动数据上.
我有在线图像,我从json文件中提取了网址,现在我想将它们本地存储在移动设备上,以便为最终用户保存数据传输.
我已经围绕着持久的数据路径和IO.director进行了循环,并不断遇到问题.
目前我有一个从在线保存文本并成功将其存储在设备上的功能,但如果我将它用于图像,由于下面显示的字符串参数,它将无法工作,我试图将其转换为字节编辑功能也不是通过它www.text并得到图像损坏错误.
这是我用于文本保存文件的旧功能.
public void writeStringToFile( string str, string filename ){
#if !WEB_BUILD
string path = pathForDocumentsFile( filename );
FileStream file = new FileStream (path, FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter( file );
sw.WriteLine( str );
sw.Close();
file.Close();
#endif
}
public string pathForDocumentsFile( string filename ){
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
string path = Application.dataPath.Substring( 0, Application.dataPath.Length - 5 );
path = path.Substring( 0, path.LastIndexOf( '/' ) );
return Path.Combine( Path.Combine( path, "Documents" ), filename ); …Run Code Online (Sandbox Code Playgroud) 当我从编辑器运行游戏并保存加载数据时,我发现数据在:C:\Users\User\AppData\LocalLow\DefaultCompany\projectname\data.
当我构建它并获得可执行文件时,该数据仍可正常加载,但如果我保存并重新启动,则不会保存.但是当我从编辑器中启动它时它会这样做.
这是我的代码中的错误,还是我不从Unity Editor运行它的其他地方的文件?
稍后当我导出游戏以启动游戏时,我会拥有持久数据I Json文件,这些文件必须与游戏一起使用才能运行.
为清楚起见,这里是处理Json的保存/加载的类:
public class DataHandler
{
//Save Data
public static void saveData<T>(T dataToSave, string dataFileName)
{
string tempPath = Path.Combine(Application.persistentDataPath, "data");
tempPath = Path.Combine(tempPath, dataFileName + ".txt");
//Convert To Json then to bytes
string jsonData = JsonUtility.ToJson(dataToSave, true);
byte[] jsonByte = Encoding.ASCII.GetBytes(jsonData);
//Create Directory if it does not exist
if (!Directory.Exists(Path.GetDirectoryName(tempPath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(tempPath));
}
//Debug.Log(path);
try
{
File.WriteAllBytes(tempPath, jsonByte);
Debug.Log("Saved Data to: " + tempPath.Replace("/", "\\"));
}
catch (Exception e)
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试为Samsung Gear VR(与Samsung Galaxy S8)开发一个应用程序,因为它要求我拔出USB电缆才能将手机插入Gear VR设备,所以我无法使用USB调试。
如何将错误和调试消息导出到我可以阅读的文件中,以找出问题所在?
到目前为止,研究表明,Android Unity Player不会保存到其他平台上的日志文件中,而adb是进行USB调试的方法……只有我不能为Gear做到这一点。
c# android unity-game-engine samsung-galaxy-gear virtual-reality
这就是我在 android 中读取文本文件的方式。
#if UNITY_ANDROID
string full_path = string.Format("{0}/{1}",Application.streamingAssetsPath, path_with_extention_under_streaming_assets_folder);
// Android only use WWW to read file
WWW reader = new WWW(full_path);
while (!reader.isDone){}
json = reader.text;
// PK Debug 2017.12.11
Debug.Log(json);
#endif
Run Code Online (Sandbox Code Playgroud)
这就是我从电脑读取文本文件的方式。
#if UNITY_STANDALONE
string full_path = string.Format("{0}/{1}", Application.streamingAssetsPath, path_with_extention_under_streaming_assets_folder);
StreamReader reader = new StreamReader(full_path);
json = reader.ReadToEnd().Trim();
reader.Close();
#endif
Run Code Online (Sandbox Code Playgroud)
现在我的问题是我不知道如何在移动设备上编写文件,因为我在独立设备上这样做
#if UNITY_STANDALONE
StreamWriter writer = new StreamWriter(path, false);
writer.WriteLine(json);
writer.Close();
#endif
Run Code Online (Sandbox Code Playgroud)
帮助任何人
我正在寻找一种保存用户游戏进度的方法,我正在寻找无法篡改/修改的东西。我希望能够独立于平台。我希望它存储在游戏文件中,以便用户可以将他们的数据传输到不同的计算机(使用闪存驱动器或其他东西)。(如果我在任何方面错了,请纠正我)但我相信,因为我需要安全且独立于平台,从而将玩家偏好从等式中删除。我知道有一种方法可以通过使用二进制加密来保存数据,但我不知道它是如何工作的以及用户是否可以将数据从计算机传输到计算机。有没有更好的方法来保存数据?加密是通过二进制的方式吗?如果是这样我会怎么做?谢谢:)如果您有任何问题,请随时询问。
编辑:我知道没有什么是完全安全的,我正在寻找可以阻止普通用户进入文件、更改浮动以及在游戏中拥有大量资金的东西。