4.1.1 DontSave:保留对象到新场景
功能说明:此属性的功能是用来设置是否将Object对象保留到新的场景(Scene)中,如果使用HideFlags.DontSave,则Object对象将在新场景中被保留下来,对其使用说明如下。
(1)如果GameObject对象被HideFlags.DontSave标识,则在新scene中GameObject的所有组件将被保留下来,但其子类GameObject对象不会被保留到新scene中。
(2)不可以对GameObject对象的某个组件如Transform进行HideFlags.DontSave标识,否则无效。
(3)即使程序已经退出,被HideFlags.DontSave标识的对象会一直存在于程序中,造成内存泄漏,对HideFlags.DontSave标识的对象在不需要或程序退出时需要使用DestroyImmediate手动销毁。
实例演示:下面通过实例演示属性DontSave的使用。
本实例工程包含两个场景,下面是场景DontSave_unity中的脚本代码:
using UnityEngine;
using System.Collections;
public class DontSave_ts : MonoBehaviour {
public GameObject go;
public Transform t;
void Start()
{
//GameObject对象使用HideFlags.DontSave可以在新scene中被保留
go.hideFlags = HideFlags.DontSave;
GameObject Pl = GameObject.CreatePrimitive(PrimitiveType.Plane);
Pl.hideFlags = HideFlags.DontSave;
//不可以对GameObject的组件设置HideFlags.DontSave,否则无效
Transform tf = Instantiate(t, go.transform.position + new Vector3(2.0f, 0.0f, 0.0f), Quaternion.identity) as Transform;
tf.hideFlags = HideFlags.DontSave;
//导入名为newScene_unity的新scene
Application.LoadLevel("newScene2_unity");
}
}
在这段代码中,分别对场景中GameObject对象go、新创建的GameObject对象Pl和新实例化的Transform实例tf的hideFlags属性设置为HideFlags.DontSave,然后导入名为newScene2_unity的新场景。
下面是场景newScene2_unity中的脚本代码:
using UnityEngine;
using System.Collections;
public class NewScene2_ts : MonoBehaviour {
GameObject cube, plane;
void Start () {
Debug.Log("这是NewScene2!");
}
//当程序退出时用DestroyImmediate()销毁被HideFlags.DontSave标识的对象
//否则即使程序已经退出,被HideFlags.DontSave标识的对象依然在Hierarchy面板中
//即每运行一次程序就会产生多余对象,造成内存泄漏
void OnApplicationQuit()
{
cube = GameObject.Find("Cube0");
plane = GameObject.Find("Plane");
if (cube)
{
Debug.Log("Cube0 DestroyImmediate");
DestroyImmediate(cube);
}
if (plane)
{
Debug.Log("Plane DestroyImmediate");
DestroyImmediate(plane);
}
}
}
在这段脚本中,首先声明了两个GameObject类型的变量cube和plane,然后在OnApplicationQuit()方法中查找当前场景中是否存在名为Cube0和Plane的GameObject对象,如果存在,则在程序退出时将它们立即销毁。图4-1为程序启动前场景中的物体,图4-2为程序启动后场景中的物体,图4-3为在程序退出时未将场景中被保留的物体销毁时的结果(即把场景newScene2_unity脚本中OnApplicationQuit()中的代码注释掉后程序的运行结果)。如果在程序退出时销毁了被ideFlags.DontSave标识的对象,则程序退出后状态如图4-1所示。