using UnityEngine; using System.Collections; public class DataSaveController : MonoBehaviour { public int m_InstanceID; // Use this for initialization void Reset () { m_InstanceID = gameObject.GetInstanceID(); } void OnValidate() { m_InstanceID = gameObject.GetInstanceID(); } /// /// 取得目前的物件資料 /// /// The current object data. public GameData.ObjectSaveData GetCurrentObjectData () { GameData.ObjectSaveData currentObjectData = new GameData.ObjectSaveData(); currentObjectData = GetTransformInfo(currentObjectData); currentObjectData = GetColliderInfo(currentObjectData); return currentObjectData; } GameData.ObjectSaveData GetTransformInfo(GameData.ObjectSaveData currentObjectData) { if (gameObject.GetComponent() != null) { currentObjectData.objectInstanceID = this.gameObject.GetInstanceID(); currentObjectData.objectName = this.gameObject.name; currentObjectData.transformPosition = this.transform.localPosition; currentObjectData.transformRotation = this.transform.localEulerAngles; currentObjectData.transformScale = this.transform.localScale; } return currentObjectData; } GameData.ObjectSaveData GetColliderInfo(GameData.ObjectSaveData currentObjectData) { if (gameObject.GetComponent() != null) { Collider currentCollider = gameObject.GetComponent(); currentObjectData.colliderIsTrigger = currentCollider.isTrigger; if (gameObject.GetComponent() != null) { BoxCollider currentBoxCollider = gameObject.GetComponent(); currentObjectData.colliderCenter = currentBoxCollider.center; currentObjectData.colliderSize = currentBoxCollider.size; } if (gameObject.GetComponent() != null) { SphereCollider currentSphereCollider = gameObject.GetComponent(); currentObjectData.colliderCenter = currentSphereCollider.center; currentObjectData.colliderRadius = currentSphereCollider.radius; } } return currentObjectData; } /// /// 設定目前的物件資料 /// /// The object data. public void SetCurrentObjectData (GameData.ObjectSaveData theObjectData) { SetObjectTransform(theObjectData); SetPhysical(theObjectData); } /// /// 將讀取資料設定回物件上 /// /// The object data. private void SetObjectTransform(GameData.ObjectSaveData theObjectData){ this.transform.localPosition = theObjectData.transformPosition; this.transform.localEulerAngles = theObjectData.transformRotation; this.transform.localScale = theObjectData.transformScale; } private void SetObjectAnimator(){ if (gameObject.GetComponent() != null){ } } private void SetNPCDialogueData(){ } private void SetPhysical(GameData.ObjectSaveData theObjectData){ // 設置 RigidBody // 設置 Collider if (gameObject.GetComponent() != null) { Collider currentCollider = gameObject.GetComponent(); currentCollider.isTrigger = theObjectData.colliderIsTrigger; if (gameObject.GetComponent() != null) { BoxCollider currentBoxCollider = gameObject.GetComponent(); currentBoxCollider.center = theObjectData.colliderCenter; currentBoxCollider.size = theObjectData.colliderSize; } if (gameObject.GetComponent() != null) { SphereCollider currentSphereCollider = gameObject.GetComponent(); currentSphereCollider.center = theObjectData.colliderCenter; currentSphereCollider.radius = theObjectData.colliderRadius; } } } }