我一直在谷歌搜索许多小时试图保持云端'重新加载场景时的位置,但仍然没有运气。
你能在我的代码中指出我的错误吗?
using UnityEngine;
using System.Collections;
public class MenuScript : MonoBehaviour {
public Transform[] clouds;
public float speed = 0.2f;
void Update () {
for(int i = 0; i < instance.clouds.Length; i++){
if(instance.clouds[i].position.x >= 10f){
instance.clouds[i].position = new Vector3(-10f, instance.clouds[i].position.y, 0);
}
Vector3 vec = instance.clouds[i].position;
vec.x += speed * Time.deltaTime;
instance.clouds[i].position = vec;
}
}
static MenuScript instance;
void Awake(){
if(instance == null){
instance = this;
DontDestroyOnLoad(gameObject);
}else{
Destroy(gameObject);
}
}
}
答案 0 :(得分:0)
用户PlayerPrefs替换DontDestroyOnLoad:
PlayerPrefs.SetFloat("x", 10.0f);
要获取值,请使用
PlayerPrefs.GetFloat("x");
PlayerPrefs在游戏会话之间存储和访问玩家偏好。
在Mac OS X上,PlayerPref存储在〜/ Library / Preferences文件夹中,名为unity。[公司名称]。[产品名称] .plist,其中公司和产品名称是设置的名称项目设置。相同的.plist文件用于在编辑器和独立播放器中运行的两个项目。
在Windows上,PlayerPrefs存储在HKCU \ Software [公司名称] [产品名称]键下的注册表中,其中公司和产品名称是在项目设置中设置的名称。
在Linux上,可以使用项目设置中指定的公司和产品名称再次在〜/ .config / unity3d / [CompanyName] / [ProductName]中找到PlayerPref。
在Windows应用商店应用中,可在%userprofile%\ AppData \ Local \ Packages [ProductPackageId]&gt; \ LocalState \ playerprefs.dat
答案 1 :(得分:0)
这可能取决于云阵列的填充方式。可能不会破坏MenuScript类,但可能会破坏并重新加载各个云。
如果所有需要保存的是云的位置,您可以创建一个数组来存储MenuScript上每个云的位置,以确保保存这些值。
答案 2 :(得分:0)
最后找到了解决此问题的方法:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class MenuScript : MonoBehaviour {
public Transform[] clouds;
public float speed = 0.2f;
public static List<Vector3> cloudsPositions;
void Start(){
if(cloudsPositions == null){
cloudsPositions = new List<Vector3>();
for(int i = 0; i < clouds.Length; i++){
cloudsPositions.Add(clouds[i].transform.position);
}
}else{
for(int i = 0; i < clouds.Length; i++){
clouds[i].position = cloudsPositions[i];
}
}
}
public void UpdateCloudsPositions(){
cloudsPositions.Clear();
for(int i = 0; i < clouds.Length; i++){
cloudsPositions.Add(clouds[i].transform.position);
}
}
void Update () {
for(int i = 0; i < clouds.Length; i++){
if(clouds[i].position.x >= 10f){
clouds[i].position = new Vector3(-10f, clouds[i].position.y, 0);
}
Vector3 vec = clouds[i].position;
vec.x += speed * Time.deltaTime;
clouds[i].position = vec;
}
}
}
我做的是我存储了云彩&#39; position
到静态列表,所以当重新加载场景时,脚本会更新Start
函数的位置。
感谢所有帮助我的人:)