This commit is contained in:
2026-10-12 00:37:28 +08:00
parent 20cdf28cfa
commit 32f7a1db7b
25 changed files with 6966 additions and 98 deletions
@@ -59,6 +59,13 @@ MonoBehaviour:
- PTCBZS - PTCBZS
- ZSYX - ZSYX
FlaggedDuringContentUpdateRestriction: 0 FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 55ff41d3491d69048aed1f871fee2253
m_Address: Assets/MyGame/aa/Game/XJMH/Sound/PW_Button.ogg
m_ReadOnly: 0
m_SerializedLabels:
- Audio
- Default
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 623f39d408d373f498bfa9c7ef4f4dd1 - m_GUID: 623f39d408d373f498bfa9c7ef4f4dd1
m_Address: Assets/MyGame/aa/Game/ZhanShen/Game/display_14080_0_DaTing.prefab m_Address: Assets/MyGame/aa/Game/ZhanShen/Game/display_14080_0_DaTing.prefab
m_ReadOnly: 0 m_ReadOnly: 0
@@ -673,13 +673,6 @@ MonoBehaviour:
- Audio - Audio
- XJMH - XJMH
FlaggedDuringContentUpdateRestriction: 0 FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 55ff41d3491d69048aed1f871fee2253
m_Address: Assets/MyGame/aa/Game/XJMH/Sound/PW_Button.ogg
m_ReadOnly: 0
m_SerializedLabels:
- Audio
- XJMH
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 571b94c02f405bf44846bb65a9063c17 - m_GUID: 571b94c02f405bf44846bb65a9063c17
m_Address: Assets/MyGame/aa/Game/XJMH/Sound/PW_Settle_Hole.ogg m_Address: Assets/MyGame/aa/Game/XJMH/Sound/PW_Settle_Hole.ogg
m_ReadOnly: 0 m_ReadOnly: 0
+10 -9
View File
@@ -2318,7 +2318,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 7597091867940339197} - component: {fileID: 7597091867940339197}
- component: {fileID: 4536030933686261914} - component: {fileID: 4536030933686261914}
m_Layer: 6 m_Layer: 10
m_Name: 6002_5 m_Name: 6002_5
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -20518,7 +20518,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 5098281124427048100} - component: {fileID: 5098281124427048100}
- component: {fileID: 6279646298209540641} - component: {fileID: 6279646298209540641}
m_Layer: 6 m_Layer: 10
m_Name: 6002_3 m_Name: 6002_3
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -20738,7 +20738,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 7945055334132002757} - component: {fileID: 7945055334132002757}
- component: {fileID: 2353989672940325644} - component: {fileID: 2353989672940325644}
m_Layer: 6 m_Layer: 10
m_Name: 6002_1 m_Name: 6002_1
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -45945,7 +45945,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 4926610848449747640} - component: {fileID: 4926610848449747640}
- component: {fileID: 9188114047427420724} - component: {fileID: 9188114047427420724}
m_Layer: 6 m_Layer: 10
m_Name: 6002 m_Name: 6002
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -71375,7 +71375,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 7662152191139975403} - component: {fileID: 7662152191139975403}
- component: {fileID: 6830302151371473141} - component: {fileID: 6830302151371473141}
m_Layer: 6 m_Layer: 10
m_Name: 6002_4 m_Name: 6002_4
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -83492,7 +83492,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 7809844692213518709} - component: {fileID: 7809844692213518709}
- component: {fileID: 4505455546857565809} - component: {fileID: 4505455546857565809}
m_Layer: 6 m_Layer: 10
m_Name: 6002_2 m_Name: 6002_2
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -111886,7 +111886,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 8754853922715629038} - component: {fileID: 8754853922715629038}
- component: {fileID: 2561839350788404781} - component: {fileID: 2561839350788404781}
m_Layer: 6 m_Layer: 10
m_Name: 6002_7 m_Name: 6002_7
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -126916,7 +126916,7 @@ Camera:
m_Depth: 0 m_Depth: 0
m_CullingMask: m_CullingMask:
serializedVersion: 2 serializedVersion: 2
m_Bits: 16777280 m_Bits: 16778240
m_RenderingPath: -1 m_RenderingPath: -1
m_TargetTexture: {fileID: 0} m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0 m_TargetDisplay: 0
@@ -127006,6 +127006,7 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
subCamera: {fileID: 0} subCamera: {fileID: 0}
isFishCamera: 0
--- !u!1 &8350492631816748217 --- !u!1 &8350492631816748217
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -134175,7 +134176,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 8033707387404974704} - component: {fileID: 8033707387404974704}
- component: {fileID: 7811082189917875340} - component: {fileID: 7811082189917875340}
m_Layer: 6 m_Layer: 10
m_Name: 6002_6 m_Name: 6002_6
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
+39 -2
View File
@@ -1,13 +1,19 @@
using System.Collections;
using UnityEngine; using UnityEngine;
/// <summary> /// <summary>
/// UI 基类:统一生命周期、显示/隐藏、入场出场动画钩子 /// UI 基类:统一生命周期、显示/隐藏、入场出场动画钩子、按钮点击音效
/// </summary> /// </summary>
public abstract class UIBase : MonoBehaviour public abstract class UIBase : MonoBehaviour
{ {
public UIPanel PanelType { get; private set; } public UIPanel PanelType { get; private set; }
/// <summary>面板内按钮点击音效 ID(tbaudio 表;60009=PW_Button)。0=不播</summary>
public int buttonClickAudioID = 60009;
/// <summary>面板显示期间的点击音效兜底扫描协程</summary>
private Coroutine _clickSoundWatch;
// 初始化,由 UIManager 赋值 // 初始化,由 UIManager 赋值
public void Init(UIPanel type) public void Init(UIPanel type)
{ {
@@ -24,7 +30,10 @@ public abstract class UIBase : MonoBehaviour
{ {
gameObject.SetActive(true); gameObject.SetActive(true);
transform.SetAsLastSibling(); // 每次激活都放到最上层 transform.SetAsLastSibling(); // 每次激活都放到最上层
RefreshButtonClickSounds(); // ⭐ 先给面板内已有的按钮补齐点击音效
OnShow(args); OnShow(args);
RefreshButtonClickSounds(); // ⭐ OnShow 中同步创建的按钮(如列表项)再补一遍
StartClickSoundWatch();
} }
public virtual void Hide() public virtual void Hide()
@@ -32,4 +41,32 @@ public abstract class UIBase : MonoBehaviour
OnHide(); OnHide();
gameObject.SetActive(false); gameObject.SetActive(false);
} }
/// <summary>给面板下所有 Button/Toggle 补齐点击音效(可重复调用,已挂 UIClickSound 的会跳过)</summary>
public void RefreshButtonClickSounds()
{
UIClickSound.AttachToAll(gameObject, buttonClickAudioID);
}
/// <summary>
/// 面板显示期间每 0.3 秒兜底扫描一次:列表项等运行时动态创建的按钮也能自动带上点击音效
/// (已挂 UIClickSound 的会跳过,扫描开销很小)。面板隐藏后循环自动退出。
/// </summary>
private void StartClickSoundWatch()
{
if (_clickSoundWatch != null)
StopCoroutine(_clickSoundWatch);
_clickSoundWatch = StartCoroutine(ClickSoundWatchRoutine());
}
private IEnumerator ClickSoundWatchRoutine()
{
var wait = new WaitForSecondsRealtime(0.3f);
while (gameObject.activeInHierarchy)
{
yield return wait;
RefreshButtonClickSounds();
}
_clickSoundWatch = null;
}
} }
@@ -0,0 +1,56 @@
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/// <summary>
/// 点击音效组件:挂在 Button/Toggle 上,玩家点击时播放 tbaudio 表中的按钮音效(默认 60009 = PW_Button)。
/// ⭐ 由 UIBase 在面板显示时自动为所有子按钮补齐,无需手动挂载;列表项等运行时动态创建的按钮由面板兜底扫描补上。
/// 监听指针点击而不是 onClick/onValueChanged:代码里 isOn = true / SetIsOnWithoutNotify 等程序化改动不会误发音效,
/// 只在玩家真的点按时播放,同时与 Button/Toggle 自身的可交互规则保持一致。
/// </summary>
[DisallowMultipleComponent]
public class UIClickSound : MonoBehaviour, IPointerClickHandler
{
/// <summary>点击音效 ID(tbaudio 表;60009=PW_Button)。0=不播</summary>
public int clickAudioID = 60009;
public void OnPointerClick(PointerEventData eventData)
{
Play();
}
/// <summary>播放点击音效</summary>
public void Play()
{
if (clickAudioID <= 0) return;
// 与 Button/Toggle 自身规则一致:不可交互的不发声
var selectable = GetComponent<Selectable>();
if (selectable != null && !selectable.interactable) return;
if (AudioManager.Instance == null) return;
// 音效尚未加载(如启动早期默认音频未就绪)时静默跳过,避免连点刷错误日志
if (AudioResourcesData.audioClipDic == null || !AudioResourcesData.audioClipDic.ContainsKey(clickAudioID))
return;
AudioManager.Instance.PlayerFX(clickAudioID);
}
/// <summary>为 root 下所有 Button/Toggle 补齐点击音效(已有 UIClickSound 的跳过,可重复调用)</summary>
public static void AttachToAll(GameObject root, int audioID = 60009)
{
if (root == null || audioID <= 0) return;
foreach (var button in root.GetComponentsInChildren<Button>(true))
Attach(button, audioID);
foreach (var toggle in root.GetComponentsInChildren<Toggle>(true))
Attach(toggle, audioID);
}
private static void Attach(Selectable selectable, int audioID)
{
if (selectable.GetComponent<UIClickSound>() != null) return;
var sound = selectable.gameObject.AddComponent<UIClickSound>();
sound.clickAudioID = audioID;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4d55f27bcf5d4cea806bacd5c41a217c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+1 -1
View File
@@ -99,7 +99,7 @@ public class UIManager : MonoSingleton<UIManager>
// 父节点(可指定到 Canvas 下某个容器) // 父节点(可指定到 Canvas 下某个容器)
[SerializeField] public Transform uiRoot; [SerializeField] public Transform uiRoot;
public GameObject obj_JiaZaiZhong; //加载中界面
private Dictionary<UIPanel, string> addressMap = new Dictionary<UIPanel, string>(); //第二种加载 private Dictionary<UIPanel, string> addressMap = new Dictionary<UIPanel, string>(); //第二种加载
// ⭐ prefab 缓存:避免重复 LoadAssetAsync,第二次打开同一面板秒开 // ⭐ prefab 缓存:避免重复 LoadAssetAsync,第二次打开同一面板秒开
+212 -42
View File
@@ -14,8 +14,9 @@ using UnityEngine;
/// 起飞入口:TakeoffToScreenPos(当前轻点路径,受 allowTapTakeoff 控制); /// 起飞入口:TakeoffToScreenPos(当前轻点路径,受 allowTapTakeoff 控制);
/// 将来"起飞按钮"接入后走同一入口即可(或在面板上打开 allowTapTakeoff 恢复轻点起飞)。 /// 将来"起飞按钮"接入后走同一入口即可(或在面板上打开 allowTapTakeoff 恢复轻点起飞)。
/// 交互判定在 GameMainPanel_FishBase.HandleInput(轻点=按下短+几乎没移动;按住扫射不触发起飞)。 /// 交互判定在 GameMainPanel_FishBase.HandleInput(轻点=按下短+几乎没移动;按住扫射不触发起飞)。
/// 挂载:XJMH 座位炮台(xjmhTurretList 中的子对象);飞机骨架挂在座位的变体容器节点里 /// 挂载:XJMH 座位炮台(xjmhTurretList 中的子对象);入场飞机优先用座位下的完整飞机预制体实例
/// (lvptfeiji/lanptfeiji/huangjinfeiji/vipfeiji01,与炮台平级,默认隐藏)——入场时临时挂到炮台下显示、结束还原。 /// (PW_Plane_等级,含 Body 骨架/尾迹/护盾/免费特效——特效由本类按原版控制),找不到才退回飞机骨架节点
/// (lvptfeiji/lanptfeiji/huangjinfeiji/vipfeiji01)。飞行期间飞机临时挂到炮台下显示、结束还原。
/// 注意:不要在本类定义 Awake/OnEnable,会隐藏基类的同名私有初始化逻辑。 /// 注意:不要在本类定义 Awake/OnEnable,会隐藏基类的同名私有初始化逻辑。
/// </summary> /// </summary>
public class FlyTurretData : TurretData public class FlyTurretData : TurretData
@@ -305,7 +306,7 @@ public class FlyTurretData : TurretData
public float enterBackHoldTime = 1f; public float enterBackHoldTime = 1f;
private Coroutine _enterRoutine; private Coroutine _enterRoutine;
private RectTransform _enterPlane; // 入场中的飞机节点(离场清理复位用) private Transform _enterPlaneRoot; // 入场中的飞机节点(PW_Plane_x 完整预制体实例;找不到时=骨架节点兜底)
private SkeletonGraphic _enterPlaneSg; // 飞机骨架(临时挂载后播 "stand01"/"back") private SkeletonGraphic _enterPlaneSg; // 飞机骨架(临时挂载后播 "stand01"/"back")
private bool _enterBoardHidden; // 入场期间 Board 被暂时隐藏(清理时只恢复自己隐藏的) private bool _enterBoardHidden; // 入场期间 Board 被暂时隐藏(清理时只恢复自己隐藏的)
@@ -338,22 +339,29 @@ public class FlyTurretData : TurretData
if (enterAudioID > 0 && AudioManager.Instance != null) if (enterAudioID > 0 && AudioManager.Instance != null)
AudioManager.Instance.PlayerFX(enterAudioID); AudioManager.Instance.PlayerFX(enterAudioID);
_enterPlane = FindPlaneSkeletonRect(); // ⭐ 飞机:优先完整飞机预制体实例 PW_Plane_等级(含 Body 骨架/尾迹/护盾/免费特效——由本类控制);
if (_enterPlane == null) // 找不到才退回"骨架节点"(只有骨架、没有特效)
_enterPlaneRoot = FindPlaneRoot();
if (_enterPlaneRoot == null)
{ {
Debug.LogWarning($"[XJMH入场] {name} 未找到飞机节点(炮台/座位子树内名字含 feiji),只播炮台出现动画"); Debug.LogWarning($"[XJMH入场] {name} 未找到飞机节点(PW_Plane_x 或名字含 feiji),只播炮台出现动画");
PlayTurretOutAnim(); PlayTurretOutAnim();
_enterRoutine = null; _enterRoutine = null;
yield break; yield break;
} }
_enterPlaneSg = _enterPlane.GetComponent<SkeletonGraphic>(); bool isFullPlane = _enterPlaneRoot.name.StartsWith("PW_Plane");
_enterPlaneSg = isFullPlane
? _enterPlaneRoot.GetComponentInChildren<SkeletonGraphic>(true)
: _enterPlaneRoot.GetComponent<SkeletonGraphic>();
Debug.Log($"[XJMH入场] {name} 飞机={_enterPlaneRoot.name}(完整飞机={isFullPlane} 骨架={(_enterPlaneSg != null ? _enterPlaneSg.name : "无")})");
// ⭐ 飞机临时挂到炮台下并保持停靠位(原挂载点=座位下的变体容器节点,默认未激活,不挂过来显示不了) // ⭐ 飞机临时挂到炮台下并保持停靠位(原挂载点=座位下的变体容器节点,默认未激活,不挂过来显示不了);
// 完整飞机:停靠位=炮台的 Aprk 节点(原版 self.aprkPos)
AttachPlaneForEnter(); AttachPlaneForEnter();
Vector2 home = _enterPlane.anchoredPosition; Vector3 home = _enterPlaneRoot.localPosition;
Vector2 start = home + new Vector2(0f, enterStartOffsetY); Vector3 start = home + new Vector3(0f, enterStartOffsetY, 0f);
Vector2 mid = home + new Vector2(0f, enterStartOffsetY * 0.5f); Vector3 mid = home + new Vector3(0f, enterStartOffsetY * 0.5f, 0f);
// ⭐ 原版 EnterAction 第 6 步:底部(容器/底座外壳)Spine 播 "out" 出场 // ⭐ 原版 EnterAction 第 6 步:底部(容器/底座外壳)Spine 播 "out" 出场
// (PW_Battery.txt:EnterAction → bottomSkeleton.AnimationState:SetAnimation(0,"out",false)) // (PW_Battery.txt:EnterAction → bottomSkeleton.AnimationState:SetAnimation(0,"out",false))
@@ -364,8 +372,17 @@ public class FlyTurretData : TurretData
skeletonAnimation.gameObject.SetActive(false); skeletonAnimation.gameObject.SetActive(false);
Transform board = transform.Find("Board"); Transform board = transform.Find("Board");
if (board != null) { board.gameObject.SetActive(false); _enterBoardHidden = true; } if (board != null) { board.gameObject.SetActive(false); _enterBoardHidden = true; }
_enterPlane.gameObject.SetActive(true);
_enterPlane.anchoredPosition = start; // ⭐ 飞机特效控制(原版 EnterAction):开 Body(骨架+尾迹)与护盾;
// 免费/暴击/加速三类特效一律关(原版只在免费模式玩法里开,prefab 默认全开会一起炸出来)
SetPlaneChildActive("Body", true);
SetPlaneChildActive("PW_Effect_Defend", true);
SetPlaneChildActive("FreeEffect", false);
SetPlaneChildActive("FreeEffect_Crit", false);
SetPlaneChildActive("FreeEffect_Speedup", false);
_enterPlaneRoot.gameObject.SetActive(true);
_enterPlaneRoot.localPosition = start;
if (_enterPlaneSg != null && _enterPlaneSg.AnimationState != null) if (_enterPlaneSg != null && _enterPlaneSg.AnimationState != null)
{ {
// 原版飞机常驻飞行循环(PlaneFlyAnim:"stand01" 循环);清残留(对象池/重复入场)后先播它 // 原版飞机常驻飞行循环(PlaneFlyAnim:"stand01" 循环);清残留(对象池/重复入场)后先播它
@@ -375,22 +392,24 @@ public class FlyTurretData : TurretData
} }
// 第一段:升到中途位(原版 EInQuart) // 第一段:升到中途位(原版 EInQuart)
yield return RiseTo(_enterPlane, start, mid, enterRiseTime, true); yield return RiseTo(_enterPlaneRoot, start, mid, enterRiseTime, true);
// 停顿(原版 delay 0.3) // 停顿(原版 delay 0.3)
if (enterHoldTime > 0f) yield return new WaitForSeconds(enterHoldTime); if (enterHoldTime > 0f) yield return new WaitForSeconds(enterHoldTime);
// 第二段:升到停靠位(原版 EOutQuart) // 第二段:升到停靠位(原版 EOutQuart)
yield return RiseTo(_enterPlane, mid, home, enterBackRiseTime, false); yield return RiseTo(_enterPlaneRoot, mid, home, enterBackRiseTime, false);
// PlaneBack 音效 + 飞机回位动画(原版 PlaneBack → PlaneBackAnim:"back") // 原版 PlaneBack:护盾先收;PlaneBack 音效 + 飞机回位动画(PlaneBackAnim:"back")
SetPlaneChildActive("PW_Effect_Defend", false);
if (enterBackAudioID > 0 && AudioManager.Instance != null) if (enterBackAudioID > 0 && AudioManager.Instance != null)
AudioManager.Instance.PlayerFX(enterBackAudioID); AudioManager.Instance.PlayerFX(enterBackAudioID);
if (_enterPlaneSg != null && _enterPlaneSg.AnimationState != null && HasSpineAnim(_enterPlaneSg, "back")) if (_enterPlaneSg != null && _enterPlaneSg.AnimationState != null && HasSpineAnim(_enterPlaneSg, "back"))
_enterPlaneSg.AnimationState.SetAnimation(0, "back", false); _enterPlaneSg.AnimationState.SetAnimation(0, "back", false);
// 原版:back 动画约 1 秒后飞机隐藏、炮台出现(ShowGun → ShowBoard) // 原版:back 动画约 1 秒后飞机本体(Body)隐藏、炮台出现(ShowGun → ShowBoard)
if (enterBackHoldTime > 0f) yield return new WaitForSeconds(enterBackHoldTime); if (enterBackHoldTime > 0f) yield return new WaitForSeconds(enterBackHoldTime);
SetPlaneChildActive("Body", false);
DetachPlaneAfterEnter(); // 飞机隐藏 + 还原父节点/本地变换 DetachPlaneAfterEnter(); // 飞机隐藏 + 还原父节点/本地变换
_enterPlane = null; _enterPlaneRoot = null;
_enterPlaneSg = null; _enterPlaneSg = null;
PlayTurretOutAnim(); PlayTurretOutAnim();
if (board != null) board.gameObject.SetActive(true); if (board != null) board.gameObject.SetActive(true);
@@ -399,11 +418,11 @@ public class FlyTurretData : TurretData
_enterRoutine = null; _enterRoutine = null;
} }
/// <summary>协程位移:EInQuart / EOutQuart 缓动(与原版 GC.Action 一致)</summary> /// <summary>协程位移:EInQuart / EOutQuart 缓动(与原版 GC.Action 一致;用 localPosition 兼容完整飞机/骨架节点)</summary>
private static IEnumerator RiseTo(RectTransform rt, Vector2 from, Vector2 to, float time, bool easeIn) private static IEnumerator RiseTo(Transform tr, Vector3 from, Vector3 to, float time, bool easeIn)
{ {
if (rt == null) yield break; if (tr == null) yield break;
if (time <= 0f) { rt.anchoredPosition = to; yield break; } if (time <= 0f) { tr.localPosition = to; yield break; }
float t = 0f; float t = 0f;
while (t < time) while (t < time)
@@ -411,10 +430,10 @@ public class FlyTurretData : TurretData
t += Time.deltaTime; t += Time.deltaTime;
float p = Mathf.Clamp01(t / time); float p = Mathf.Clamp01(t / time);
float e = easeIn ? p * p * p * p : 1f - Mathf.Pow(1f - p, 4f); float e = easeIn ? p * p * p * p : 1f - Mathf.Pow(1f - p, 4f);
rt.anchoredPosition = Vector2.LerpUnclamped(from, to, e); tr.localPosition = Vector3.LerpUnclamped(from, to, e);
yield return null; yield return null;
} }
rt.anchoredPosition = to; tr.localPosition = to;
} }
/// <summary>炮台本体出现:恢复显示并播 startingAnimation(预制体配的 "out";为空时兜底 "out")</summary> /// <summary>炮台本体出现:恢复显示并播 startingAnimation(预制体配的 "out";为空时兜底 "out")</summary>
@@ -475,6 +494,148 @@ public class FlyTurretData : TurretData
return data != null && data.FindAnimation(animName) != null; return data != null && data.FindAnimation(animName) != null;
} }
/// <summary>
/// 找入场飞机:① 完整飞机预制体实例(座位下名字以 "PW_Plane_等级" 开头,如 PW_Plane_1——含特效);
/// ② 骨架节点兜底(炮台/座位子树内名字含 "feiji" 的 SkeletonGraphic,如 lvptfeiji——只有骨架)。
/// </summary>
private Transform FindPlaneRoot()
{
var full = FindFullPlaneRoot();
if (full != null) return full;
return FindPlaneSkeletonRect();
}
/// <summary>找完整飞机预制体实例:先炮台子树、再座位子树;按当前炮台等级精确匹配,匹配不到用任意一架</summary>
private Transform FindFullPlaneRoot()
{
var t = FindFullPlaneUnder(transform);
if (t != null) return t;
var sit = GetComponentInParent<SitPosData>();
return sit != null ? FindFullPlaneUnder(sit.transform) : null;
}
private Transform FindFullPlaneUnder(Transform root)
{
int lv = ParseTurretLevel();
Transform any = null;
foreach (var t in root.GetComponentsInChildren<Transform>(true))
{
if (t == null || !t.name.StartsWith("PW_Plane")) continue;
if (lv > 0 && t.name.StartsWith("PW_Plane_" + lv)) return t;
if (any == null) any = t;
}
return any;
}
/// <summary>炮台的飞机停靠位节点(原版 self.aprk = battery:FindChild("Aprk"))</summary>
private Transform FindAprkNode()
{
Transform t = transform.Find("Aprk");
if (t != null) return t;
foreach (var c in GetComponentsInChildren<Transform>(true))
if (c.name.ToLowerInvariant().Contains("aprk")) return c;
return null;
}
/// <summary>
/// 飞机子节点显隐(只对完整飞机 PW_Plane 生效;骨架兜底路径没有这些特效节点,自动跳过):
/// Body=飞机本体(骨架+尾迹)、PW_Effect_Defend=护盾、FreeEffect/FreeEffect_Crit/FreeEffect_Speedup=免费模式三类特效。
/// </summary>
private void SetPlaneChildActive(string childName, bool active)
{
SetPlaneChildActive(_enterPlaneRoot, childName, active);
}
private static void SetPlaneChildActive(Transform planeRoot, string childName, bool active)
{
if (planeRoot == null || !planeRoot.name.StartsWith("PW_Plane")) return;
Transform t = planeRoot.Find(childName);
if (t != null) t.gameObject.SetActive(active);
}
// ==================== 入场飞机预热(进房加载收尾时由面板调用,卡顿被进度条遮住) ====================
// XJMH 进入房间时"命中"的那架完整飞机(骨架 + 尾迹/护盾十多个粒子系统 + 贴图首次上传)首帧初始化很重;
// 全部堆在"加载到100%、进度条已隐藏"那一帧做,玩家会看到明显卡顿(其他玩法没有这套 XJMH 独有资产)。
// 预热 = 在进度条还在走时把飞机临时挂到激活的父节点下、缩到 0 隐藏,激活一两帧完成初始化,再原样还原。
private Coroutine _prewarmRoutine;
private Transform _prewarmPlane; // 预热中的飞机(被打断时还原用)
private Transform _prewarmOrigParent;
private int _prewarmOrigSibling;
private Vector3 _prewarmOrigPos;
private Quaternion _prewarmOrigRot;
private Vector3 _prewarmOrigScale;
private bool _prewarmOrigActive;
/// <summary>入场飞机预热(面板在加载收尾阶段调用;座位/炮台需已激活)。幂等:重复调用只跑一次。</summary>
public void PrewarmEnterPlane()
{
if (!isActiveAndEnabled) return;
if (_prewarmRoutine != null) return;
_prewarmRoutine = StartCoroutine(PrewarmPlaneRoutine());
}
private IEnumerator PrewarmPlaneRoutine()
{
Transform plane = FindPlaneRoot();
if (plane == null) { _prewarmRoutine = null; yield break; }
_prewarmPlane = plane;
_prewarmOrigParent = plane.parent;
_prewarmOrigSibling = plane.GetSiblingIndex();
_prewarmOrigPos = plane.localPosition;
_prewarmOrigRot = plane.localRotation;
_prewarmOrigScale = plane.localScale;
_prewarmOrigActive = plane.gameObject.activeSelf;
// 只开入场要用的 Body+护盾、关掉免费三类——避免把五十来个粒子系统全部初始化(反而更重)
SetPlaneChildActive(plane, "Body", true);
SetPlaneChildActive(plane, "PW_Effect_Defend", true);
SetPlaneChildActive(plane, "FreeEffect", false);
SetPlaneChildActive(plane, "FreeEffect_Crit", false);
SetPlaneChildActive(plane, "FreeEffect_Speedup", false);
// 临时挂到根节点(激活中)并缩到 0:既能触发初始化,又完全不可见
Transform holder = transform.root;
if (holder != null && holder != _prewarmOrigParent)
plane.SetParent(holder, true);
plane.localScale = Vector3.zero;
plane.gameObject.SetActive(true);
yield return null;
yield return null; // 让骨架首帧网格、粒子首帧模拟都跑到
FinishPrewarmRestore();
Debug.Log($"[XJMH入场] 飞机预热完成({plane.name})");
_prewarmRoutine = null;
}
/// <summary>预热还原:飞机隐藏并恢复到预热前的挂载/变换/激活状态(协程正常收尾或中途被打断都用它)</summary>
private void FinishPrewarmRestore()
{
if (_prewarmPlane == null) return;
Transform plane = _prewarmPlane;
_prewarmPlane = null;
plane.gameObject.SetActive(false);
if (_prewarmOrigParent != null && plane.parent != _prewarmOrigParent)
{
plane.SetParent(_prewarmOrigParent, false);
plane.SetSiblingIndex(_prewarmOrigSibling);
}
plane.localPosition = _prewarmOrigPos;
plane.localRotation = _prewarmOrigRot;
plane.localScale = _prewarmOrigScale;
plane.gameObject.SetActive(_prewarmOrigActive);
}
/// <summary>预热中途被打断(座位/炮台被禁用):停协程并把飞机还原回原挂载点,避免残留</summary>
private void CleanupPrewarm()
{
if (_prewarmRoutine != null) { StopCoroutine(_prewarmRoutine); _prewarmRoutine = null; }
FinishPrewarmRestore();
}
/// <summary> /// <summary>
/// 找飞机骨架:① 炮台子树(飞机挂在炮台下的布局); /// 找飞机骨架:① 炮台子树(飞机挂在炮台下的布局);
/// ② 座位子树(当前 XJMH 布局:飞机与炮台平级、挂在座位的变体容器节点里, /// ② 座位子树(当前 XJMH 布局:飞机与炮台平级、挂在座位的变体容器节点里,
@@ -528,43 +689,50 @@ public class FlyTurretData : TurretData
return 0; return 0;
} }
/// <summary>入场开始:飞机临时挂到炮台下(保留世界位置/旋转/缩放)——原挂载点(座位下的变体容器节点)默认未激活,直接显隐看不到</summary> /// <summary>入场开始:飞机临时挂到炮台下(保留世界位置/旋转/缩放)——原挂载点(座位下的变体容器节点)默认未激活,直接显隐看不到;
/// 完整飞机额外摆到炮台 Aprk 停靠位(原版 aprkPos)</summary>
private void AttachPlaneForEnter() private void AttachPlaneForEnter()
{ {
_enterPlaneOrigParent = _enterPlane.parent; _enterPlaneOrigParent = _enterPlaneRoot.parent;
_enterPlaneOrigSibling = _enterPlane.GetSiblingIndex(); _enterPlaneOrigSibling = _enterPlaneRoot.GetSiblingIndex();
_enterPlaneOrigLocalPos = _enterPlane.localPosition; _enterPlaneOrigLocalPos = _enterPlaneRoot.localPosition;
_enterPlaneOrigLocalRot = _enterPlane.localRotation; _enterPlaneOrigLocalRot = _enterPlaneRoot.localRotation;
_enterPlaneOrigLocalScale = _enterPlane.localScale; _enterPlaneOrigLocalScale = _enterPlaneRoot.localScale;
if (_enterPlane.parent != transform) if (_enterPlaneRoot.parent != transform)
_enterPlane.SetParent(transform, true); // true=保留世界变换,停靠位不跳 _enterPlaneRoot.SetParent(transform, true); // true=保留世界变换,停靠位不跳
if (_enterPlaneRoot.name.StartsWith("PW_Plane"))
{
Transform aprk = FindAprkNode();
if (aprk != null) _enterPlaneRoot.position = aprk.position; // 停靠位=炮台 Aprk(原版)
}
} }
/// <summary>入场结束/清理:飞机隐藏并还原父节点与本地变换,不残留运行时改动</summary> /// <summary>入场结束/清理:飞机隐藏并还原父节点与本地变换,不残留运行时改动</summary>
private void DetachPlaneAfterEnter() private void DetachPlaneAfterEnter()
{ {
if (_enterPlane == null) return; if (_enterPlaneRoot == null) return;
_enterPlane.gameObject.SetActive(false); _enterPlaneRoot.gameObject.SetActive(false);
if (_enterPlaneOrigParent != null && _enterPlane.parent != _enterPlaneOrigParent) if (_enterPlaneOrigParent != null && _enterPlaneRoot.parent != _enterPlaneOrigParent)
{ {
_enterPlane.SetParent(_enterPlaneOrigParent, false); _enterPlaneRoot.SetParent(_enterPlaneOrigParent, false);
_enterPlane.SetSiblingIndex(_enterPlaneOrigSibling); _enterPlaneRoot.SetSiblingIndex(_enterPlaneOrigSibling);
} }
_enterPlane.localPosition = _enterPlaneOrigLocalPos; _enterPlaneRoot.localPosition = _enterPlaneOrigLocalPos;
_enterPlane.localRotation = _enterPlaneOrigLocalRot; _enterPlaneRoot.localRotation = _enterPlaneOrigLocalRot;
_enterPlane.localScale = _enterPlaneOrigLocalScale; _enterPlaneRoot.localScale = _enterPlaneOrigLocalScale;
} }
/// <summary>入场动画清理:停协程 + 飞机隐藏并还原挂载 + Board/炮台本体恢复显示,禁用/回收不残留</summary> /// <summary>入场动画清理:停协程 + 飞机隐藏并还原挂载 + Board/炮台本体恢复显示,禁用/回收不残留</summary>
private void CleanupEnterAction() private void CleanupEnterAction()
{ {
if (_enterRoutine != null) { StopCoroutine(_enterRoutine); _enterRoutine = null; } if (_enterRoutine != null) { StopCoroutine(_enterRoutine); _enterRoutine = null; }
if (_enterPlane != null) if (_enterPlaneRoot != null)
{ {
DetachPlaneAfterEnter(); DetachPlaneAfterEnter();
_enterPlane = null; _enterPlaneRoot = null;
_enterPlaneSg = null; _enterPlaneSg = null;
} }
// 入场中途被打断:恢复被本类暂时隐藏的 Board(只恢复自己隐藏的,不动其他逻辑的显隐) // 入场中途被打断:恢复被本类暂时隐藏的 Board(只恢复自己隐藏的,不动其他逻辑的显隐)
@@ -582,6 +750,8 @@ public class FlyTurretData : TurretData
{ {
// ⭐ 入场动画清理(停协程、飞机复位隐藏、炮台本体恢复显示):必须在提前 return 之前调用 // ⭐ 入场动画清理(停协程、飞机复位隐藏、炮台本体恢复显示):必须在提前 return 之前调用
CleanupEnterAction(); CleanupEnterAction();
// ⭐ 预热中途被打断:还原临时挂载的飞机,避免残留
CleanupPrewarm();
// 切炮台/座位被禁用时兜底复位 // 切炮台/座位被禁用时兜底复位
if (!IsFlying) return; if (!IsFlying) return;
@@ -34,7 +34,7 @@ public class AudioResourcesData
{ {
//这里要添加默认的音效 背景 按钮点击 //默认音效(背景音乐、按钮点击 PW_Button 等)放在 Audio+Default 标签集合里,随启动常驻加载
LoadDefaultAudioGame(); LoadDefaultAudioGame();
} }
static async void LoadDefaultAudioGame() static async void LoadDefaultAudioGame()
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2773a9b37833a5846ac71179ba21d3fe
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -260,7 +260,9 @@
"fishNumber": 11024, "fishNumber": 11024,
"prefabFishResourcesPath": "171", "prefabFishResourcesPath": "171",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30110, "layer": 30110,
@@ -271,7 +273,9 @@
"fishNumber": 11025, "fishNumber": 11025,
"prefabFishResourcesPath": "192", "prefabFishResourcesPath": "192",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30120, "layer": 30120,
@@ -282,7 +286,9 @@
"fishNumber": 11026, "fishNumber": 11026,
"prefabFishResourcesPath": "176", "prefabFishResourcesPath": "176",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30130, "layer": 30130,
@@ -293,7 +299,9 @@
"fishNumber": 11027, "fishNumber": 11027,
"prefabFishResourcesPath": "fish_136", "prefabFishResourcesPath": "fish_136",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30140, "layer": 30140,
@@ -307,7 +315,7 @@
"moveAudio": [], "moveAudio": [],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30140, "layer": 30150,
"boardText": "", "boardText": "",
"dieEffectAssets": "" "dieEffectAssets": ""
}, },
@@ -315,7 +323,9 @@
"fishNumber": 11029, "fishNumber": 11029,
"prefabFishResourcesPath": "1595", "prefabFishResourcesPath": "1595",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
0
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30160, "layer": 30160,
@@ -326,7 +336,9 @@
"fishNumber": 11030, "fishNumber": 11030,
"prefabFishResourcesPath": "fish_144", "prefabFishResourcesPath": "fish_144",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30170, "layer": 30170,
@@ -337,7 +349,9 @@
"fishNumber": 11031, "fishNumber": 11031,
"prefabFishResourcesPath": "182", "prefabFishResourcesPath": "182",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30180, "layer": 30180,
@@ -370,7 +384,9 @@
"fishNumber": 11034, "fishNumber": 11034,
"prefabFishResourcesPath": "1613", "prefabFishResourcesPath": "1613",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30210, "layer": 30210,
@@ -381,7 +397,9 @@
"fishNumber": 11035, "fishNumber": 11035,
"prefabFishResourcesPath": "6005", "prefabFishResourcesPath": "6005",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30220, "layer": 30220,
@@ -392,7 +410,9 @@
"fishNumber": 11036, "fishNumber": 11036,
"prefabFishResourcesPath": "6012", "prefabFishResourcesPath": "6012",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
0
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30230, "layer": 30230,
@@ -403,7 +423,9 @@
"fishNumber": 11037, "fishNumber": 11037,
"prefabFishResourcesPath": "1615", "prefabFishResourcesPath": "1615",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
0
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30240, "layer": 30240,
@@ -414,7 +436,9 @@
"fishNumber": 11038, "fishNumber": 11038,
"prefabFishResourcesPath": "5010", "prefabFishResourcesPath": "5010",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30250, "layer": 30250,
@@ -425,7 +449,9 @@
"fishNumber": 11039, "fishNumber": 11039,
"prefabFishResourcesPath": "7005", "prefabFishResourcesPath": "7005",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30260, "layer": 30260,
@@ -447,7 +473,9 @@
"fishNumber": 11041, "fishNumber": 11041,
"prefabFishResourcesPath": "6004", "prefabFishResourcesPath": "6004",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30270, "layer": 30270,
@@ -458,7 +486,9 @@
"fishNumber": 11042, "fishNumber": 11042,
"prefabFishResourcesPath": "1614", "prefabFishResourcesPath": "1614",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 0, "layer": 0,
@@ -469,7 +499,9 @@
"fishNumber": 11043, "fishNumber": 11043,
"prefabFishResourcesPath": "4022", "prefabFishResourcesPath": "4022",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
2
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 0, "layer": 0,
@@ -747,7 +779,9 @@
"fishNumber": 12022, "fishNumber": 12022,
"prefabFishResourcesPath": "PW_Enemy_114", "prefabFishResourcesPath": "PW_Enemy_114",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30100, "layer": 30100,
@@ -758,7 +792,9 @@
"fishNumber": 12023, "fishNumber": 12023,
"prefabFishResourcesPath": "PW_Enemy_113", "prefabFishResourcesPath": "PW_Enemy_113",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30110, "layer": 30110,
@@ -769,7 +805,9 @@
"fishNumber": 12024, "fishNumber": 12024,
"prefabFishResourcesPath": "PW_Enemy_112", "prefabFishResourcesPath": "PW_Enemy_112",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30120, "layer": 30120,
@@ -779,7 +817,9 @@
{ {
"fishNumber": 12025, "fishNumber": 12025,
"prefabFishResourcesPath": "PW_Enemy_102", "prefabFishResourcesPath": "PW_Enemy_102",
"showAudio": [], "showAudio": [
102
],
"moveAudio": [], "moveAudio": [],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
@@ -791,7 +831,9 @@
"fishNumber": 12026, "fishNumber": 12026,
"prefabFishResourcesPath": "PW_Enemy_1000", "prefabFishResourcesPath": "PW_Enemy_1000",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30140, "layer": 30140,
@@ -813,7 +855,9 @@
"fishNumber": 12028, "fishNumber": 12028,
"prefabFishResourcesPath": "PW_Enemy_3000", "prefabFishResourcesPath": "PW_Enemy_3000",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30160, "layer": 30160,
@@ -835,7 +879,9 @@
"fishNumber": 12030, "fishNumber": 12030,
"prefabFishResourcesPath": "PW_Enemy_5000", "prefabFishResourcesPath": "PW_Enemy_5000",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30180, "layer": 30180,
@@ -846,7 +892,9 @@
"fishNumber": 12031, "fishNumber": 12031,
"prefabFishResourcesPath": "PW_Enemy_6000", "prefabFishResourcesPath": "PW_Enemy_6000",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30190, "layer": 30190,
@@ -857,7 +905,9 @@
"fishNumber": 12032, "fishNumber": 12032,
"prefabFishResourcesPath": "7001", "prefabFishResourcesPath": "7001",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30200, "layer": 30200,
@@ -868,7 +918,9 @@
"fishNumber": 12033, "fishNumber": 12033,
"prefabFishResourcesPath": "Z_4030", "prefabFishResourcesPath": "Z_4030",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30210, "layer": 30210,
@@ -879,7 +931,9 @@
"fishNumber": 12034, "fishNumber": 12034,
"prefabFishResourcesPath": "PW_Enemy_115", "prefabFishResourcesPath": "PW_Enemy_115",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [
1
],
"dieAudio": [], "dieAudio": [],
"dieGlodAduio": {}, "dieGlodAduio": {},
"layer": 30220, "layer": 30220,
@@ -888,7 +942,7 @@
}, },
{ {
"fishNumber": 13001, "fishNumber": 13001,
"prefabFishResourcesPath": "fish_1017 Variant", "prefabFishResourcesPath": "fish_1018 Variant",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [],
"dieAudio": [ "dieAudio": [
@@ -903,7 +957,7 @@
}, },
{ {
"fishNumber": 13002, "fishNumber": 13002,
"prefabFishResourcesPath": "fish_1018 Variant", "prefabFishResourcesPath": "fish_1017 Variant",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [],
"dieAudio": [ "dieAudio": [
@@ -993,7 +1047,7 @@
}, },
{ {
"fishNumber": 13008, "fishNumber": 13008,
"prefabFishResourcesPath": "fish_1024 Variant", "prefabFishResourcesPath": "fish_1028 Variant",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [],
"dieAudio": [ "dieAudio": [
@@ -1008,7 +1062,7 @@
}, },
{ {
"fishNumber": 13009, "fishNumber": 13009,
"prefabFishResourcesPath": "fish_1025 Variant", "prefabFishResourcesPath": "fish_1024 Variant",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [],
"dieAudio": [ "dieAudio": [
@@ -1023,7 +1077,7 @@
}, },
{ {
"fishNumber": 13010, "fishNumber": 13010,
"prefabFishResourcesPath": "fish_1026 Variant", "prefabFishResourcesPath": "fish_1027 Variant",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [],
"dieAudio": [ "dieAudio": [
@@ -1038,7 +1092,7 @@
}, },
{ {
"fishNumber": 13011, "fishNumber": 13011,
"prefabFishResourcesPath": "fish_1027 Variant", "prefabFishResourcesPath": "fish_1025 Variant",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [],
"dieAudio": [ "dieAudio": [
@@ -1058,7 +1112,7 @@
}, },
{ {
"fishNumber": 13012, "fishNumber": 13012,
"prefabFishResourcesPath": "fish_1028 Variant", "prefabFishResourcesPath": "fish_1026 Variant",
"showAudio": [], "showAudio": [],
"moveAudio": [], "moveAudio": [],
"dieAudio": [ "dieAudio": [
@@ -1582,7 +1636,7 @@
"boardText": "", "boardText": "",
"dieEffectAssets": "" "dieEffectAssets": ""
}, },
{ {
"fishNumber": 13040, "fishNumber": 13040,
"prefabFishResourcesPath": "6002", "prefabFishResourcesPath": "6002",
"showAudio": [], "showAudio": [],
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 47ad122f0a168f74d820cf628df9d8fc
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -36,6 +36,7 @@ public class HuoDe : MonoBehaviour
{ {
if (skeletonGraphic == null) if (skeletonGraphic == null)
skeletonGraphic = GetComponent<SkeletonGraphic>(); skeletonGraphic = GetComponent<SkeletonGraphic>();
UIClickSound.AttachToAll(gameObject); // ⭐ 弹窗是独立预制体(非 UIBase 面板),这里手动补按钮点击音效
if (btn_Close != null) if (btn_Close != null)
btn_Close.onClick.AddListener(Close); btn_Close.onClick.AddListener(Close);
} }
@@ -0,0 +1,175 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2498735191370420737
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8936735123803640290}
- component: {fileID: 4802091541961723999}
- component: {fileID: 5229908422829759345}
- component: {fileID: 4032031768493949582}
m_Layer: 5
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8936735123803640290
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2498735191370420737}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 439111589277315844}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4802091541961723999
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2498735191370420737}
m_CullTransparentMesh: 1
--- !u!114 &5229908422829759345
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2498735191370420737}
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: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!95 &4032031768493949582
Animator:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2498735191370420737}
m_Enabled: 1
m_Avatar: {fileID: 0}
m_Controller: {fileID: 9100000, guid: a5d7833a4b87655418d3ab65ec5bf9ea, type: 2}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_StabilizeFeet: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorStateOnDisable: 0
m_WriteDefaultValuesOnDisable: 0
--- !u!1 &4264627302849353753
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 439111589277315844}
- component: {fileID: 4304591977372035238}
- component: {fileID: 347520471200239115}
m_Layer: 5
m_Name: JiaZaiZhong
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &439111589277315844
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4264627302849353753}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8936735123803640290}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4304591977372035238
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4264627302849353753}
m_CullTransparentMesh: 1
--- !u!114 &347520471200239115
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4264627302849353753}
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.4627451}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 021ede141bc7c4e47bcf4fabed7681d6
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -21,6 +21,7 @@ public class TiShi : MonoBehaviour
private void Awake() private void Awake()
{ {
_standardSize = transform.GetChild(0).localScale; _standardSize = transform.GetChild(0).localScale;
UIClickSound.AttachToAll(gameObject); // ⭐ 弹窗是独立预制体(非 UIBase 面板),这里手动补按钮点击音效
if (btn_Close != null) if (btn_Close != null)
btn_Close.onClick.AddListener(Close); btn_Close.onClick.AddListener(Close);
if (btn_QueRen != null) if (btn_QueRen != null)
@@ -476,6 +476,37 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
} }
} }
/// <summary>
/// XJMH 进房首帧预热(加载 90%→100% 收尾窗口调用,进度条还显示着玩家看不到):
/// 把本地座位(座位自带炮台随 Awake 一起初始化)与"入场要用的那架完整飞机"提前点亮——
/// 这些 XJMH 独有资产首次初始化(骨架/粒子/贴图首上传)很重,全堆在 100% 那一帧玩家会看到明显卡顿。
/// 入场动画有加载完成门卫(IsGameLoadCompleted),预热不会导致动画提前播放。
/// </summary>
private void PrewarmXJMHForLocalSeat()
{
if (!_pendingFirstShowInit || _pendingRoomJoinNotice == null) return;
if (list_Sits == null || list_Sits.Count == 0) return;
var sit = list_Sits.Find(s => s != null && s.posID == SeatMirror.ToDisplay(_pendingRoomJoinNotice.Position));
if (sit == null || sit.turretControlMode != TurretControlMode.XJMH) return;
StartCoroutine(PrewarmXJMHCoroutine(sit));
}
private IEnumerator PrewarmXJMHCoroutine(SitPosData sit)
{
// ① 提前激活本地座位:Awake → InitXJMHTurret → 激活默认炮台(PW_Battery_x 首次初始化在这里完成,
// 被加载界面遮住)。100% 时 JoinGame 再 SetActive(true) 是幂等的,不影响正常入座流程
if (sit != null && !sit.gameObject.activeSelf)
sit.gameObject.SetActive(true);
yield return null; // 让座位/炮台这帧的重活落在加载画面里
// ② 飞机隐藏预热(座位激活后 currentTurret 已就绪 = 入场会用的那把)
var turret = sit != null ? sit.currentTurret as FlyTurretData : null;
if (turret != null)
turret.PrewarmEnterPlane();
}
private void RefreshGGKCount() private void RefreshGGKCount()
{ {
var user = GameManager.Instance.user; var user = GameManager.Instance.user;
@@ -1408,6 +1439,10 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
// ⭐ 90% 确认点:走到这里所有资源加载都已完成(上面全是 await 顺序执行) // ⭐ 90% 确认点:走到这里所有资源加载都已完成(上面全是 await 顺序执行)
SetLoadProgress(0.9f); SetLoadProgress(0.9f);
// ⭐ XJMH 预热:借 90→100 的收尾窗口(进度条还在走)提前把本地座位/炮台 + 入场飞机点亮。
// 这些 XJMH 独有资产首次初始化(骨架/粒子/贴图)很重,堆到 100% 那帧玩家会看到卡一下
PrewarmXJMHForLocalSeat();
// ⭐ 90→100 平滑收尾:约 1 秒走完,进度条持续在动(替代原 2 秒死等; // ⭐ 90→100 平滑收尾:约 1 秒走完,进度条持续在动(替代原 2 秒死等;
// 保留这段缓冲是等出鱼首帧/场景渲染稳定,比原来快 1 秒+) // 保留这段缓冲是等出鱼首帧/场景渲染稳定,比原来快 1 秒+)
for (int i = 1; i <= 20; i++) for (int i = 1; i <= 20; i++)
+12
View File
@@ -0,0 +1,12 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Image
serializedVersion: 5
m_AnimatorParameters: []
m_AnimatorLayers: []
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a5d7833a4b87655418d3ab65ec5bf9ea
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 9100000
userData:
assetBundleName:
assetBundleVariant:
+53
View File
@@ -0,0 +1,53 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!74 &7400000
AnimationClip:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: New Animation
serializedVersion: 7
m_Legacy: 0
m_Compressed: 0
m_UseHighQualityCurve: 1
m_RotationCurves: []
m_CompressedRotationCurves: []
m_EulerCurves: []
m_PositionCurves: []
m_ScaleCurves: []
m_FloatCurves: []
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
m_Bounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings: []
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
m_StopTime: 1
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 1
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
m_LoopBlendPositionXZ: 0
m_KeepOriginalOrientation: 0
m_KeepOriginalPositionY: 1
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
m_EditorCurves: []
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3a164bdf076d93747a91d014fe5731c7
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

+417
View File
@@ -0,0 +1,417 @@
fileFormatVersion: 2
guid: 6fa3b0ef5bf546b4ea9786858bbde44c
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: jiazai_0
rect:
serializedVersion: 2
x: 0
y: 256
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 3a1b33406db69a24193fbb6582e3e53a
internalID: -431589004
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_1
rect:
serializedVersion: 2
x: 128
y: 256
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 59733beaf7ae07c47a98e6f70690cde1
internalID: 1332540317
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_2
rect:
serializedVersion: 2
x: 256
y: 256
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: e8d6e9aa0a08d1c408f88b0f1f14be7d
internalID: -1057538697
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_3
rect:
serializedVersion: 2
x: 384
y: 256
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: a8a50540d47ba7549b7b9302ce6f9e81
internalID: -1066861282
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_4
rect:
serializedVersion: 2
x: 0
y: 128
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: ca0f711641dc6e8488225bfc8cb29d97
internalID: -1457659192
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_5
rect:
serializedVersion: 2
x: 128
y: 128
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 16d7e843e68a7b3468331d4195118e4d
internalID: -909050252
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_6
rect:
serializedVersion: 2
x: 256
y: 128
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: db808d1e8bd509144809cd2b60b562d5
internalID: 1999200147
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_7
rect:
serializedVersion: 2
x: 384
y: 128
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: d4f537f981fbb2f47aabf664195fdeed
internalID: -1366936253
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_8
rect:
serializedVersion: 2
x: 0
y: 0
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 784ca035b9d8b0646901e27a353ae19b
internalID: -134975219
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_9
rect:
serializedVersion: 2
x: 128
y: 0
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 0eb4ff6c4ce2d1d4eb3420e66b8df205
internalID: 724369236
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_10
rect:
serializedVersion: 2
x: 256
y: 0
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 00e0773ac828d574a89d91cb0b344bc5
internalID: 505577262
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: jiazai_11
rect:
serializedVersion: 2
x: 384
y: 0
width: 128
height: 128
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 407257b49874a2043adf9d112ed520d6
internalID: 480037776
vertices: []
indices:
edges: []
weights: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable:
jiazai_0: -431589004
jiazai_1: 1332540317
jiazai_10: 505577262
jiazai_11: 480037776
jiazai_2: -1057538697
jiazai_3: -1066861282
jiazai_4: -1457659192
jiazai_5: -909050252
jiazai_6: 1999200147
jiazai_7: -1366936253
jiazai_8: -134975219
jiazai_9: 724369236
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant: