You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.5 KiB
C#
84 lines
2.5 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using UnityEngine.Serialization;
|
|
|
|
namespace MoreMountains.Tools
|
|
{
|
|
/// <summary>
|
|
/// A persistent class that can save the essential parts of an object :
|
|
/// its transform data (position, rotation, scale) and its active state
|
|
/// This inherits from MMPersistentBase and implements the IMMPersistent interface
|
|
/// It's a good example of how to implement the interface's OnSave and OnLoad methods
|
|
/// </summary>
|
|
public class MMPersistent : MMPersistentBase
|
|
{
|
|
|
|
[Header("Properties")]
|
|
/// whether or not to save this object's position
|
|
[Tooltip("whether or not to save this object's position")]
|
|
public bool SavePosition = true;
|
|
/// whether or not to save this object's rotation
|
|
[Tooltip("whether or not to save this object's rotation")]
|
|
public bool SaveLocalRotation = true;
|
|
/// whether or not to save this object's scale
|
|
[Tooltip("whether or not to save this object's scale")]
|
|
public bool SaveLocalScale = true;
|
|
/// whether or not to save this object's active state
|
|
[Tooltip("whether or not to save this object's active state")]
|
|
public bool SaveActiveState = true;
|
|
|
|
/// <summary>
|
|
/// A struct used to store and serialize the data we want to save
|
|
/// </summary>
|
|
[Serializable]
|
|
public struct Data
|
|
{
|
|
public Vector3 Position;
|
|
public Quaternion LocalRotation;
|
|
public Vector3 LocalScale;
|
|
public bool ActiveState;
|
|
}
|
|
|
|
/// <summary>
|
|
/// On Save, we turn the object's transform data and active state to a Json string and return it to the MMPersistencyManager
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override string OnSave()
|
|
{
|
|
return JsonUtility.ToJson(new Data { Position = this.transform.position,
|
|
LocalRotation = this.transform.localRotation,
|
|
LocalScale = this.transform.localScale,
|
|
ActiveState = this.gameObject.activeSelf });
|
|
}
|
|
|
|
/// <summary>
|
|
/// On load, we read the saved json data and apply it to our object's properties
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
public override void OnLoad(string data)
|
|
{
|
|
if (SavePosition)
|
|
{
|
|
this.transform.position = JsonUtility.FromJson<Data>(data).Position;
|
|
}
|
|
|
|
if (SaveLocalRotation)
|
|
{
|
|
this.transform.localRotation = JsonUtility.FromJson<Data>(data).LocalRotation;
|
|
}
|
|
|
|
if (SaveLocalScale)
|
|
{
|
|
this.transform.localScale = JsonUtility.FromJson<Data>(data).LocalScale;
|
|
}
|
|
|
|
if (SaveActiveState)
|
|
{
|
|
this.gameObject.SetActive(JsonUtility.FromJson<Data>(data).ActiveState);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|