新增UIBackPack
This commit is contained in:
parent
5e0af963c2
commit
3cfa13795e
1293
Assets/Art/UIPrefab/UIBackPack.prefab
Normal file
1293
Assets/Art/UIPrefab/UIBackPack.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Art/UIPrefab/UIBackPack.prefab.meta
Normal file
7
Assets/Art/UIPrefab/UIBackPack.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 310f51a2e0ce8db40b698f99e78ae145
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName: uibackpack_prefab
|
||||||
|
assetBundleVariant:
|
||||||
@ -118,6 +118,11 @@ public class ActionHelper
|
|||||||
var strAction = (XMLTool.DictionaryAction)act;
|
var strAction = (XMLTool.DictionaryAction)act;
|
||||||
return UIToolsAction.Allocate(strAction.args);
|
return UIToolsAction.Allocate(strAction.args);
|
||||||
}
|
}
|
||||||
|
case "UIBackPack":
|
||||||
|
{
|
||||||
|
var strAction = (XMLTool.DictionaryAction)act;
|
||||||
|
return UIBackPackAction.Allocate(strAction.args);
|
||||||
|
}
|
||||||
case "PointQuestion":
|
case "PointQuestion":
|
||||||
return PointQuestionAction.Allocate(act.Value);
|
return PointQuestionAction.Allocate(act.Value);
|
||||||
case "Point3DQuestion":
|
case "Point3DQuestion":
|
||||||
|
|||||||
74
Assets/Scripts/Actions/UIBackPackAction.cs
Normal file
74
Assets/Scripts/Actions/UIBackPackAction.cs
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using QFramework;
|
||||||
|
using System;
|
||||||
|
using QFramework.Example;
|
||||||
|
using System.Linq;
|
||||||
|
public class UIBackPackAction : IAction
|
||||||
|
{
|
||||||
|
public ulong ActionID { get; set; }
|
||||||
|
public bool Deinited { get; set; }
|
||||||
|
public bool Paused { get; set; }
|
||||||
|
public ActionStatus Status { get; set; }
|
||||||
|
|
||||||
|
private static readonly SimpleObjectPool<UIBackPackAction> mPool =
|
||||||
|
new SimpleObjectPool<UIBackPackAction>(() => new UIBackPackAction(), null, 10);
|
||||||
|
string devices;
|
||||||
|
string random;
|
||||||
|
string scrollSpeed;
|
||||||
|
string position;
|
||||||
|
public static UIBackPackAction Allocate(Dictionary<string, string> datas, System.Action onDelayFinish = null)
|
||||||
|
{
|
||||||
|
var retNode = mPool.Allocate();
|
||||||
|
retNode.ActionID = ActionKit.ID_GENERATOR++;
|
||||||
|
retNode.Deinited = false;
|
||||||
|
retNode.Reset();
|
||||||
|
retNode.devices = datas.ContainsKey("devices") ? datas["devices"] : "";
|
||||||
|
retNode.random = datas.ContainsKey("random") ? datas["random"] : "";
|
||||||
|
retNode.scrollSpeed = datas.ContainsKey("scrollSpeed") ? datas["scrollSpeed"] : "";
|
||||||
|
retNode.position = datas.ContainsKey("position") ? datas["position"] : "";
|
||||||
|
return retNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void Deinit()
|
||||||
|
{
|
||||||
|
if (!Deinited)
|
||||||
|
{
|
||||||
|
Deinited = true;
|
||||||
|
mPool.Recycle(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnExecute(float dt)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnFinish()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnStart()
|
||||||
|
{
|
||||||
|
UIBackPackData data = new UIBackPackData();
|
||||||
|
data.devices = devices.Split(',').ToList();
|
||||||
|
if (bool.TryParse(random, out data.random) == false)
|
||||||
|
{
|
||||||
|
data.random = false;
|
||||||
|
}
|
||||||
|
if (float.TryParse(scrollSpeed, out data.scrollSpeed) == false)
|
||||||
|
{
|
||||||
|
data.scrollSpeed = 25;
|
||||||
|
}
|
||||||
|
data.position = position;
|
||||||
|
UIKit.OpenPanelAsync<UIBackPack>(uiData: data, canvasLevel: UILevel.PopUI).ToAction().StartGlobal(() => this.Finish());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{
|
||||||
|
Status = ActionStatus.NotStart;
|
||||||
|
Paused = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Assets/Scripts/Actions/UIBackPackAction.cs.meta
Normal file
11
Assets/Scripts/Actions/UIBackPackAction.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e766ada0be55001488d4a5368bb7e63d
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
55
Assets/Scripts/UI/UIBackPack.Designer.cs
generated
Normal file
55
Assets/Scripts/UI/UIBackPack.Designer.cs
generated
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using QFramework;
|
||||||
|
|
||||||
|
namespace QFramework.Example
|
||||||
|
{
|
||||||
|
// Generate Id:df731f7c-b33b-4edd-ac53-d859f4d06272
|
||||||
|
public partial class UIBackPack
|
||||||
|
{
|
||||||
|
public const string Name = "UIBackPack";
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
public UnityEngine.UI.Image bg;
|
||||||
|
[SerializeField]
|
||||||
|
public UnityEngine.UI.ScrollRect Scroll;
|
||||||
|
[SerializeField]
|
||||||
|
public RectTransform Content;
|
||||||
|
[SerializeField]
|
||||||
|
public UnityEngine.UI.Button ItemPrefab;
|
||||||
|
|
||||||
|
private UIBackPackData mPrivateData = null;
|
||||||
|
|
||||||
|
protected override void ClearUIComponents()
|
||||||
|
{
|
||||||
|
bg = null;
|
||||||
|
Scroll = null;
|
||||||
|
Content = null;
|
||||||
|
ItemPrefab = null;
|
||||||
|
|
||||||
|
mData = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UIBackPackData Data
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return mData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UIBackPackData mData
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return mPrivateData ?? (mPrivateData = new UIBackPackData());
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
mUIData = value;
|
||||||
|
mPrivateData = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Assets/Scripts/UI/UIBackPack.Designer.cs.meta
Normal file
11
Assets/Scripts/UI/UIBackPack.Designer.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7c10e0cf42fc507478eb8da812616766
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
110
Assets/Scripts/UI/UIBackPack.cs
Normal file
110
Assets/Scripts/UI/UIBackPack.cs
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using QFramework;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using TMPro;
|
||||||
|
using static OperationController;
|
||||||
|
|
||||||
|
namespace QFramework.Example
|
||||||
|
{
|
||||||
|
public class UIBackPackData : UIPanelData
|
||||||
|
{
|
||||||
|
public List<string> devices;
|
||||||
|
public bool random = false;
|
||||||
|
public float scrollSpeed = 25;
|
||||||
|
public string position;
|
||||||
|
}
|
||||||
|
public partial class UIBackPack : UIPanel
|
||||||
|
{
|
||||||
|
ResLoader mResLoader;
|
||||||
|
protected override void OnInit(IUIData uiData = null)
|
||||||
|
{
|
||||||
|
mData = uiData as UIBackPackData ?? new UIBackPackData();
|
||||||
|
mResLoader = ResLoader.Allocate();
|
||||||
|
TypeEventSystem.Global.Register<OnModuleQuit>(OnModuleQuit).UnRegisterWhenGameObjectDestroyed(gameObject);
|
||||||
|
// please add init code here
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnOpen(IUIData uiData = null)
|
||||||
|
{
|
||||||
|
Content.RemoveAllChildren();
|
||||||
|
|
||||||
|
foreach (var device in mData.devices)
|
||||||
|
{
|
||||||
|
var item = DeviceController.Instance.GetDevice(device);
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
Debug.LogError(device + ":没有找到对应的Device配置");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GameObject obj = GameObject.Instantiate(ItemPrefab.gameObject, Content);
|
||||||
|
obj.name = item.Name;
|
||||||
|
obj.transform.Find("Name").GetComponent<TextMeshProUGUI>().text = item.Name;
|
||||||
|
Image icon = obj.transform.Find("IconBg/Icon").GetComponent<Image>();
|
||||||
|
var localImageUrl = Global.deviceIconsPath + item.Icon;
|
||||||
|
GameObject right = icon.transform.Find("Right").gameObject;
|
||||||
|
GameObject wrong = icon.transform.Find("Wrong").gameObject;
|
||||||
|
GameObject Selected = icon.transform.Find("Selected").gameObject;
|
||||||
|
mResLoader.Add2Load(localImageUrl.ToNetImageResName(),
|
||||||
|
(bool success, IRes res) =>
|
||||||
|
{
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
icon.sprite = Utility.GetSprite(res.Asset as Texture2D);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Button btn = obj.GetComponent<Button>();
|
||||||
|
btn.onClick.AddListener(() =>
|
||||||
|
{
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
mResLoader.LoadAsync();
|
||||||
|
Scroll.verticalNormalizedPosition = 1;
|
||||||
|
|
||||||
|
|
||||||
|
switch (mData.position)
|
||||||
|
{
|
||||||
|
case "left":
|
||||||
|
// 将锚点设为父容器的右侧中间(Middle-Right)
|
||||||
|
bg.rectTransform.anchorMin = new Vector2(0, 0.5f); // 左下锚点(右侧)
|
||||||
|
bg.rectTransform.anchorMax = new Vector2(0, 0.5f); // 右上锚点(右侧)
|
||||||
|
|
||||||
|
// 将位置偏移归零(相对于锚点)
|
||||||
|
bg.rectTransform.anchoredPosition = Vector2.zero;
|
||||||
|
|
||||||
|
// 可选:设置轴心点为右侧中点(影响缩放/旋转中心)
|
||||||
|
bg.rectTransform.pivot = new Vector2(0, 0.5f);
|
||||||
|
break;
|
||||||
|
case "right":
|
||||||
|
default:
|
||||||
|
// 将锚点设为父容器的右侧中间(Middle-Right)
|
||||||
|
bg.rectTransform.anchorMin = new Vector2(1, 0.5f); // 左下锚点(右侧)
|
||||||
|
bg.rectTransform.anchorMax = new Vector2(1, 0.5f); // 右上锚点(右侧)
|
||||||
|
|
||||||
|
// 将位置偏移归零(相对于锚点)
|
||||||
|
bg.rectTransform.anchoredPosition = Vector2.zero;
|
||||||
|
|
||||||
|
// 可选:设置轴心点为右侧中点(影响缩放/旋转中心)
|
||||||
|
bg.rectTransform.pivot = new Vector2(1, 0.5f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnShow()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnHide()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnClose()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public void OnModuleQuit(OnModuleQuit arg)
|
||||||
|
{
|
||||||
|
Hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Assets/Scripts/UI/UIBackPack.cs.meta
Normal file
11
Assets/Scripts/UI/UIBackPack.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 10936952f7d03a849933486ae2d33b90
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -69,6 +69,7 @@ namespace QFramework.Example
|
|||||||
});
|
});
|
||||||
loader.LoadAsync();
|
loader.LoadAsync();
|
||||||
}
|
}
|
||||||
|
transform.SetAsLastSibling();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnShow()
|
protected override void OnShow()
|
||||||
|
|||||||
@ -34,6 +34,7 @@ namespace QFramework.Example
|
|||||||
protected override void OnInit(IUIData uiData = null)
|
protected override void OnInit(IUIData uiData = null)
|
||||||
{
|
{
|
||||||
mData = uiData as UIToolsData ?? new UIToolsData();
|
mData = uiData as UIToolsData ?? new UIToolsData();
|
||||||
|
mResLoader = ResLoader.Allocate();
|
||||||
// please add init code here
|
// please add init code here
|
||||||
TypeEventSystem.Global.Register<OnModuleQuit>(OnModuleQuit).UnRegisterWhenGameObjectDestroyed(gameObject);
|
TypeEventSystem.Global.Register<OnModuleQuit>(OnModuleQuit).UnRegisterWhenGameObjectDestroyed(gameObject);
|
||||||
}
|
}
|
||||||
@ -51,7 +52,6 @@ namespace QFramework.Example
|
|||||||
{
|
{
|
||||||
ScoreController.Instance.Add(mData.scoreStepName, mData.totalScore);
|
ScoreController.Instance.Add(mData.scoreStepName, mData.totalScore);
|
||||||
}
|
}
|
||||||
mResLoader = ResLoader.Allocate();
|
|
||||||
mData = uiData as UIToolsData ?? new UIToolsData();
|
mData = uiData as UIToolsData ?? new UIToolsData();
|
||||||
if (string.IsNullOrEmpty(mData.answer) == false)
|
if (string.IsNullOrEmpty(mData.answer) == false)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -588,6 +588,28 @@ namespace XMLTool
|
|||||||
newAction = act;
|
newAction = act;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "UIBackPack":
|
||||||
|
{
|
||||||
|
var act = new DictionaryAction();
|
||||||
|
act.args.Add("devices", action.Attribute("devices").Value);
|
||||||
|
var random = action.Attribute("random");
|
||||||
|
if (random != null)
|
||||||
|
{
|
||||||
|
act.args.Add("random", random.Value);
|
||||||
|
}
|
||||||
|
var scrollSpeed = action.Attribute("scrollSpeed");
|
||||||
|
if (scrollSpeed != null)
|
||||||
|
{
|
||||||
|
act.args.Add("scrollSpeed", scrollSpeed.Value);
|
||||||
|
}
|
||||||
|
var position = action.Attribute("position");
|
||||||
|
if (position != null)
|
||||||
|
{
|
||||||
|
act.args.Add("position", position.Value);
|
||||||
|
}
|
||||||
|
newAction = act;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case "TextQuestion":
|
case "TextQuestion":
|
||||||
{
|
{
|
||||||
var act = new DictionaryAction();
|
var act = new DictionaryAction();
|
||||||
|
|||||||
@ -48,6 +48,12 @@
|
|||||||
scrollSpeed="25"
|
scrollSpeed="25"
|
||||||
position="right"></Action>
|
position="right"></Action>
|
||||||
|
|
||||||
|
<!--道具背包,用于配合状态机进行道具的使用 目前是初步版本,仅支持配合UIClick点击,暂无道具数量等功能 详细参数可参考UITools-->
|
||||||
|
<Action type="UIBackPack" devices="道具名字1"
|
||||||
|
random="true"
|
||||||
|
scrollSpeed="25"
|
||||||
|
position="right"></Action>
|
||||||
|
|
||||||
<!--物体点位选择 物体的中心点-->
|
<!--物体点位选择 物体的中心点-->
|
||||||
<Action type="PointQuestion" value="路径1,路径2"></Action>
|
<Action type="PointQuestion" value="路径1,路径2"></Action>
|
||||||
<!--物体点位选择 3D版
|
<!--物体点位选择 3D版
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user