目录
声明
本教程学习均来自U3D中文课堂麦扣老师
1.Complete Inventory 完成背包
完成背包系统最后一个人物,保存背包的数据,另外实现面板的拖拽:
InventoryManager:
//TODO:最后添加模板用于保存数据
[Header("Inventory Data")]
public InventoryData_SO InventoryData;
public InventoryData_SO inventoryTemplate;
public InventoryData_SO actionData;
public InventoryData_SO actionTemplate;
public InventoryData_SO equipmentData;
public InventoryData_SO equipmentTemplate;
protected override void Awake()
{
base.Awake();
//拿到初始数据
if (inventoryTemplate != null)
{
InventoryData = Instantiate(inventoryTemplate);
}
if (actionTemplate != null)
{
actionData = Instantiate(actionTemplate);
}
if (equipmentTemplate != null)
{
equipmentData = Instantiate(equipmentTemplate);
}
}
private void Start()
{
LoadData();//加载背包数据
}
public void SaveData()//保存背包数据
{
SaveManager.Instance.Save(InventoryData, InventoryData.name);
SaveManager.Instance.Save(actionData, actionData.name);
SaveManager.Instance.Save(equipmentData, equipmentData.name);
}
public void LoadData()//加载背包数据
{
SaveManager.Instance.Load(InventoryData, InventoryData.name);
SaveManager.Instance.Load(actionData, actionData.name);
SaveManager.Instance.Load(equipmentData, equipmentData.name);
}
SceneController:
IEnumerator Transition(string sceneName,TransitionDestination.DestinationTag destinationTag)//传送目标场景、目标点
{
//TODO:保存数据
SaveManager.Instance.SavePlayerData();//保存Player数据
InventoryManager.Instance.SaveData();//保存背包数据
...
}
}
IEnumerator LoadLevel(string scene)//加载场景
{
...
//保存数据
SaveManager.Instance.SavePlayerData();
InventoryManager.Instance.SaveData();//保存背包数据
...
}
}
现在就能保存背包数据了
接下来实现拖拽面板的方法:
DragPanel:
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class DragPanel : MonoBehaviour, IDragHandler
{
RectTransform rectTransform;
Canvas canvas;
private void Awake()
{
rectTransform = GetComponent<RectTransform>();
canvas = InventoryManager.Instance.GetComponent<Canvas>();
}
public void OnDrag(PointerEventData eventData)
{
rectTransform.anchoredPosition += eventData.delta/canvas.scaleFactor;
}
}
现在实现拖拽面板显示在最上方:
</