Merge branch 'LouDi_Quan' of http://git.zxkedu.com:33769/JiNan/VirtualFramework into LouDi_Quan

This commit is contained in:
彭浩 2025-03-07 17:24:33 +08:00
commit 9d958a22d7
13 changed files with 179 additions and 18 deletions

View File

@ -460,6 +460,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 5ed9b43aa6da2fd49af65b4ab0b85fc2, type: 3}
m_Name:
m_EditorClassIdentifier:
Mask: {fileID: 1168405647267019539}
Title: {fileID: 3613689092755446169}
Des: {fileID: 5150898215778594440}
BtnContent: {fileID: 8598386973860236803}
@ -626,6 +627,7 @@ GameObject:
- component: {fileID: 7621766697555444520}
- component: {fileID: 5831602004918006429}
- component: {fileID: 1168405647267019539}
- component: {fileID: 6844797422068731548}
m_Layer: 5
m_Name: Mask
m_TagString: Untagged
@ -669,13 +671,13 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4085354983340029108}
m_Enabled: 0
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.5019608}
m_Color: {r: 0, g: 0, b: 0, a: 0}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
@ -692,6 +694,22 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &6844797422068731548
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4085354983340029108}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0d51f3a7c41ab0346b49ae50d456bece, type: 3}
m_Name:
m_EditorClassIdentifier:
MarkType: 0
CustomComponentName:
CustomComment:
mComponentName: UnityEngine.UI.Image
--- !u!1 &4287411951672065129
GameObject:
m_ObjectHideFlags: 0

View File

@ -51,6 +51,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
answers: []
bg: {fileID: 2575765536656914917}
Scroll: {fileID: 3666318679728618663}
Content: {fileID: 8229723427790603414}
ItemPrefab: {fileID: 3266964766418377106}
@ -869,6 +870,7 @@ GameObject:
- component: {fileID: 4604846658045866225}
- component: {fileID: 7995524027316056123}
- component: {fileID: 2575765536656914917}
- component: {fileID: 7995406576721174090}
m_Layer: 0
m_Name: bg
m_TagString: Untagged
@ -891,9 +893,9 @@ RectTransform:
- {fileID: 9189599814967438796}
m_Father: {fileID: 4477385101412774245}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
m_AnchoredPosition: {x: -133, y: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 0, y: 0.5}
m_AnchoredPosition: {x: 111.5, y: 0}
m_SizeDelta: {x: 223, y: 653}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7995524027316056123
@ -934,6 +936,22 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &7995406576721174090
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3256755621147846471}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0d51f3a7c41ab0346b49ae50d456bece, type: 3}
m_Name:
m_EditorClassIdentifier:
MarkType: 0
CustomComponentName: bg
CustomComment:
mComponentName: UnityEngine.UI.Image
--- !u!1 &3509989120642977392
GameObject:
m_ObjectHideFlags: 0

View File

@ -411,5 +411,16 @@ public class Utility
}
}
// 使用Unity的Random实现洗牌
public static void Shuffle<T>(IList<T> list)
{
int n = list.Count;
for (int i = n - 1; i > 0; i--)
{
int j = UnityEngine.Random.Range(0, i + 1);
T temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
}

View File

@ -39504,6 +39504,14 @@ PrefabInstance:
propertyPath: m_Materials.Array.data[2]
value:
objectReference: {fileID: 2100000, guid: 08b25335e6ce3bd4eacb9f61a422e5d3, type: 2}
- target: {fileID: 814728240074513508, guid: 4dde43b36ab78d04da783fc679db9abb, type: 3}
propertyPath: m_Materials.Array.data[0]
value:
objectReference: {fileID: 2100000, guid: 9afb30013efac994dbaa691b16e73d4f, type: 2}
- target: {fileID: 814728240074513508, guid: 4dde43b36ab78d04da783fc679db9abb, type: 3}
propertyPath: m_Materials.Array.data[6]
value:
objectReference: {fileID: 2100000, guid: 64987e02868b39a45b978c4e74382520, type: 2}
- target: {fileID: 1063729919534690453, guid: 4dde43b36ab78d04da783fc679db9abb, type: 3}
propertyPath: m_Materials.Array.data[2]
value:
@ -39540,6 +39548,10 @@ PrefabInstance:
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3005906659638043578, guid: 4dde43b36ab78d04da783fc679db9abb, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3368573076977138093, guid: 4dde43b36ab78d04da783fc679db9abb, type: 3}
propertyPath: m_Materials.Array.data[0]
value:

View File

@ -53,6 +53,15 @@ public class TextTipAction : IAction
data.audio = datas.ContainsKey("audio") ? datas["audio"] : string.Empty;
data.title = datas.ContainsKey("title") ? datas["title"] : string.Empty;
data.btns = datas.ContainsKey("btns") ? datas["btns"].Split(',').ToList() : null;
if (datas.ContainsKey("alpha"))
{
if (float.TryParse(datas["alpha"], out data.alpha) == false)
{
data.alpha = 0;
}
}
UIKit.OpenPanelAsync<UITextTip>(uiData: data, canvasLevel: UILevel.PopUI).ToAction().StartGlobal(() => this.Finish());
}

View File

@ -26,6 +26,9 @@ public class UIToolsAction : IAction
string totalScore;
string scoreStepName;
string autoHide;
string random;
string scrollSpeed;
string position;
public static UIToolsAction Allocate(Dictionary<string, string> datas, System.Action onDelayFinish = null)
{
var retNode = mPool.Allocate();
@ -44,6 +47,9 @@ public class UIToolsAction : IAction
retNode.totalScore = datas.ContainsKey("totalScore") ? datas["totalScore"] : "";
retNode.scoreStepName = datas.ContainsKey("scoreStepName") ? datas["scoreStepName"] : "";
retNode.autoHide = datas.ContainsKey("autoHide") ? datas["autoHide"] : "";
retNode.random = datas.ContainsKey("random") ? datas["random"] : "";
retNode.scrollSpeed = datas.ContainsKey("scrollSpeed") ? datas["scrollSpeed"] : "";
retNode.position = datas.ContainsKey("position") ? datas["position"] : "";
return retNode;
}
@ -80,10 +86,20 @@ public class UIToolsAction : IAction
float.TryParse(totalScore, out data.totalScore);
data.scoreStepName = scoreStepName;
bool.TryParse(setActive, out data.SetActive);
if (bool.TryParse(random, out data.random) == false)
{
data.random = false;
}
if (float.TryParse(scrollSpeed, out data.scrollSpeed) == false)
{
data.scrollSpeed = 25;
}
if (float.TryParse(autoHide, out data.autoHideResult) == false)
{
data.autoHideResult = -1;
}
data.position = position;
UIKit.OpenPanelAsync<UITools>(uiData: data, canvasLevel: UILevel.PopUI).ToAction().StartGlobal(() => this.Finish());
}

View File

@ -5,11 +5,13 @@ using QFramework;
namespace QFramework.Example
{
// Generate Id:2bccd644-ac9b-4f30-8f17-4a933167afc1
// Generate Id:81b68f1b-6a7e-4133-9c0a-5297fa12f3ca
public partial class UITextTip
{
public const string Name = "UITextTip";
[SerializeField]
public UnityEngine.UI.Image Mask;
[SerializeField]
public TMPro.TextMeshProUGUI Title;
[SerializeField]
@ -23,6 +25,7 @@ namespace QFramework.Example
protected override void ClearUIComponents()
{
Mask = null;
Title = null;
Des = null;
BtnContent = null;

View File

@ -14,6 +14,7 @@ namespace QFramework.Example
public string text;
public string audio;
public string title;
public float alpha = 0;
public List<string> btns;
}
public partial class UITextTip : UIPanel
@ -64,6 +65,9 @@ namespace QFramework.Example
loader.LoadAsync();
}
Title.text = mData.title;
Color color = Mask.color;
color.a = mData.alpha;
Mask.color = color;
}
protected override void OnShow()

View File

@ -5,11 +5,13 @@ using QFramework;
namespace QFramework.Example
{
// Generate Id:5f777d12-69d4-455d-bef6-fb39dbeda60e
// Generate Id:be7133cf-6b67-4ebc-b151-f39cadcba0d2
public partial class UITools
{
public const string Name = "UITools";
[SerializeField]
public UnityEngine.UI.Image bg;
[SerializeField]
public UnityEngine.UI.ScrollRect Scroll;
[SerializeField]
@ -21,6 +23,7 @@ namespace QFramework.Example
protected override void ClearUIComponents()
{
bg = null;
Scroll = null;
Content = null;
ItemPrefab = null;

View File

@ -23,6 +23,9 @@ namespace QFramework.Example
public float totalScore;
public string scoreStepName;
public float autoHideResult = -1;
public bool random = false;
public float scrollSpeed = 25;
public string position;
}
public partial class UITools : UIPanel
{
@ -55,6 +58,11 @@ namespace QFramework.Example
answers = mData.answer.Split(',')?.ToList();
}
Content.RemoveAllChildren();
if (mData.devices.Count > 0 && mData.random)
{
Utility.Shuffle(mData.devices);
}
Scroll.scrollSensitivity = mData.scrollSpeed;
foreach (var device in mData.devices)
{
var item = DeviceController.Instance.GetDevice(device);
@ -133,6 +141,35 @@ namespace QFramework.Example
}
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;
}
}
public void SetSelected(GameObject item, bool isRight)

View File

@ -570,6 +570,21 @@ namespace XMLTool
{
act.args.Add("autoHide", autoHide.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;
@ -824,6 +839,11 @@ namespace XMLTool
{
act.args.Add("title", title.Value);
}
XAttribute alpha = action.Attribute("alpha");
if (alpha != null)
{
act.args.Add("alpha", alpha.Value);
}
newAction = act;
}

View File

@ -951,7 +951,7 @@
<Action type="TimeLine" value="Models/ZhuDao_chaunyifu" frame="1621" endFrame="1851" isShow="true" isWait="true"></Action>
<Action type="TimeLine" value="Models/ZhuDao_chaunyifu" frame="1621" endFrame="1850" isShow="true" isWait="true"></Action>
@ -1010,6 +1010,7 @@
<!--手套显示-->
<Action type="Show" value="Models/ZhuDao_chaunyifu/shoutao/suliaoshoutao2.001" isShow="true" ></Action>
<Action type="Show" value="Models/ZhuDao_chaunyifu/shoutao/suliaoshoutao2.002" isShow="true" ></Action>
<Action type="Anim" value="Models/ZhuDao_chaunyifu/shoutao" animName="戴手套复原" ></Action>
<Action type="Move" value="Models/ZhuDao_chaunyifu" to="-5.435,0,-3.307" time="0"></Action>
@ -1156,7 +1157,7 @@
<Action type="TimeLine" value="Models/ZhuDao_chaunyifu" frame="1621" endFrame="1851" isShow="true" isWait="true"></Action>
<Action type="TimeLine" value="Models/ZhuDao_chaunyifu" frame="1621" endFrame="1850" isShow="true" isWait="true"></Action>
@ -1215,7 +1216,7 @@
<!--手套显示-->
<Action type="Show" value="Models/ZhuDao_chaunyifu/shoutao/suliaoshoutao2.001" isShow="true"></Action>
<Action type="Show" value="Models/ZhuDao_chaunyifu/shoutao/suliaoshoutao2.002" isShow="true"></Action>
<Action type="Anim" value="Models/ZhuDao_chaunyifu/shoutao" animName="戴手套" frame="0"></Action>
<Action type="Anim" value="Models/ZhuDao_chaunyifu/shoutao" animName="戴手套复原" ></Action>
<Action type="Move" value="Models/ZhuDao_chaunyifu" to="-5.435,0,-3.307" time="0"></Action>
@ -1549,7 +1550,7 @@
<Action type="Show" deviceName="吸引器" isShow="true"></Action>
<Action type="Show" value="Environment/隐藏物体/SM_YaoPinLei" isShow="true"></Action>
<Action type="Show" value="Environment/隐藏物体/SM_BuLiaoLei" isShow="true"></Action>
<Action type="Show" value="Environment/隐藏物体/SM_BuLiaoLei" isShow="true"></Action>
<Action type="Show" value="Environment/隐藏物体/SM_JianZiLei" isShow="true"></Action>
<Action type="Show" value="Environment/隐藏物体/SM_shoushujianceyi_02" isShow="true"></Action>
<Action type="Show" value="Environment/隐藏物体/新增桌面" isShow="true"></Action>
@ -1562,6 +1563,7 @@
<Reset>
<Action type="Sequence">
<Action type="Anim" value="Models/TiMao" animName="TiMaoAnim" frame="0" ></Action>
<Action type="Move" value="Models/TiMao" to="10000,10000,10000" time="0"></Action>
<Action type="Show" value="Models/SM_gou/SM_gou" isShow="false"></Action>
<Action type="Show" value="Models/SM_gou/SM_gou_01" isShow="false"></Action>
@ -1583,6 +1585,7 @@
<Start>
<Action type="Sequence">
<Action type="Anim" value="Models/TiMao" animName="TiMaoAnim" frame="0" ></Action>
<Action type="Move" value="Models/TiMao" to="0,0,0" time="0"></Action>
<Action type="Show" value="Models/SM_gou/SM_gou_02/gou" isShow="false"></Action>
<Action type="Show" value="Models/SM_gou/SM_goushengti" isShow="false"></Action>
@ -2816,9 +2819,8 @@
<Action type="Anim" value="Models/zhushou" animName="75zhushou" frame="0"></Action>
<Action type="Show" value="Models/75changqian" isShow="true" isDevice="false"></Action>
<Action type="Show" deviceName="75肠子" isShow="true" isDevice="false"></Action>
<Action type="Anim" value="Models/75changzi" animName="75changzi"></Action>
<Action type="SkinnedBake" deviceName="75肠子"></Action>
<Action type="Anim" value="Models/75changzi" animName="75changzi" frame="0"></Action>
<Action type="SkinnedBake" deviceName="75肠子"></Action>
<Action type="HighLight" deviceName="75肠子" isHigh="true" color="0,255,0,255"></Action>
<Condition type="ObjClick" deviceName="75肠子" isRight="true"></Condition>

View File

@ -29,7 +29,10 @@
<!--用于右侧道具栏选择正确的道具 event用于配合StrEventCondition 做检测
rightScore 正确选择一个 得分 wrongScore 错误一个 得分 scoreStepName是评分的key
autoHide =-1 则点击结束 否则 等待对应时间后自动结束
totalScore 是配合wrongScore的用于初始化一个分数 然后选择扣分-->
totalScore 是配合wrongScore的用于初始化一个分数 然后选择扣分
random 是否打乱devices的顺序
scrollSpeed 鼠标滚轮的滑动速度
position left/right 可以让道具栏在左侧或者右侧-->
<Action type="UITools" devices="道具名字1" answers="正确道具"
setActive="true"
rightLabel="提示:器械选择正确。"
@ -40,7 +43,10 @@
wrongScore=""
totalScore=""
scoreStepName="手术准备器械选择"
autoHide="-1"></Action>
autoHide="-1"
random="true"
scrollSpeed="25"
position="right"></Action>
<!--物体点位选择 物体的中心点-->
<Action type="PointQuestion" value="路径1,路径2"></Action>
@ -100,8 +106,10 @@
如果不配置 nearPos或者normalPos 则自动隐藏对应的视角UI按钮
-->
<Action type="CameraSwitch" nearDevice="肠钳" normalDevice="组织钳" nearPos="-3.942,3.24,-4.319" nearRot="16.42331,180,0" nearTime="1" normalPos="-3.942,3.24,-3.946" normalRot="16.42331,180,-5.305351E-14" normalTime="1"></Action>
<!--文字弹窗 按钮可以多个 点击事件使用UIClick-->
<Action type="TextTip" title="这里是标题" value="这里是文字描述" audio="q001.mp3" btns="确定,取消"/>
<!--文字弹窗 按钮可以多个 点击事件使用UIClick
alpha 0-1 背景的透明度
-->
<Action type="TextTip" title="这里是标题" value="这里是文字描述" audio="q001.mp3" btns="确定,取消" alpha="0.5"/>
<!--锁定镜头 true为开启 false为锁定 isMove是移动镜头 isRotate是旋转镜头-->
<Action type="CameraLock" isMove="true" isRotate="true"></Action>
<!--播放视频 size为视频窗口大小 offset为窗口中心点偏移 播放完成事件和关闭事件 通常使用关闭事件即可