Android 设备上的关卡加载速度极慢,但在 iOS 上运行良好 (Unity3D)
Level loading is extremely slow on Android device but works fine on iOS (Unity3D)
我 运行 在 android 设备(运行 Android SDK 23 和 JDK(Java Dev.Kit) 1.8.0_144 在 Unity 5.5.2f1)
我使用了这些 SDK、JDK 和 Unity 版本,因为它们修复了我遇到的其他一些错误问题。
现在我的问题是:
场景 1 是我的主菜单。我想从那里通过一个简短的其他场景 (2) 进入我的主要游戏 (场景 3)。在场景 3 中,用户可以解决难题并获得积分。这些点被保存(似乎在这一点上工作正常)......
但是当我按下后退按钮返回主菜单时,如果没有要保存的点,加载这个场景需要超过 20 秒,而当用户获得一些点时,需要超过 30 秒才能无限。
奇怪的事情:在 iOS 上,这需要 3-4 秒,而且效果很好。 Android 问题仍然存在。
我知道我经常在主菜单中使用 Resources.Load() 来加载一些图形,但即使排除所有 Resources.Load() 函数,这个问题仍然存在。其他场景如 0,2 也需要永远加载。所以我认为这是 Scenemanager.LoadScene("scene name") 的问题。
我也尝试了异步加载(没有进展),我还压缩了所有内容(纹理、精灵),甚至在背景中放置了纯色而不是天空盒。
这是我从 Scene3 返回到 Scene1 的代码:
void Awake()
{
SD = GameObject.FindGameObjectWithTag ("GM").GetComponent<SaveData> ();
MS = GameObject.FindGameObjectWithTag ("MainCamera").GetComponent<MailerScript> ();
}
// Use this for initialization
void Start ()
{
BBH.BackToMapButtonsPanel.SetActive (false);
BackPanelIsActive = false;
AnimationHandler.STATICbeenInVillageScene = true;
}
public void ShowBackToMapButtons()
{
if (!BackPanelIsActive)
{
BBH.BackToMapButtonsPanel.SetActive (true);
BackPanelIsActive = true;
}
else
{
BBH.BackToMapButtonsPanel.SetActive (false);
BackPanelIsActive = false;
}
}
public void BackToHOME()
{
Debug.Log ("Back To Home Executed");
STATICgoToHome = true;
BLACK3.SetActive(true);
WantBackToHome = true;
if (LocalizationCheck.LanguageGerman) {
BLACK3.GetComponentInChildren<Text> ().text = "Möchtest du zurück zum Hauptmenü?";
} else {
BLACK3.GetComponentInChildren<Text> ().text = "Return to main menue?";
}
}
public void GoBackToHomescreen()
{
if (!YesChosen && PostenPunkte.postenRunning == false)
{
CheckNewstarte.newGameStart = false;
if (LocalizationCheck.LanguageGerman) {
BLACK3.GetComponentInChildren<Text> ().text = "Einen Moment.\nDeine Punkte werden gespeichert...";
} else {
BLACK3.GetComponentInChildren<Text> ().text = "One Moment.\nYour points are beeing saved...";
}
StartCoroutine (WaitAndGoBackToHomescreen ());
YesChosen = true;
WantBackToHome = false;
STATICgoToHome = false;
}
}
IEnumerator WaitAndGoBackToHomescreen()
{
yield return new WaitForSeconds(2);
SceneManager.LoadScene(1);
}
public void BackToVillage ()
{
if (Linkposten.parentalgateOpen == false)
{
Debug.Log ("BackToVillageExecuted");
if (MailerScript.camOn == false)
{ //Debug.Log ("Back To Home works");
BackToHOME ();
} else if (MailerScript.camOn)
{ //Debug.Log ("Cam Stop works");
MS.StopCam ();
} else {
//Debug.Log ("Parentalgate Stop works");
ParentalGate.SetActive (false);
Linkposten.parentalgateOpen = false;
}
}
}
这是保存脚本,有很多值(我只是展示一下,以明确这些都是运行顺利地在iOS上):
public void SaveCharacterDATA()
{
//BINARY FORMATTER AND FILE CREATE
BinaryFormatter bf2 = new BinaryFormatter ();
FileStream file2 = File.Create (Application.persistentDataPath + "/CharakterInfo.dat"); // Debug.Log(Application.persistentDataPath); --> shows path
//CONTAINER FOR DATA
CharakterData chara = new CharakterData ();
chara.PD_was_safed = 1; //to check if there is already sth. saved
chara.PD_charakterItemKopf = ShopScript.SaveReference_Kopf;
chara.PD_charakterItemAuge = ShopScript.SaveReference_Auge;
chara.PD_charakterItemTorso = ShopScript.SaveReference_Torso;
chara.PD_charBodyPart = ShopScript.activeBodyPartIndex;
chara.PD_charMainInt = ShopScript.mainInt;
chara.PD_charakterMK1 = ShopScript.boughtItem_MK [0];
chara.PD_charakterMK2 = ShopScript.boughtItem_MK [1];
chara.PD_charakterMK3 = ShopScript.boughtItem_MK [2];
chara.PD_charakterMK4 = ShopScript.boughtItem_MK [3];
chara.PD_charakterMK5 = ShopScript.boughtItem_MK [4];
chara.PD_charakterMK6 = ShopScript.boughtItem_MK [5];
chara.PD_charakterMK7 = ShopScript.boughtItem_MK [6];
chara.PD_charakterMK8 = ShopScript.boughtItem_MK [7];
chara.PD_charakterMA1 = ShopScript.boughtItem_MA [0];
chara.PD_charakterMA2 = ShopScript.boughtItem_MA [1];
chara.PD_charakterMA3 = ShopScript.boughtItem_MA [2];
chara.PD_charakterMA4 = ShopScript.boughtItem_MA [3];
chara.PD_charakterMA5 = ShopScript.boughtItem_MA [4];
chara.PD_charakterMA6 = ShopScript.boughtItem_MA [5];
chara.PD_charakterMA7 = ShopScript.boughtItem_MA [6];
chara.PD_charakterMA8 = ShopScript.boughtItem_MA [7];
chara.PD_charakterMT1 = ShopScript.boughtItem_MT [0];
chara.PD_charakterMT2 = ShopScript.boughtItem_MT [1];
chara.PD_charakterMT3 = ShopScript.boughtItem_MT [2];
chara.PD_charakterMT4 = ShopScript.boughtItem_MT [3];
chara.PD_charakterMT5 = ShopScript.boughtItem_MT [4];
chara.PD_charakterMT6 = ShopScript.boughtItem_MT [5];
chara.PD_charakterMT7 = ShopScript.boughtItem_MT [6];
chara.PD_charakterMT8 = ShopScript.boughtItem_MT [7];
chara.PD_charakterFK1 = ShopScript.boughtItem_FK [0];
chara.PD_charakterFK2 = ShopScript.boughtItem_FK [1];
chara.PD_charakterFK3 = ShopScript.boughtItem_FK [2];
chara.PD_charakterFK4 = ShopScript.boughtItem_FK [3];
chara.PD_charakterFK5 = ShopScript.boughtItem_FK [4];
chara.PD_charakterFK6 = ShopScript.boughtItem_FK [5];
chara.PD_charakterFK7 = ShopScript.boughtItem_FK [6];
chara.PD_charakterFK8 = ShopScript.boughtItem_FK [7];
chara.PD_charakterFA1 = ShopScript.boughtItem_FA [0];
chara.PD_charakterFA2 = ShopScript.boughtItem_FA [1];
chara.PD_charakterFA3 = ShopScript.boughtItem_FA [2];
chara.PD_charakterFA4 = ShopScript.boughtItem_FA [3];
chara.PD_charakterFA5 = ShopScript.boughtItem_FA [4];
chara.PD_charakterFA6 = ShopScript.boughtItem_FA [5];
chara.PD_charakterFA7 = ShopScript.boughtItem_FA [6];
chara.PD_charakterFA8 = ShopScript.boughtItem_FA [7];
chara.PD_charakterFT1 = ShopScript.boughtItem_FT [0];
chara.PD_charakterFT2 = ShopScript.boughtItem_FT [1];
chara.PD_charakterFT3 = ShopScript.boughtItem_FT [2];
chara.PD_charakterFT4 = ShopScript.boughtItem_FT [3];
chara.PD_charakterFT5 = ShopScript.boughtItem_FT [4];
chara.PD_charakterFT6 = ShopScript.boughtItem_FT [5];
chara.PD_charakterFT7 = ShopScript.boughtItem_FT [6];
chara.PD_charakterFT8 = ShopScript.boughtItem_FT [7];
//CONTAINER INSIDE FILE AND CLOSE
bf2.Serialize (file2, chara);
file2.Close ();
Debug.Log ("Charakter Data Safed");
}
public void LoadCharacterDATA()
{
if (File.Exists (Application.persistentDataPath + "/CharakterInfo.dat") )
{
BinaryFormatter bf = new BinaryFormatter ();
FileStream file2 = File.Open (Application.persistentDataPath + "/CharakterInfo.dat", FileMode.Open);
CharakterData chara = (CharakterData)bf.Deserialize (file2);
file2.Close ();
wasSafedIndex = chara.PD_was_safed;
SdCharakterItemString_Kopf = chara.PD_charakterItemKopf;
SdCharakterItemString_Auge = chara.PD_charakterItemAuge;
SdCharakterItemString_Torso = chara.PD_charakterItemTorso;
SdCharakterActiveBodyPart = chara.PD_charBodyPart;
SdCharakterMainInt = chara.PD_charMainInt;
SdCharakterMK1 = chara.PD_charakterMK1;
SdCharakterMK2 = chara.PD_charakterMK2;
SdCharakterMK3 = chara.PD_charakterMK3;
SdCharakterMK4 = chara.PD_charakterMK4;
SdCharakterMK5 = chara.PD_charakterMK5;
SdCharakterMK6 = chara.PD_charakterMK6;
SdCharakterMK7 = chara.PD_charakterMK7;
SdCharakterMK8 = chara.PD_charakterMK8;
SdCharakterMA1 = chara.PD_charakterMA1;
SdCharakterMA2 = chara.PD_charakterMA2;
SdCharakterMA3 = chara.PD_charakterMA3;
SdCharakterMA4 = chara.PD_charakterMA4;
SdCharakterMA5 = chara.PD_charakterMA5;
SdCharakterMA6 = chara.PD_charakterMA6;
SdCharakterMA7 = chara.PD_charakterMA7;
SdCharakterMA8 = chara.PD_charakterMA8;
SdCharakterMT1 = chara.PD_charakterMT1;
SdCharakterMT2 = chara.PD_charakterMT2;
SdCharakterMT3 = chara.PD_charakterMT3;
SdCharakterMT4 = chara.PD_charakterMT4;
SdCharakterMT5 = chara.PD_charakterMT5;
SdCharakterMT6 = chara.PD_charakterMT6;
SdCharakterMT7 = chara.PD_charakterMT7;
SdCharakterMT8 = chara.PD_charakterMT8;
SdCharakterFK1 = chara.PD_charakterFK1;
SdCharakterFK2 = chara.PD_charakterFK2;
SdCharakterFK3 = chara.PD_charakterFK3;
SdCharakterFK4 = chara.PD_charakterFK4;
SdCharakterFK5 = chara.PD_charakterFK5;
SdCharakterFK6 = chara.PD_charakterFK6;
SdCharakterFK7 = chara.PD_charakterFK7;
SdCharakterFK8 = chara.PD_charakterFK8;
SdCharakterFA1 = chara.PD_charakterFA1;
SdCharakterFA2 = chara.PD_charakterFA2;
SdCharakterFA3 = chara.PD_charakterFA3;
SdCharakterFA4 = chara.PD_charakterFA4;
SdCharakterFA5 = chara.PD_charakterFA5;
SdCharakterFA6 = chara.PD_charakterFA6;
SdCharakterFA7 = chara.PD_charakterFA7;
SdCharakterFA8 = chara.PD_charakterFA8;
SdCharakterFT1 = chara.PD_charakterFT1;
SdCharakterFT2 = chara.PD_charakterFT2;
SdCharakterFT3 = chara.PD_charakterFT3;
SdCharakterFT4 = chara.PD_charakterFT4;
SdCharakterFT5 = chara.PD_charakterFT5;
SdCharakterFT6 = chara.PD_charakterFT6;
SdCharakterFT7 = chara.PD_charakterFT7;
SdCharakterFT8 = chara.PD_charakterFT8;
Debug.Log ("charakter Data Loaded");
}
}
场景 1 中的代码在从场景 0 到场景 1 时执行完美。
void Awake ()
{
SD = GameObject.FindGameObjectWithTag ("GM").GetComponent<SaveData> ();
boughtItem_MK = new string[8];
boughtItem_MA = new string[8];
boughtItem_MT = new string[8];
boughtItem_FK = new string[8];
boughtItem_FA = new string[8];
boughtItem_FT = new string[8];
//male items
boughtItem_MK [0] = SaveData.SdCharakterMK1;
boughtItem_MK [1] = SaveData.SdCharakterMK2;
boughtItem_MK [2] = SaveData.SdCharakterMK3;
boughtItem_MK [3] = SaveData.SdCharakterMK4;
boughtItem_MK [4] = SaveData.SdCharakterMK5;
boughtItem_MK [5] = SaveData.SdCharakterMK6;
boughtItem_MK [6] = SaveData.SdCharakterMK7;
boughtItem_MK [7] = SaveData.SdCharakterMK8;
boughtItem_MA [0] = SaveData.SdCharakterMA1;
boughtItem_MA [1] = SaveData.SdCharakterMA2;
boughtItem_MA [2] = SaveData.SdCharakterMA3;
boughtItem_MA [3] = SaveData.SdCharakterMA4;
boughtItem_MA [4] = SaveData.SdCharakterMA5;
boughtItem_MA [5] = SaveData.SdCharakterMA6;
boughtItem_MA [6] = SaveData.SdCharakterMA7;
boughtItem_MA [7] = SaveData.SdCharakterMA8;
boughtItem_MT [0] = SaveData.SdCharakterMT1;
boughtItem_MT [1] = SaveData.SdCharakterMT2;
boughtItem_MT [2] = SaveData.SdCharakterMT3;
boughtItem_MT [3] = SaveData.SdCharakterMT4;
boughtItem_MT [4] = SaveData.SdCharakterMT5;
boughtItem_MT [5] = SaveData.SdCharakterMT6;
boughtItem_MT [6] = SaveData.SdCharakterMT7;
boughtItem_MT [7] = SaveData.SdCharakterMT8;
//female items
boughtItem_FK [0] = SaveData.SdCharakterFK1;
boughtItem_FK [1] = SaveData.SdCharakterFK2;
boughtItem_FK [2] = SaveData.SdCharakterFK3;
boughtItem_FK [3] = SaveData.SdCharakterFK4;
boughtItem_FK [4] = SaveData.SdCharakterFK5;
boughtItem_FK [5] = SaveData.SdCharakterFK6;
boughtItem_FK [6] = SaveData.SdCharakterFK7;
boughtItem_FK [7] = SaveData.SdCharakterFK8;
boughtItem_FA [0] = SaveData.SdCharakterFA1;
boughtItem_FA [1] = SaveData.SdCharakterFA2;
boughtItem_FA [2] = SaveData.SdCharakterFA3;
boughtItem_FA [3] = SaveData.SdCharakterFA4;
boughtItem_FA [4] = SaveData.SdCharakterFA5;
boughtItem_FA [5] = SaveData.SdCharakterFA6;
boughtItem_FA [6] = SaveData.SdCharakterFA7;
boughtItem_FA [7] = SaveData.SdCharakterFA8;
boughtItem_FT [0] = SaveData.SdCharakterFT1;
boughtItem_FT [1] = SaveData.SdCharakterFT2;
boughtItem_FT [2] = SaveData.SdCharakterFT3;
boughtItem_FT [3] = SaveData.SdCharakterFT4;
boughtItem_FT [4] = SaveData.SdCharakterFT5;
boughtItem_FT [5] = SaveData.SdCharakterFT6;
boughtItem_FT [6] = SaveData.SdCharakterFT7;
boughtItem_FT [7] = SaveData.SdCharakterFT8;
}
// Use this for initialization
void Start ()
{
//Charakter load and assign sprites
SD.LoadCharacterDATA ();
if (SaveData.CharPicIndex == 1)
{
charakter.sprite = CharMale;
CharIndexCheck = 1;
}
if (SaveData.CharPicIndex == 2)
{
charakter.sprite = CharFemale;
CharIndexCheck = 2;
}
if (SaveData.wasSafedIndex == 1)
{
currINT = SaveData.SdCharakterMainInt;
}
else if (SaveData.wasSafedIndex == 0)
{
currINT = 2;
}
mainInt = currINT;
leftInt = mainInt - 1;
rightInt = mainInt + 1;
LoadSafedItemSetup ();
ShowCurrItemSetup ();
if (!AnimationHandler.STATICfirstTimeStartApp)
{
SetUpNameAndMoney ();
}
if (PostenPunkte.earnedPoints)
{
SetUpNameAndMoney ();
//Debug.Log ("earnedPosten Setup executed");
}
}
IEnumerator WaitforNameAndMoneyToLoad()
{
yield return new WaitForSeconds (1);
MoneyPoints = SaveData.Savedmoney;
currMoney = MoneyPoints;
MoneyText.text = currMoney.ToString ();
UserNameText.text = CheckNewstarte.PlayerName;
UserProfilMoney.text = currMoney.ToString ();
//Debug.Log ("Moneypoints = " + MoneyPoints + " and UserprofilMoney = " + UserProfilMoney.text);
}
public void SetUpNameAndMoney()
{
//Only in iOS/Android
//Show saved money
SD.LoadDATA ();
StartCoroutine (WaitforNameAndMoneyToLoad ());
}
难道是……与协程?正如我提到的,它(有时)有效,但需要很长时间。
我希望有人能帮助我,因为很长一段时间以来一直在努力解决这个问题。
提前致谢!
[已解决]
行。要解决具有上述规格的 android 设备上加载缓慢的问题:
检查你是否 运行
Resources.Load()
我读到你应该只在 Start() 方法中使用它们,但实际上我删除了每个 Resource.Load() 函数并替换了我试图做的精灵加载。我现在只是在 Unity 中分配 public 变量。它解决了这个问题。加载时间现在少于 3 秒。
我 运行 在 android 设备(运行 Android SDK 23 和 JDK(Java Dev.Kit) 1.8.0_144 在 Unity 5.5.2f1) 我使用了这些 SDK、JDK 和 Unity 版本,因为它们修复了我遇到的其他一些错误问题。
现在我的问题是: 场景 1 是我的主菜单。我想从那里通过一个简短的其他场景 (2) 进入我的主要游戏 (场景 3)。在场景 3 中,用户可以解决难题并获得积分。这些点被保存(似乎在这一点上工作正常)...... 但是当我按下后退按钮返回主菜单时,如果没有要保存的点,加载这个场景需要超过 20 秒,而当用户获得一些点时,需要超过 30 秒才能无限。
奇怪的事情:在 iOS 上,这需要 3-4 秒,而且效果很好。 Android 问题仍然存在。
我知道我经常在主菜单中使用 Resources.Load() 来加载一些图形,但即使排除所有 Resources.Load() 函数,这个问题仍然存在。其他场景如 0,2 也需要永远加载。所以我认为这是 Scenemanager.LoadScene("scene name") 的问题。
我也尝试了异步加载(没有进展),我还压缩了所有内容(纹理、精灵),甚至在背景中放置了纯色而不是天空盒。
这是我从 Scene3 返回到 Scene1 的代码:
void Awake()
{
SD = GameObject.FindGameObjectWithTag ("GM").GetComponent<SaveData> ();
MS = GameObject.FindGameObjectWithTag ("MainCamera").GetComponent<MailerScript> ();
}
// Use this for initialization
void Start ()
{
BBH.BackToMapButtonsPanel.SetActive (false);
BackPanelIsActive = false;
AnimationHandler.STATICbeenInVillageScene = true;
}
public void ShowBackToMapButtons()
{
if (!BackPanelIsActive)
{
BBH.BackToMapButtonsPanel.SetActive (true);
BackPanelIsActive = true;
}
else
{
BBH.BackToMapButtonsPanel.SetActive (false);
BackPanelIsActive = false;
}
}
public void BackToHOME()
{
Debug.Log ("Back To Home Executed");
STATICgoToHome = true;
BLACK3.SetActive(true);
WantBackToHome = true;
if (LocalizationCheck.LanguageGerman) {
BLACK3.GetComponentInChildren<Text> ().text = "Möchtest du zurück zum Hauptmenü?";
} else {
BLACK3.GetComponentInChildren<Text> ().text = "Return to main menue?";
}
}
public void GoBackToHomescreen()
{
if (!YesChosen && PostenPunkte.postenRunning == false)
{
CheckNewstarte.newGameStart = false;
if (LocalizationCheck.LanguageGerman) {
BLACK3.GetComponentInChildren<Text> ().text = "Einen Moment.\nDeine Punkte werden gespeichert...";
} else {
BLACK3.GetComponentInChildren<Text> ().text = "One Moment.\nYour points are beeing saved...";
}
StartCoroutine (WaitAndGoBackToHomescreen ());
YesChosen = true;
WantBackToHome = false;
STATICgoToHome = false;
}
}
IEnumerator WaitAndGoBackToHomescreen()
{
yield return new WaitForSeconds(2);
SceneManager.LoadScene(1);
}
public void BackToVillage ()
{
if (Linkposten.parentalgateOpen == false)
{
Debug.Log ("BackToVillageExecuted");
if (MailerScript.camOn == false)
{ //Debug.Log ("Back To Home works");
BackToHOME ();
} else if (MailerScript.camOn)
{ //Debug.Log ("Cam Stop works");
MS.StopCam ();
} else {
//Debug.Log ("Parentalgate Stop works");
ParentalGate.SetActive (false);
Linkposten.parentalgateOpen = false;
}
}
}
这是保存脚本,有很多值(我只是展示一下,以明确这些都是运行顺利地在iOS上):
public void SaveCharacterDATA()
{
//BINARY FORMATTER AND FILE CREATE
BinaryFormatter bf2 = new BinaryFormatter ();
FileStream file2 = File.Create (Application.persistentDataPath + "/CharakterInfo.dat"); // Debug.Log(Application.persistentDataPath); --> shows path
//CONTAINER FOR DATA
CharakterData chara = new CharakterData ();
chara.PD_was_safed = 1; //to check if there is already sth. saved
chara.PD_charakterItemKopf = ShopScript.SaveReference_Kopf;
chara.PD_charakterItemAuge = ShopScript.SaveReference_Auge;
chara.PD_charakterItemTorso = ShopScript.SaveReference_Torso;
chara.PD_charBodyPart = ShopScript.activeBodyPartIndex;
chara.PD_charMainInt = ShopScript.mainInt;
chara.PD_charakterMK1 = ShopScript.boughtItem_MK [0];
chara.PD_charakterMK2 = ShopScript.boughtItem_MK [1];
chara.PD_charakterMK3 = ShopScript.boughtItem_MK [2];
chara.PD_charakterMK4 = ShopScript.boughtItem_MK [3];
chara.PD_charakterMK5 = ShopScript.boughtItem_MK [4];
chara.PD_charakterMK6 = ShopScript.boughtItem_MK [5];
chara.PD_charakterMK7 = ShopScript.boughtItem_MK [6];
chara.PD_charakterMK8 = ShopScript.boughtItem_MK [7];
chara.PD_charakterMA1 = ShopScript.boughtItem_MA [0];
chara.PD_charakterMA2 = ShopScript.boughtItem_MA [1];
chara.PD_charakterMA3 = ShopScript.boughtItem_MA [2];
chara.PD_charakterMA4 = ShopScript.boughtItem_MA [3];
chara.PD_charakterMA5 = ShopScript.boughtItem_MA [4];
chara.PD_charakterMA6 = ShopScript.boughtItem_MA [5];
chara.PD_charakterMA7 = ShopScript.boughtItem_MA [6];
chara.PD_charakterMA8 = ShopScript.boughtItem_MA [7];
chara.PD_charakterMT1 = ShopScript.boughtItem_MT [0];
chara.PD_charakterMT2 = ShopScript.boughtItem_MT [1];
chara.PD_charakterMT3 = ShopScript.boughtItem_MT [2];
chara.PD_charakterMT4 = ShopScript.boughtItem_MT [3];
chara.PD_charakterMT5 = ShopScript.boughtItem_MT [4];
chara.PD_charakterMT6 = ShopScript.boughtItem_MT [5];
chara.PD_charakterMT7 = ShopScript.boughtItem_MT [6];
chara.PD_charakterMT8 = ShopScript.boughtItem_MT [7];
chara.PD_charakterFK1 = ShopScript.boughtItem_FK [0];
chara.PD_charakterFK2 = ShopScript.boughtItem_FK [1];
chara.PD_charakterFK3 = ShopScript.boughtItem_FK [2];
chara.PD_charakterFK4 = ShopScript.boughtItem_FK [3];
chara.PD_charakterFK5 = ShopScript.boughtItem_FK [4];
chara.PD_charakterFK6 = ShopScript.boughtItem_FK [5];
chara.PD_charakterFK7 = ShopScript.boughtItem_FK [6];
chara.PD_charakterFK8 = ShopScript.boughtItem_FK [7];
chara.PD_charakterFA1 = ShopScript.boughtItem_FA [0];
chara.PD_charakterFA2 = ShopScript.boughtItem_FA [1];
chara.PD_charakterFA3 = ShopScript.boughtItem_FA [2];
chara.PD_charakterFA4 = ShopScript.boughtItem_FA [3];
chara.PD_charakterFA5 = ShopScript.boughtItem_FA [4];
chara.PD_charakterFA6 = ShopScript.boughtItem_FA [5];
chara.PD_charakterFA7 = ShopScript.boughtItem_FA [6];
chara.PD_charakterFA8 = ShopScript.boughtItem_FA [7];
chara.PD_charakterFT1 = ShopScript.boughtItem_FT [0];
chara.PD_charakterFT2 = ShopScript.boughtItem_FT [1];
chara.PD_charakterFT3 = ShopScript.boughtItem_FT [2];
chara.PD_charakterFT4 = ShopScript.boughtItem_FT [3];
chara.PD_charakterFT5 = ShopScript.boughtItem_FT [4];
chara.PD_charakterFT6 = ShopScript.boughtItem_FT [5];
chara.PD_charakterFT7 = ShopScript.boughtItem_FT [6];
chara.PD_charakterFT8 = ShopScript.boughtItem_FT [7];
//CONTAINER INSIDE FILE AND CLOSE
bf2.Serialize (file2, chara);
file2.Close ();
Debug.Log ("Charakter Data Safed");
}
public void LoadCharacterDATA()
{
if (File.Exists (Application.persistentDataPath + "/CharakterInfo.dat") )
{
BinaryFormatter bf = new BinaryFormatter ();
FileStream file2 = File.Open (Application.persistentDataPath + "/CharakterInfo.dat", FileMode.Open);
CharakterData chara = (CharakterData)bf.Deserialize (file2);
file2.Close ();
wasSafedIndex = chara.PD_was_safed;
SdCharakterItemString_Kopf = chara.PD_charakterItemKopf;
SdCharakterItemString_Auge = chara.PD_charakterItemAuge;
SdCharakterItemString_Torso = chara.PD_charakterItemTorso;
SdCharakterActiveBodyPart = chara.PD_charBodyPart;
SdCharakterMainInt = chara.PD_charMainInt;
SdCharakterMK1 = chara.PD_charakterMK1;
SdCharakterMK2 = chara.PD_charakterMK2;
SdCharakterMK3 = chara.PD_charakterMK3;
SdCharakterMK4 = chara.PD_charakterMK4;
SdCharakterMK5 = chara.PD_charakterMK5;
SdCharakterMK6 = chara.PD_charakterMK6;
SdCharakterMK7 = chara.PD_charakterMK7;
SdCharakterMK8 = chara.PD_charakterMK8;
SdCharakterMA1 = chara.PD_charakterMA1;
SdCharakterMA2 = chara.PD_charakterMA2;
SdCharakterMA3 = chara.PD_charakterMA3;
SdCharakterMA4 = chara.PD_charakterMA4;
SdCharakterMA5 = chara.PD_charakterMA5;
SdCharakterMA6 = chara.PD_charakterMA6;
SdCharakterMA7 = chara.PD_charakterMA7;
SdCharakterMA8 = chara.PD_charakterMA8;
SdCharakterMT1 = chara.PD_charakterMT1;
SdCharakterMT2 = chara.PD_charakterMT2;
SdCharakterMT3 = chara.PD_charakterMT3;
SdCharakterMT4 = chara.PD_charakterMT4;
SdCharakterMT5 = chara.PD_charakterMT5;
SdCharakterMT6 = chara.PD_charakterMT6;
SdCharakterMT7 = chara.PD_charakterMT7;
SdCharakterMT8 = chara.PD_charakterMT8;
SdCharakterFK1 = chara.PD_charakterFK1;
SdCharakterFK2 = chara.PD_charakterFK2;
SdCharakterFK3 = chara.PD_charakterFK3;
SdCharakterFK4 = chara.PD_charakterFK4;
SdCharakterFK5 = chara.PD_charakterFK5;
SdCharakterFK6 = chara.PD_charakterFK6;
SdCharakterFK7 = chara.PD_charakterFK7;
SdCharakterFK8 = chara.PD_charakterFK8;
SdCharakterFA1 = chara.PD_charakterFA1;
SdCharakterFA2 = chara.PD_charakterFA2;
SdCharakterFA3 = chara.PD_charakterFA3;
SdCharakterFA4 = chara.PD_charakterFA4;
SdCharakterFA5 = chara.PD_charakterFA5;
SdCharakterFA6 = chara.PD_charakterFA6;
SdCharakterFA7 = chara.PD_charakterFA7;
SdCharakterFA8 = chara.PD_charakterFA8;
SdCharakterFT1 = chara.PD_charakterFT1;
SdCharakterFT2 = chara.PD_charakterFT2;
SdCharakterFT3 = chara.PD_charakterFT3;
SdCharakterFT4 = chara.PD_charakterFT4;
SdCharakterFT5 = chara.PD_charakterFT5;
SdCharakterFT6 = chara.PD_charakterFT6;
SdCharakterFT7 = chara.PD_charakterFT7;
SdCharakterFT8 = chara.PD_charakterFT8;
Debug.Log ("charakter Data Loaded");
}
}
场景 1 中的代码在从场景 0 到场景 1 时执行完美。
void Awake ()
{
SD = GameObject.FindGameObjectWithTag ("GM").GetComponent<SaveData> ();
boughtItem_MK = new string[8];
boughtItem_MA = new string[8];
boughtItem_MT = new string[8];
boughtItem_FK = new string[8];
boughtItem_FA = new string[8];
boughtItem_FT = new string[8];
//male items
boughtItem_MK [0] = SaveData.SdCharakterMK1;
boughtItem_MK [1] = SaveData.SdCharakterMK2;
boughtItem_MK [2] = SaveData.SdCharakterMK3;
boughtItem_MK [3] = SaveData.SdCharakterMK4;
boughtItem_MK [4] = SaveData.SdCharakterMK5;
boughtItem_MK [5] = SaveData.SdCharakterMK6;
boughtItem_MK [6] = SaveData.SdCharakterMK7;
boughtItem_MK [7] = SaveData.SdCharakterMK8;
boughtItem_MA [0] = SaveData.SdCharakterMA1;
boughtItem_MA [1] = SaveData.SdCharakterMA2;
boughtItem_MA [2] = SaveData.SdCharakterMA3;
boughtItem_MA [3] = SaveData.SdCharakterMA4;
boughtItem_MA [4] = SaveData.SdCharakterMA5;
boughtItem_MA [5] = SaveData.SdCharakterMA6;
boughtItem_MA [6] = SaveData.SdCharakterMA7;
boughtItem_MA [7] = SaveData.SdCharakterMA8;
boughtItem_MT [0] = SaveData.SdCharakterMT1;
boughtItem_MT [1] = SaveData.SdCharakterMT2;
boughtItem_MT [2] = SaveData.SdCharakterMT3;
boughtItem_MT [3] = SaveData.SdCharakterMT4;
boughtItem_MT [4] = SaveData.SdCharakterMT5;
boughtItem_MT [5] = SaveData.SdCharakterMT6;
boughtItem_MT [6] = SaveData.SdCharakterMT7;
boughtItem_MT [7] = SaveData.SdCharakterMT8;
//female items
boughtItem_FK [0] = SaveData.SdCharakterFK1;
boughtItem_FK [1] = SaveData.SdCharakterFK2;
boughtItem_FK [2] = SaveData.SdCharakterFK3;
boughtItem_FK [3] = SaveData.SdCharakterFK4;
boughtItem_FK [4] = SaveData.SdCharakterFK5;
boughtItem_FK [5] = SaveData.SdCharakterFK6;
boughtItem_FK [6] = SaveData.SdCharakterFK7;
boughtItem_FK [7] = SaveData.SdCharakterFK8;
boughtItem_FA [0] = SaveData.SdCharakterFA1;
boughtItem_FA [1] = SaveData.SdCharakterFA2;
boughtItem_FA [2] = SaveData.SdCharakterFA3;
boughtItem_FA [3] = SaveData.SdCharakterFA4;
boughtItem_FA [4] = SaveData.SdCharakterFA5;
boughtItem_FA [5] = SaveData.SdCharakterFA6;
boughtItem_FA [6] = SaveData.SdCharakterFA7;
boughtItem_FA [7] = SaveData.SdCharakterFA8;
boughtItem_FT [0] = SaveData.SdCharakterFT1;
boughtItem_FT [1] = SaveData.SdCharakterFT2;
boughtItem_FT [2] = SaveData.SdCharakterFT3;
boughtItem_FT [3] = SaveData.SdCharakterFT4;
boughtItem_FT [4] = SaveData.SdCharakterFT5;
boughtItem_FT [5] = SaveData.SdCharakterFT6;
boughtItem_FT [6] = SaveData.SdCharakterFT7;
boughtItem_FT [7] = SaveData.SdCharakterFT8;
}
// Use this for initialization
void Start ()
{
//Charakter load and assign sprites
SD.LoadCharacterDATA ();
if (SaveData.CharPicIndex == 1)
{
charakter.sprite = CharMale;
CharIndexCheck = 1;
}
if (SaveData.CharPicIndex == 2)
{
charakter.sprite = CharFemale;
CharIndexCheck = 2;
}
if (SaveData.wasSafedIndex == 1)
{
currINT = SaveData.SdCharakterMainInt;
}
else if (SaveData.wasSafedIndex == 0)
{
currINT = 2;
}
mainInt = currINT;
leftInt = mainInt - 1;
rightInt = mainInt + 1;
LoadSafedItemSetup ();
ShowCurrItemSetup ();
if (!AnimationHandler.STATICfirstTimeStartApp)
{
SetUpNameAndMoney ();
}
if (PostenPunkte.earnedPoints)
{
SetUpNameAndMoney ();
//Debug.Log ("earnedPosten Setup executed");
}
}
IEnumerator WaitforNameAndMoneyToLoad()
{
yield return new WaitForSeconds (1);
MoneyPoints = SaveData.Savedmoney;
currMoney = MoneyPoints;
MoneyText.text = currMoney.ToString ();
UserNameText.text = CheckNewstarte.PlayerName;
UserProfilMoney.text = currMoney.ToString ();
//Debug.Log ("Moneypoints = " + MoneyPoints + " and UserprofilMoney = " + UserProfilMoney.text);
}
public void SetUpNameAndMoney()
{
//Only in iOS/Android
//Show saved money
SD.LoadDATA ();
StartCoroutine (WaitforNameAndMoneyToLoad ());
}
难道是……与协程?正如我提到的,它(有时)有效,但需要很长时间。
我希望有人能帮助我,因为很长一段时间以来一直在努力解决这个问题。 提前致谢!
[已解决] 行。要解决具有上述规格的 android 设备上加载缓慢的问题:
检查你是否 运行
Resources.Load()
我读到你应该只在 Start() 方法中使用它们,但实际上我删除了每个 Resource.Load() 函数并替换了我试图做的精灵加载。我现在只是在 Unity 中分配 public 变量。它解决了这个问题。加载时间现在少于 3 秒。