1
This commit is contained in:
@@ -41,6 +41,11 @@ MonoBehaviour:
|
|||||||
m_ReadOnly: 0
|
m_ReadOnly: 0
|
||||||
m_SerializedLabels: []
|
m_SerializedLabels: []
|
||||||
FlaggedDuringContentUpdateRestriction: 0
|
FlaggedDuringContentUpdateRestriction: 0
|
||||||
|
- m_GUID: 19aab719d005628448bd0ac1931120bc
|
||||||
|
m_Address: Assets/MyGame/aa/UI/DefaultPanel/LoadPanel/LoadBG.renderTexture
|
||||||
|
m_ReadOnly: 0
|
||||||
|
m_SerializedLabels: []
|
||||||
|
FlaggedDuringContentUpdateRestriction: 0
|
||||||
- m_GUID: 3ff18466016e86542b372582f348d0d6
|
- m_GUID: 3ff18466016e86542b372582f348d0d6
|
||||||
m_Address: Assets/MyGame/aa/Game/ZhanShen/Game/display_FishEntry_6004.prefab
|
m_Address: Assets/MyGame/aa/Game/ZhanShen/Game/display_FishEntry_6004.prefab
|
||||||
m_ReadOnly: 0
|
m_ReadOnly: 0
|
||||||
|
|||||||
Binary file not shown.
@@ -731,7 +731,7 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
|
|||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,FishResourcesData.<LoadFishAssetsData>d__20>(System.Runtime.CompilerServices.TaskAwaiter&,FishResourcesData.<LoadFishAssetsData>d__20&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,FishResourcesData.<LoadFishAssetsData>d__20>(System.Runtime.CompilerServices.TaskAwaiter&,FishResourcesData.<LoadFishAssetsData>d__20&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,FishResourcesData.<LoadFishAssetsDataCore>d__21>(System.Runtime.CompilerServices.TaskAwaiter&,FishResourcesData.<LoadFishAssetsDataCore>d__21&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,FishResourcesData.<LoadFishAssetsDataCore>d__21>(System.Runtime.CompilerServices.TaskAwaiter&,FishResourcesData.<LoadFishAssetsDataCore>d__21&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,GameMainPanel_FishBase.<HideBarDelayed>d__182>(System.Runtime.CompilerServices.TaskAwaiter&,GameMainPanel_FishBase.<HideBarDelayed>d__182&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,GameMainPanel_FishBase.<HideBarDelayed>d__182>(System.Runtime.CompilerServices.TaskAwaiter&,GameMainPanel_FishBase.<HideBarDelayed>d__182&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,GameManager.<InItLoad>d__45>(System.Runtime.CompilerServices.TaskAwaiter&,GameManager.<InItLoad>d__45&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,GameManager.<InItLoad>d__55>(System.Runtime.CompilerServices.TaskAwaiter&,GameManager.<InItLoad>d__55&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezier>d__5>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezier>d__5&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezier>d__5>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezier>d__5&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezierTxtAsync>d__12>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezierTxtAsync>d__12&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezierTxtAsync>d__12>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezierTxtAsync>d__12&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13&)
|
||||||
@@ -751,7 +751,7 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
|
|||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,FishResourcesData.<LoadFishAssetsData>d__20>(System.Runtime.CompilerServices.TaskAwaiter&,FishResourcesData.<LoadFishAssetsData>d__20&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,FishResourcesData.<LoadFishAssetsData>d__20>(System.Runtime.CompilerServices.TaskAwaiter&,FishResourcesData.<LoadFishAssetsData>d__20&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,FishResourcesData.<LoadFishAssetsDataCore>d__21>(System.Runtime.CompilerServices.TaskAwaiter&,FishResourcesData.<LoadFishAssetsDataCore>d__21&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,FishResourcesData.<LoadFishAssetsDataCore>d__21>(System.Runtime.CompilerServices.TaskAwaiter&,FishResourcesData.<LoadFishAssetsDataCore>d__21&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,GameMainPanel_FishBase.<HideBarDelayed>d__182>(System.Runtime.CompilerServices.TaskAwaiter&,GameMainPanel_FishBase.<HideBarDelayed>d__182&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,GameMainPanel_FishBase.<HideBarDelayed>d__182>(System.Runtime.CompilerServices.TaskAwaiter&,GameMainPanel_FishBase.<HideBarDelayed>d__182&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,GameManager.<InItLoad>d__45>(System.Runtime.CompilerServices.TaskAwaiter&,GameManager.<InItLoad>d__45&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,GameManager.<InItLoad>d__55>(System.Runtime.CompilerServices.TaskAwaiter&,GameManager.<InItLoad>d__55&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezier>d__5>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezier>d__5&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezier>d__5>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezier>d__5&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezierTxtAsync>d__12>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezierTxtAsync>d__12&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezierTxtAsync>d__12>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezierTxtAsync>d__12&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Threading.Tasks.VoidTaskResult>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter,MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13>(System.Runtime.CompilerServices.TaskAwaiter&,MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13&)
|
||||||
@@ -778,7 +778,7 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
|
|||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<FishResourcesData.<LoadFishAssetsDataCore>d__21>(FishResourcesData.<LoadFishAssetsDataCore>d__21&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<FishResourcesData.<LoadFishAssetsDataCore>d__21>(FishResourcesData.<LoadFishAssetsDataCore>d__21&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<GameMainPanel_FishBase.<HideBarDelayed>d__182>(GameMainPanel_FishBase.<HideBarDelayed>d__182&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<GameMainPanel_FishBase.<HideBarDelayed>d__182>(GameMainPanel_FishBase.<HideBarDelayed>d__182&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<GameMainPanel_FishBase.<LoadBulletClip>d__176>(GameMainPanel_FishBase.<LoadBulletClip>d__176&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<GameMainPanel_FishBase.<LoadBulletClip>d__176>(GameMainPanel_FishBase.<LoadBulletClip>d__176&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<GameManager.<InItLoad>d__45>(GameManager.<InItLoad>d__45&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<GameManager.<InItLoad>d__55>(GameManager.<InItLoad>d__55&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<MonsterMoveLine.<LoadBezier>d__5>(MonsterMoveLine.<LoadBezier>d__5&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<MonsterMoveLine.<LoadBezier>d__5>(MonsterMoveLine.<LoadBezier>d__5&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<MonsterMoveLine.<LoadBezierTxtAsync>d__12>(MonsterMoveLine.<LoadBezierTxtAsync>d__12&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<MonsterMoveLine.<LoadBezierTxtAsync>d__12>(MonsterMoveLine.<LoadBezierTxtAsync>d__12&)
|
||||||
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13>(MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13&)
|
// System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13>(MonsterMoveLine.<LoadBezierTxtAsyncCore>d__13&)
|
||||||
@@ -851,6 +851,7 @@ public class AOTGenericReferences : UnityEngine.MonoBehaviour
|
|||||||
// object[] UnityEngine.GameObject.GetComponents<object>()
|
// object[] UnityEngine.GameObject.GetComponents<object>()
|
||||||
// object[] UnityEngine.GameObject.GetComponentsInChildren<object>(bool)
|
// object[] UnityEngine.GameObject.GetComponentsInChildren<object>(bool)
|
||||||
// bool UnityEngine.GameObject.TryGetComponent<object>(object&)
|
// bool UnityEngine.GameObject.TryGetComponent<object>(object&)
|
||||||
|
// object UnityEngine.Object.FindFirstObjectByType<object>()
|
||||||
// object[] UnityEngine.Object.FindObjectsOfType<object>()
|
// object[] UnityEngine.Object.FindObjectsOfType<object>()
|
||||||
// object UnityEngine.Object.Instantiate<object>(object)
|
// object UnityEngine.Object.Instantiate<object>(object)
|
||||||
// object UnityEngine.Object.Instantiate<object>(object,UnityEngine.Transform)
|
// object UnityEngine.Object.Instantiate<object>(object,UnityEngine.Transform)
|
||||||
|
|||||||
@@ -156,6 +156,7 @@
|
|||||||
<type fullname="Unity.Jobs.IJob" preserve="all" />
|
<type fullname="Unity.Jobs.IJob" preserve="all" />
|
||||||
<type fullname="UnityEngine.AddComponentMenu" preserve="all" />
|
<type fullname="UnityEngine.AddComponentMenu" preserve="all" />
|
||||||
<type fullname="UnityEngine.Application" preserve="all" />
|
<type fullname="UnityEngine.Application" preserve="all" />
|
||||||
|
<type fullname="UnityEngine.Application/LogCallback" preserve="all" />
|
||||||
<type fullname="UnityEngine.AsyncOperation" preserve="all" />
|
<type fullname="UnityEngine.AsyncOperation" preserve="all" />
|
||||||
<type fullname="UnityEngine.Behaviour" preserve="all" />
|
<type fullname="UnityEngine.Behaviour" preserve="all" />
|
||||||
<type fullname="UnityEngine.Bounds" preserve="all" />
|
<type fullname="UnityEngine.Bounds" preserve="all" />
|
||||||
@@ -180,6 +181,7 @@
|
|||||||
<type fullname="UnityEngine.HideInInspector" preserve="all" />
|
<type fullname="UnityEngine.HideInInspector" preserve="all" />
|
||||||
<type fullname="UnityEngine.LayerMask" preserve="all" />
|
<type fullname="UnityEngine.LayerMask" preserve="all" />
|
||||||
<type fullname="UnityEngine.LineRenderer" preserve="all" />
|
<type fullname="UnityEngine.LineRenderer" preserve="all" />
|
||||||
|
<type fullname="UnityEngine.LogType" preserve="all" />
|
||||||
<type fullname="UnityEngine.Material" preserve="all" />
|
<type fullname="UnityEngine.Material" preserve="all" />
|
||||||
<type fullname="UnityEngine.Mathf" preserve="all" />
|
<type fullname="UnityEngine.Mathf" preserve="all" />
|
||||||
<type fullname="UnityEngine.MeshRenderer" preserve="all" />
|
<type fullname="UnityEngine.MeshRenderer" preserve="all" />
|
||||||
@@ -205,6 +207,8 @@
|
|||||||
<type fullname="UnityEngine.RequireComponent" preserve="all" />
|
<type fullname="UnityEngine.RequireComponent" preserve="all" />
|
||||||
<type fullname="UnityEngine.ResourceRequest" preserve="all" />
|
<type fullname="UnityEngine.ResourceRequest" preserve="all" />
|
||||||
<type fullname="UnityEngine.Resources" preserve="all" />
|
<type fullname="UnityEngine.Resources" preserve="all" />
|
||||||
|
<type fullname="UnityEngine.RuntimeInitializeLoadType" preserve="all" />
|
||||||
|
<type fullname="UnityEngine.RuntimeInitializeOnLoadMethodAttribute" preserve="all" />
|
||||||
<type fullname="UnityEngine.SceneManagement.LoadSceneMode" preserve="all" />
|
<type fullname="UnityEngine.SceneManagement.LoadSceneMode" preserve="all" />
|
||||||
<type fullname="UnityEngine.SceneManagement.Scene" preserve="all" />
|
<type fullname="UnityEngine.SceneManagement.Scene" preserve="all" />
|
||||||
<type fullname="UnityEngine.SceneManagement.SceneManager" preserve="all" />
|
<type fullname="UnityEngine.SceneManagement.SceneManager" preserve="all" />
|
||||||
@@ -385,9 +389,13 @@
|
|||||||
<type fullname="System.IAsyncResult" preserve="all" />
|
<type fullname="System.IAsyncResult" preserve="all" />
|
||||||
<type fullname="System.IDisposable" preserve="all" />
|
<type fullname="System.IDisposable" preserve="all" />
|
||||||
<type fullname="System.IFormatProvider" preserve="all" />
|
<type fullname="System.IFormatProvider" preserve="all" />
|
||||||
|
<type fullname="System.IO.Directory" preserve="all" />
|
||||||
|
<type fullname="System.IO.DirectoryInfo" preserve="all" />
|
||||||
<type fullname="System.IO.Path" preserve="all" />
|
<type fullname="System.IO.Path" preserve="all" />
|
||||||
|
<type fullname="System.IO.StreamWriter" preserve="all" />
|
||||||
<type fullname="System.IO.StringReader" preserve="all" />
|
<type fullname="System.IO.StringReader" preserve="all" />
|
||||||
<type fullname="System.IO.TextReader" preserve="all" />
|
<type fullname="System.IO.TextReader" preserve="all" />
|
||||||
|
<type fullname="System.IO.TextWriter" preserve="all" />
|
||||||
<type fullname="System.Int32" preserve="all" />
|
<type fullname="System.Int32" preserve="all" />
|
||||||
<type fullname="System.Int64" preserve="all" />
|
<type fullname="System.Int64" preserve="all" />
|
||||||
<type fullname="System.Linq.Enumerable" preserve="all" />
|
<type fullname="System.Linq.Enumerable" preserve="all" />
|
||||||
|
|||||||
@@ -0,0 +1,92 @@
|
|||||||
|
using System.IO;
|
||||||
|
using HybridCLR;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditor.Build;
|
||||||
|
using UnityEditor.Build.Reporting;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 打包后把这次构建裁剪出来的 AOT 补充元数据 dll 刷进 StreamingAssets/HybridCLR/AOT。
|
||||||
|
///
|
||||||
|
/// 为什么要它:运行时 Launcher 会去 StreamingAssets/HybridCLR/AOT 读这些 dll 做"补充元数据"
|
||||||
|
/// (HybridCLR 的 LoadMetadataForAOTAssembly)。它们是构建过程裁剪出来的,HybridCLR 不会自动
|
||||||
|
/// 替你放进 StreamingAssets —— 漏了这一步,一旦改到 AOT 代码(GameFramework / Launcher /
|
||||||
|
/// Assembly-CSharp 这类),就会出现类型/函数缺失甚至黑屏。
|
||||||
|
///
|
||||||
|
/// 同步范围:只刷新 StreamingAssets/HybridCLR/AOT 里**已经存在**的那些 *.dll.bytes
|
||||||
|
/// (用它的文件名去裁剪产物目录里找同名 dll)。所以要在元数据列表里增减程序集,
|
||||||
|
/// 只需在 StreamingAssets/HybridCLR/AOT 下增删对应的 *.dll.bytes 文件即可。
|
||||||
|
///
|
||||||
|
/// ⚠ 时序:AOT dll 是"这次构建"才产出的,所以这一步只能在构建结束(Postprocess)后执行,
|
||||||
|
/// 也就是说这次构建用的仍是上一次同步的结果,**下一次构建**才会带上最新元数据。
|
||||||
|
/// 所以:改了 AOT 代码 → 连续打两次包(或打完第一次后手动再打一次)。
|
||||||
|
///
|
||||||
|
/// 想临时关掉自动同步,把 AutoSyncOnBuild 改成 false;也可以手动执行菜单
|
||||||
|
/// Tools/刷新AOT元数据到StreamingAssets。
|
||||||
|
/// </summary>
|
||||||
|
public class AOTMetadataStreamingAssetsSync : IPostprocessBuildWithReport
|
||||||
|
{
|
||||||
|
/// <summary>打包后是否自动同步 AOT 补充元数据</summary>
|
||||||
|
private const bool AutoSyncOnBuild = true;
|
||||||
|
|
||||||
|
/// <summary>运行时读取补充元数据的目录(相对项目根)</summary>
|
||||||
|
private const string StreamingAOTDir = "Assets/StreamingAssets/HybridCLR/AOT";
|
||||||
|
|
||||||
|
private const string BytesSuffix = ".bytes";
|
||||||
|
|
||||||
|
public int callbackOrder => 0;
|
||||||
|
|
||||||
|
public void OnPostprocessBuild(BuildReport report)
|
||||||
|
{
|
||||||
|
if (!AutoSyncOnBuild) return;
|
||||||
|
Sync(report.summary.platform);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MenuItem("Tools/刷新AOT元数据到StreamingAssets")]
|
||||||
|
public static void SyncActive()
|
||||||
|
{
|
||||||
|
Sync(EditorUserBuildSettings.activeBuildTarget);
|
||||||
|
EditorUtility.DisplayDialog("AOT 元数据",
|
||||||
|
"已把最新的 AOT 补充元数据刷进 StreamingAssets/HybridCLR/AOT", "好");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>按 StreamingAssets 里现有的 *.dll.bytes,从本次构建的裁剪产物目录刷新同名 dll。</summary>
|
||||||
|
private static void Sync(BuildTarget target)
|
||||||
|
{
|
||||||
|
string srcDir = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
|
||||||
|
if (!Directory.Exists(srcDir))
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[AOTMeta] 找不到裁剪后的 AOT dll 目录: {srcDir}(还没构建过?)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Directory.Exists(StreamingAOTDir))
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[AOTMeta] 目录不存在: {StreamingAOTDir}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int copied = 0;
|
||||||
|
foreach (var dst in Directory.GetFiles(StreamingAOTDir))
|
||||||
|
{
|
||||||
|
if (!dst.EndsWith(".dll" + BytesSuffix)) continue;
|
||||||
|
|
||||||
|
// 磁盘文件形如 "GameFramework.dll.bytes" → 源文件名 "GameFramework.dll"
|
||||||
|
string dllName = Path.GetFileName(dst);
|
||||||
|
dllName = dllName.Substring(0, dllName.Length - BytesSuffix.Length);
|
||||||
|
|
||||||
|
string src = Path.Combine(srcDir, dllName);
|
||||||
|
if (!File.Exists(src))
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[AOTMeta] 裁剪产物里没有 {dllName},跳过({src})");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
File.Copy(src, dst, true);
|
||||||
|
copied++;
|
||||||
|
}
|
||||||
|
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
Debug.Log($"[AOTMeta] 已同步 {copied} 个 AOT 补充元数据 dll 到 {StreamingAOTDir}(下次打包生效)");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f9e9682645efeab40883af0247069890
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
"references": [
|
"references": [
|
||||||
"GameFramework",
|
"GameFramework",
|
||||||
"Game.Hotfix",
|
"Game.Hotfix",
|
||||||
|
"HybridCLR.Editor",
|
||||||
"CameraShake",
|
"CameraShake",
|
||||||
"spine-unity",
|
"spine-unity",
|
||||||
"Coffee.UIParticle",
|
"Coffee.UIParticle",
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
using System.IO;
|
||||||
|
using HybridCLR;
|
||||||
|
using HybridCLR.Commands;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditor.Build;
|
||||||
|
using UnityEditor.Build.Reporting;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 打包前自动把最新编译出的热更 dll 刷进 StreamingAssets/HybridCLR/Hotfix。
|
||||||
|
///
|
||||||
|
/// 为什么需要它:
|
||||||
|
/// HybridCLR 的 CompileDll / GenerateAll 只把热更 dll 编译到
|
||||||
|
/// Library/HybridCLR/HotUpdateDlls/{平台},**不会**替你放进 StreamingAssets。
|
||||||
|
/// 而运行时 Launcher 是从 StreamingAssets/HybridCLR/Hotfix/*.dll.bytes 读 dll 的,
|
||||||
|
/// 所以少了这一步,打出来的包跑的还是上一次的旧热更代码
|
||||||
|
/// (现象:改了热更代码、也跑过 Generate/All,但打包出来行为没变)。
|
||||||
|
///
|
||||||
|
/// 用法:默认每次打包自动执行,无需手动操作。
|
||||||
|
/// 想临时关掉,把 AutoSyncOnBuild 改成 false 即可;
|
||||||
|
/// 也可以手动执行菜单 Tools/刷新热更Dll到StreamingAssets。
|
||||||
|
/// </summary>
|
||||||
|
public class HotDllStreamingAssetsSync : IPreprocessBuildWithReport
|
||||||
|
{
|
||||||
|
/// <summary>打包前是否自动同步热更 dll</summary>
|
||||||
|
private const bool AutoSyncOnBuild = true;
|
||||||
|
|
||||||
|
/// <summary>运行时读取热更 dll 的目录(相对项目根)</summary>
|
||||||
|
private const string StreamingHotfixDir = "Assets/StreamingAssets/HybridCLR/Hotfix";
|
||||||
|
|
||||||
|
public int callbackOrder => 0;
|
||||||
|
|
||||||
|
public void OnPreprocessBuild(BuildReport report)
|
||||||
|
{
|
||||||
|
if (!AutoSyncOnBuild) return;
|
||||||
|
Sync(report.summary.platform);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MenuItem("Tools/刷新热更Dll到StreamingAssets")]
|
||||||
|
public static void SyncActive()
|
||||||
|
{
|
||||||
|
Sync(EditorUserBuildSettings.activeBuildTarget);
|
||||||
|
EditorUtility.DisplayDialog("热更 dll",
|
||||||
|
"已把最新热更 dll 刷进 StreamingAssets/HybridCLR/Hotfix", "好");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>按目标平台重新编译热更 dll,再以 .dll.bytes 命名覆盖到 StreamingAssets。</summary>
|
||||||
|
private static void Sync(BuildTarget target)
|
||||||
|
{
|
||||||
|
// 用目标平台重新编译(输出到 Library/HybridCLR/HotUpdateDlls/{target})
|
||||||
|
CompileDllCommand.CompileDll(target);
|
||||||
|
|
||||||
|
string srcDir = SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target);
|
||||||
|
Directory.CreateDirectory(StreamingHotfixDir);
|
||||||
|
|
||||||
|
bool allOk = true;
|
||||||
|
// 列表直接取 HybridCLRSettings 的配置(形如 "Game.Hotfix.dll"),不再手写死
|
||||||
|
foreach (var dllFile in SettingsUtil.HotUpdateAssemblyFilesExcludePreserved)
|
||||||
|
{
|
||||||
|
string src = Path.Combine(srcDir, dllFile);
|
||||||
|
if (!File.Exists(src))
|
||||||
|
{
|
||||||
|
Debug.LogError($"[HotDll] 找不到热更 dll 编译产物: {src}");
|
||||||
|
allOk = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
string dst = Path.Combine(StreamingHotfixDir, dllFile + ".bytes");
|
||||||
|
File.Copy(src, dst, true);
|
||||||
|
Debug.Log($"[HotDll] 已同步热更 dll: {src} ==> {dst}");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!allOk)
|
||||||
|
throw new BuildFailedException("[HotDll] 热更 dll 同步失败,请先执行 HybridCLR > CompileDll 看报错");
|
||||||
|
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ca61c14f3ce82594eabf8b13d352c249
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -8,6 +8,7 @@ using System.Net;
|
|||||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
|
using UnityEngine.Video;
|
||||||
//ui面板枚举 这里要求分类 Main *00 *00-*99 整数为主界面尾数为子界面
|
//ui面板枚举 这里要求分类 Main *00 *00-*99 整数为主界面尾数为子界面
|
||||||
public enum UIPanel
|
public enum UIPanel
|
||||||
{
|
{
|
||||||
@@ -137,6 +138,12 @@ public class UIManager : MonoSingleton<UIManager>
|
|||||||
private readonly Dictionary<UIPanel, AsyncOperationHandle<GameObject>> handleCache = new Dictionary<UIPanel, AsyncOperationHandle<GameObject>>();
|
private readonly Dictionary<UIPanel, AsyncOperationHandle<GameObject>> handleCache = new Dictionary<UIPanel, AsyncOperationHandle<GameObject>>();
|
||||||
public GameObject loadPanel;
|
public GameObject loadPanel;
|
||||||
|
|
||||||
|
// ⭐ 常驻过场视频播放器:挂在场景常驻的 Manager 物体上(不属于任何 Addressables 面板),
|
||||||
|
// 随场景同步存在、启动即播、全程存活,投影到共享 RenderTexture(LoadBG)。
|
||||||
|
// 加载界面与登录界面都只显示这张 RT,所以用的是同一个播放器、同一进度,不会因
|
||||||
|
// 登录界面 AA 包还没加载出来而黑屏,也不会出现衔接时的进度偏差。
|
||||||
|
public VideoPlayer loadVideoPlayer;
|
||||||
|
|
||||||
// ==================== 加载中界面(obj_JiaZaiZhong) ====================
|
// ==================== 加载中界面(obj_JiaZaiZhong) ====================
|
||||||
// ⭐ 资源加载超过 jiaZaiZhongDelay(默认 0.1 秒)还没结束才显示"加载中"界面,避免快速加载闪一下。
|
// ⭐ 资源加载超过 jiaZaiZhongDelay(默认 0.1 秒)还没结束才显示"加载中"界面,避免快速加载闪一下。
|
||||||
// 支持多段加载并发(引用计数):所有 BeginLoading 都配对 EndLoading 后才隐藏。
|
// 支持多段加载并发(引用计数):所有 BeginLoading 都配对 EndLoading 后才隐藏。
|
||||||
@@ -199,15 +206,45 @@ public class UIManager : MonoSingleton<UIManager>
|
|||||||
_loadingShown = true;
|
_loadingShown = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ⭐ 常驻过场视频是否已由 PlayOnAwake 起播过:首次进入不重头播,之后每次显示登录界面都从头重播
|
||||||
|
private bool _loadVideoFirstShow = true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 登录界面显示时调用(UILoginPanel.Show):首次由 PlayOnAwake 起播,之后每次显示都从头重播。
|
||||||
|
/// ⭐ 不用 Play() 接着播:登出时视频已在主页被 Stop 过,且要从第一帧开始才和首次进入一致。
|
||||||
|
/// </summary>
|
||||||
|
public void PlayLoginVideo()
|
||||||
|
{
|
||||||
|
if (loadVideoPlayer == null) return;
|
||||||
|
if (_loadVideoFirstShow)
|
||||||
|
{
|
||||||
|
_loadVideoFirstShow = false;
|
||||||
|
if (!loadVideoPlayer.isPlaying) loadVideoPlayer.Play();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
loadVideoPlayer.Stop(); // Stop 会把播放位置归 0 并释放音频,再播即从第一帧开始
|
||||||
|
loadVideoPlayer.Play();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>彻底停止常驻过场视频(进入主页后调用,避免视频一直有声音 / 一直解码)</summary>
|
||||||
|
public void StopLoadVideo()
|
||||||
|
{
|
||||||
|
if (loadVideoPlayer == null) return;
|
||||||
|
loadVideoPlayer.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 显示过场/加载面板(视频版)。
|
/// 显示过场/加载面板(视频版)。
|
||||||
/// 过场视频不再由加载面板自己播放:LoginPanel 根节点的 VideoPlayer 会把视频投影到
|
/// 过场视频不再由加载面板自己播放:场景常驻的 loadVideoPlayer 会把视频投影到
|
||||||
/// 共享 RenderTexture(LoadBG),加载面板只是显示这张 RT,所以加载界面与登录界面
|
/// 共享 RenderTexture(LoadBG),加载面板只是显示这张 RT,所以加载界面与登录界面
|
||||||
/// 用的是同一个 VideoPlayer、同一进度,衔接时不会出现偏差。
|
/// 用的是同一个 VideoPlayer、同一进度,衔接时不会出现偏差。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ILoadingPanel ShowLoadPanel(Action action=null)
|
public ILoadingPanel ShowLoadPanel(Action action=null)
|
||||||
{
|
{
|
||||||
ShowAsync(UIPanel.LoginPanel);
|
ShowAsync(UIPanel.LoginPanel);
|
||||||
|
// 首次进入正常由常驻播放器的 PlayOnAwake 起播;这里只做兜底:没播就起播(不重头播)
|
||||||
|
if (loadVideoPlayer != null && !loadVideoPlayer.isPlaying)
|
||||||
|
loadVideoPlayer.Play();
|
||||||
|
|
||||||
GameObject load = Instantiate(loadPanel, uiRoot);
|
GameObject load = Instantiate(loadPanel, uiRoot);
|
||||||
var loadScript = load.GetComponent<ILoadingPanel>();
|
var loadScript = load.GetComponent<ILoadingPanel>();
|
||||||
@@ -228,6 +265,9 @@ public class UIManager : MonoSingleton<UIManager>
|
|||||||
protected override void Awake()
|
protected override void Awake()
|
||||||
{
|
{
|
||||||
base.Awake();
|
base.Awake();
|
||||||
|
// ⭐ 兜底:若面板上没手动挂引用,就取常驻物体(Manager)上的常驻过场视频播放器
|
||||||
|
if (loadVideoPlayer == null)
|
||||||
|
loadVideoPlayer = GetComponent<VideoPlayer>();
|
||||||
foreach (var entry in config.panels)
|
foreach (var entry in config.panels)
|
||||||
{
|
{
|
||||||
if (!addressMap.ContainsKey(entry.type))
|
if (!addressMap.ContainsKey(entry.type))
|
||||||
@@ -696,6 +736,9 @@ public class UIManager : MonoSingleton<UIManager>
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void ReleaseLoginUI()
|
public void ReleaseLoginUI()
|
||||||
{
|
{
|
||||||
|
// ⭐ 过场视频是常驻播放器,登录界面销毁后要主动停掉,避免大厅/游戏里一直解码视频
|
||||||
|
StopLoadVideo();
|
||||||
|
|
||||||
var toRelease = new List<UIPanel>();
|
var toRelease = new List<UIPanel>();
|
||||||
foreach (var kv in panels)
|
foreach (var kv in panels)
|
||||||
if (IsLoginPanel(kv.Key)) toRelease.Add(kv.Key);
|
if (IsLoginPanel(kv.Key)) toRelease.Add(kv.Key);
|
||||||
@@ -921,6 +964,7 @@ public class UIManager : MonoSingleton<UIManager>
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void ReleaseAll()
|
public void ReleaseAll()
|
||||||
{
|
{
|
||||||
|
StopLoadVideo();
|
||||||
CloseAll();
|
CloseAll();
|
||||||
|
|
||||||
foreach (var kv in handleCache)
|
foreach (var kv in handleCache)
|
||||||
|
|||||||
@@ -583,7 +583,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 22400762, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
|
- target: {fileID: 22400762, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
|
||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: -0.000019073486
|
value: -0.0000038146973
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 22426080, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
|
- target: {fileID: 22426080, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
|
||||||
propertyPath: m_AnchorMax.x
|
propertyPath: m_AnchorMax.x
|
||||||
@@ -3855,6 +3855,8 @@ GameObject:
|
|||||||
- component: {fileID: 2075409202}
|
- component: {fileID: 2075409202}
|
||||||
- component: {fileID: 2075409203}
|
- component: {fileID: 2075409203}
|
||||||
- component: {fileID: 2075409204}
|
- component: {fileID: 2075409204}
|
||||||
|
- component: {fileID: 2075409205}
|
||||||
|
- component: {fileID: 2075409206}
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: Manager
|
m_Name: Manager
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@@ -3880,6 +3882,7 @@ MonoBehaviour:
|
|||||||
type: 3}
|
type: 3}
|
||||||
loadPanel: {fileID: 2258378551980177528, guid: 953c7fd5628fa1d418bac4e4aa6c8ea4,
|
loadPanel: {fileID: 2258378551980177528, guid: 953c7fd5628fa1d418bac4e4aa6c8ea4,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
loadVideoPlayer: {fileID: 2075409205}
|
||||||
jiaZaiZhongDelay: 0.1
|
jiaZaiZhongDelay: 0.1
|
||||||
BoardPanelParefab: {fileID: 2654078965480511721, guid: aff715af8514eca42972496e4c2232c3,
|
BoardPanelParefab: {fileID: 2654078965480511721, guid: aff715af8514eca42972496e4c2232c3,
|
||||||
type: 3}
|
type: 3}
|
||||||
@@ -4350,6 +4353,139 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
audioMixer: {fileID: 24100000, guid: ca43f9a7549657a49a2978e97c7a621a, type: 2}
|
audioMixer: {fileID: 24100000, guid: ca43f9a7549657a49a2978e97c7a621a, type: 2}
|
||||||
|
--- !u!328 &2075409205
|
||||||
|
VideoPlayer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2075409194}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_VideoClip: {fileID: 32900000, guid: 029dc73b392ceec4fbde610235b81a08, type: 3}
|
||||||
|
m_TargetCameraAlpha: 1
|
||||||
|
m_TargetCamera3DLayout: 0
|
||||||
|
m_TargetCamera: {fileID: 0}
|
||||||
|
m_TargetTexture: {fileID: 8400000, guid: 19aab719d005628448bd0ac1931120bc, type: 2}
|
||||||
|
m_TimeReference: 0
|
||||||
|
m_TargetMaterialRenderer: {fileID: 0}
|
||||||
|
m_TargetMaterialProperty: <noninit>
|
||||||
|
m_RenderMode: 2
|
||||||
|
m_AspectRatio: 5
|
||||||
|
m_DataSource: 0
|
||||||
|
m_TimeUpdateMode: 2
|
||||||
|
m_PlaybackSpeed: 1
|
||||||
|
m_AudioOutputMode: 1
|
||||||
|
m_TargetAudioSources:
|
||||||
|
- {fileID: 2075409206}
|
||||||
|
m_DirectAudioVolumes:
|
||||||
|
- 1
|
||||||
|
m_Url:
|
||||||
|
m_EnabledAudioTracks: 01
|
||||||
|
m_DirectAudioMutes: 00
|
||||||
|
m_ControlledAudioTrackCount: 1
|
||||||
|
m_PlayOnAwake: 1
|
||||||
|
m_SkipOnDrop: 1
|
||||||
|
m_Looping: 1
|
||||||
|
m_WaitForFirstFrame: 1
|
||||||
|
m_FrameReadyEventEnabled: 0
|
||||||
|
m_VideoShaders: []
|
||||||
|
--- !u!82 &2075409206
|
||||||
|
AudioSource:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2075409194}
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 4
|
||||||
|
OutputAudioMixerGroup: {fileID: 458904080387459688, guid: ca43f9a7549657a49a2978e97c7a621a,
|
||||||
|
type: 2}
|
||||||
|
m_audioClip: {fileID: 0}
|
||||||
|
m_PlayOnAwake: 1
|
||||||
|
m_Volume: 1
|
||||||
|
m_Pitch: 1
|
||||||
|
Loop: 0
|
||||||
|
Mute: 0
|
||||||
|
Spatialize: 0
|
||||||
|
SpatializePostEffects: 0
|
||||||
|
Priority: 128
|
||||||
|
DopplerLevel: 1
|
||||||
|
MinDistance: 1
|
||||||
|
MaxDistance: 500
|
||||||
|
Pan2D: 0
|
||||||
|
rolloffMode: 0
|
||||||
|
BypassEffects: 0
|
||||||
|
BypassListenerEffects: 0
|
||||||
|
BypassReverbZones: 0
|
||||||
|
rolloffCustomCurve:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Curve:
|
||||||
|
- serializedVersion: 3
|
||||||
|
time: 0
|
||||||
|
value: 1
|
||||||
|
inSlope: 0
|
||||||
|
outSlope: 0
|
||||||
|
tangentMode: 0
|
||||||
|
weightedMode: 0
|
||||||
|
inWeight: 0.33333334
|
||||||
|
outWeight: 0.33333334
|
||||||
|
- serializedVersion: 3
|
||||||
|
time: 1
|
||||||
|
value: 0
|
||||||
|
inSlope: 0
|
||||||
|
outSlope: 0
|
||||||
|
tangentMode: 0
|
||||||
|
weightedMode: 0
|
||||||
|
inWeight: 0.33333334
|
||||||
|
outWeight: 0.33333334
|
||||||
|
m_PreInfinity: 2
|
||||||
|
m_PostInfinity: 2
|
||||||
|
m_RotationOrder: 4
|
||||||
|
panLevelCustomCurve:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Curve:
|
||||||
|
- serializedVersion: 3
|
||||||
|
time: 0
|
||||||
|
value: 0
|
||||||
|
inSlope: 0
|
||||||
|
outSlope: 0
|
||||||
|
tangentMode: 0
|
||||||
|
weightedMode: 0
|
||||||
|
inWeight: 0.33333334
|
||||||
|
outWeight: 0.33333334
|
||||||
|
m_PreInfinity: 2
|
||||||
|
m_PostInfinity: 2
|
||||||
|
m_RotationOrder: 4
|
||||||
|
spreadCustomCurve:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Curve:
|
||||||
|
- serializedVersion: 3
|
||||||
|
time: 0
|
||||||
|
value: 0
|
||||||
|
inSlope: 0
|
||||||
|
outSlope: 0
|
||||||
|
tangentMode: 0
|
||||||
|
weightedMode: 0
|
||||||
|
inWeight: 0.33333334
|
||||||
|
outWeight: 0.33333334
|
||||||
|
m_PreInfinity: 2
|
||||||
|
m_PostInfinity: 2
|
||||||
|
m_RotationOrder: 4
|
||||||
|
reverbZoneMixCustomCurve:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Curve:
|
||||||
|
- serializedVersion: 3
|
||||||
|
time: 0
|
||||||
|
value: 1
|
||||||
|
inSlope: 0
|
||||||
|
outSlope: 0
|
||||||
|
tangentMode: 0
|
||||||
|
weightedMode: 0
|
||||||
|
inWeight: 0.33333334
|
||||||
|
outWeight: 0.33333334
|
||||||
|
m_PreInfinity: 2
|
||||||
|
m_PostInfinity: 2
|
||||||
|
m_RotationOrder: 4
|
||||||
--- !u!1001 &3569938244496052059
|
--- !u!1001 &3569938244496052059
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@@ -658,7 +658,7 @@ public class GameManager : MonoSingleton<GameManager>
|
|||||||
UIManager.Instance.CloseAll();
|
UIManager.Instance.CloseAll();
|
||||||
// ⭐ 登出流程完成,立即恢复重连开关(不依赖 ShowAsync 回调,避免 UI 异常导致永不重置)
|
// ⭐ 登出流程完成,立即恢复重连开关(不依赖 ShowAsync 回调,避免 UI 异常导致永不重置)
|
||||||
WebSocketManager.Instance.isLoggingOut = false;
|
WebSocketManager.Instance.isLoggingOut = false;
|
||||||
// 切换到登录界面
|
// 切换到登录界面(⭐ 过场视频由 UILoginPanel.Show 里从头重播,避免面板出来前只有声音没画面)
|
||||||
UIManager.Instance.ShowAsync(UIPanel.LoginPanel, null, (panel) =>
|
UIManager.Instance.ShowAsync(UIPanel.LoginPanel, null, (panel) =>
|
||||||
{
|
{
|
||||||
onDone?.Invoke();
|
onDone?.Invoke();
|
||||||
|
|||||||
@@ -98,14 +98,20 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
|||||||
[Header("翅膀")]
|
[Header("翅膀")]
|
||||||
[Tooltip("翅膀实例化的父节点")]
|
[Tooltip("翅膀实例化的父节点")]
|
||||||
public Transform wingParent;
|
public Transform wingParent;
|
||||||
|
[Tooltip("翅膀渲染相机:有翅膀显示时开启,卸下/无翅膀时关闭")]
|
||||||
|
public Camera cam_Wing;
|
||||||
[Header("战神")]
|
[Header("战神")]
|
||||||
[Tooltip("战神实例化的父节点")]
|
[Tooltip("战神实例化的父节点")]
|
||||||
public Transform zhanShenParent;
|
public Transform zhanShenParent;
|
||||||
|
[Tooltip("战神渲染相机:战神显示时开启,清除/无战神时关闭")]
|
||||||
|
public Camera cam_ZS;
|
||||||
[Tooltip("当前装备的战神编号(0=无战神)。炮台/战神显示二选一:有战神时 turretParent 隐藏")]
|
[Tooltip("当前装备的战神编号(0=无战神)。炮台/战神显示二选一:有战神时 turretParent 隐藏")]
|
||||||
public int currentZhanShenNumber;
|
public int currentZhanShenNumber;
|
||||||
[Header("特殊鱼炮台")]
|
[Header("特殊鱼炮台")]
|
||||||
[Tooltip("特殊鱼炮台实例化的父节点")]
|
[Tooltip("特殊鱼炮台实例化的父节点")]
|
||||||
public Transform tSYPTParent;
|
public Transform tSYPTParent;
|
||||||
|
[Tooltip("特殊鱼炮台渲染相机:钻头/激光炮台使用中开启,结束后关闭")]
|
||||||
|
public Camera cam_TSYPT;
|
||||||
[Tooltip("特殊鱼炮台(钻头)是否正在使用:true=期间禁用普通开火,点击只发射钻头")]
|
[Tooltip("特殊鱼炮台(钻头)是否正在使用:true=期间禁用普通开火,点击只发射钻头")]
|
||||||
public bool isDrillActive;
|
public bool isDrillActive;
|
||||||
[Tooltip("激光锁定:true=激光发射期间炮台锁定方向,SetRotation 不生效(原方向打到爆奖结束)")]
|
[Tooltip("激光锁定:true=激光发射期间炮台锁定方向,SetRotation 不生效(原方向打到爆奖结束)")]
|
||||||
@@ -293,6 +299,12 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
|||||||
diamondNum_UGUI.gameObject.SetActive(false);
|
diamondNum_UGUI.gameObject.SetActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ⭐ 三路渲染相机初始关闭:翅膀/战神/特殊鱼炮台各自"用时开、不用时关",
|
||||||
|
// 避免空相机每帧渲染(RawImage 上是底色)白耗性能。
|
||||||
|
SetCameraActive(cam_Wing, false);
|
||||||
|
SetCameraActive(cam_ZS, false);
|
||||||
|
SetCameraActive(cam_TSYPT, false);
|
||||||
|
|
||||||
// XJMH 模式:炮台是座位自带子对象,不需要从资源加载,只做初始化
|
// XJMH 模式:炮台是座位自带子对象,不需要从资源加载,只做初始化
|
||||||
// (整理炮台列表 + 激活默认炮台 = 列表索引 0)
|
// (整理炮台列表 + 激活默认炮台 = 列表索引 0)
|
||||||
if (turretControlMode == TurretControlMode.XJMH)
|
if (turretControlMode == TurretControlMode.XJMH)
|
||||||
@@ -500,6 +512,8 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
|||||||
}
|
}
|
||||||
// 座位禁用时清理战神激光(世界空间对象,不随座位隐藏)
|
// 座位禁用时清理战神激光(世界空间对象,不随座位隐藏)
|
||||||
DestroyZhanShenLaser();
|
DestroyZhanShenLaser();
|
||||||
|
// ⭐ 注意:相机是座位的子节点,座位整体隐藏时相机自然不渲染,这里无需额外关闭;
|
||||||
|
// 重新激活后由各自的加载/恢复流程按需打开。
|
||||||
// 散射起点父对象藏起来(子对象保留,下次出场/换战神时重建)
|
// 散射起点父对象藏起来(子对象保留,下次出场/换战神时重建)
|
||||||
if (JGFXLeftParent != null)
|
if (JGFXLeftParent != null)
|
||||||
JGFXLeftParent.gameObject.SetActive(false);
|
JGFXLeftParent.gameObject.SetActive(false);
|
||||||
@@ -1809,14 +1823,42 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
|||||||
instance.SetActive(!isDrillActive);
|
instance.SetActive(!isDrillActive);
|
||||||
if (isDrillActive) _pendingShowWing = instance;
|
if (isDrillActive) _pendingShowWing = instance;
|
||||||
|
|
||||||
|
// ⭐ 有翅膀显示 → 打开翅膀渲染相机(特殊炮台占用中暂不显示,等恢复时再开)
|
||||||
|
SetCameraActive(cam_Wing, !isDrillActive);
|
||||||
|
|
||||||
Debug.Log($"[SitPosData] 翅膀已加载: #{turretNumber}{(isDrillActive ? "(特殊炮台使用中,暂缓显示)" : "")}");
|
Debug.Log($"[SitPosData] 翅膀已加载: #{turretNumber}{(isDrillActive ? "(特殊炮台使用中,暂缓显示)" : "")}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ==================== 渲染相机开关(翅膀/战神/特殊鱼炮台) ====================
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 开/关指定渲染相机(null 安全)。
|
||||||
|
/// 只切 Camera.enabled,不动 GameObject 激活状态——相机节点上可能还挂着父节点/其他组件,
|
||||||
|
/// 直接 SetActive(false) 会连带关掉整个子树。
|
||||||
|
/// </summary>
|
||||||
|
public static void SetCameraActive(Camera cam, bool on)
|
||||||
|
{
|
||||||
|
if (cam != null && cam.enabled != on)
|
||||||
|
cam.enabled = on;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>特殊鱼炮台(钻头/激光)渲染相机开关:生成炮台时开、销毁后关</summary>
|
||||||
|
public void SetTSYPTCameraActive(bool on) => SetCameraActive(cam_TSYPT, on);
|
||||||
|
|
||||||
|
/// <summary>战神渲染相机开关:战神显示时开、隐藏/清除时关</summary>
|
||||||
|
public void SetZSCameraActive(bool on) => SetCameraActive(cam_ZS, on);
|
||||||
|
|
||||||
|
/// <summary>翅膀渲染相机开关:翅膀显示时开、卸下/隐藏时关</summary>
|
||||||
|
public void SetWingCameraActive(bool on) => SetCameraActive(cam_Wing, on);
|
||||||
|
|
||||||
/// <summary>卸下翅膀:清空 wingParent 下的翅膀模型(保留预设的 Camera,它是用来渲染翅膀到 RawImage 的)。</summary>
|
/// <summary>卸下翅膀:清空 wingParent 下的翅膀模型(保留预设的 Camera,它是用来渲染翅膀到 RawImage 的)。</summary>
|
||||||
public void ClearWing()
|
public void ClearWing()
|
||||||
{
|
{
|
||||||
if (turretControlMode == TurretControlMode.XJMH) return;
|
if (turretControlMode == TurretControlMode.XJMH) return;
|
||||||
|
|
||||||
|
// 没有翅膀模型了 → 关掉翅膀渲染相机
|
||||||
|
SetCameraActive(cam_Wing, false);
|
||||||
|
|
||||||
for (int i = wingParent.childCount - 1; i >= 0; i--)
|
for (int i = wingParent.childCount - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
var child = wingParent.GetChild(i);
|
var child = wingParent.GetChild(i);
|
||||||
@@ -1893,6 +1935,8 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
|||||||
GameObject instance = Instantiate(prefab, zhanShenParent, false);
|
GameObject instance = Instantiate(prefab, zhanShenParent, false);
|
||||||
// ⭐ 特殊鱼炮台(钻头/激光)使用中:只切换不显示,等爆奖流程结束由 RestoreTurretVisual 恢复显示
|
// ⭐ 特殊鱼炮台(钻头/激光)使用中:只切换不显示,等爆奖流程结束由 RestoreTurretVisual 恢复显示
|
||||||
instance.SetActive(!isDrillActive);
|
instance.SetActive(!isDrillActive);
|
||||||
|
// ⭐ 战神显示 → 打开战神渲染相机(特殊炮台占用中暂不显示,恢复时再开)
|
||||||
|
SetCameraActive(cam_ZS, !isDrillActive);
|
||||||
|
|
||||||
// 绑定状态机入口:战神接管开火/待机动画(PlayFire 约定,见 TurretData.PlayWarGodAnimator)
|
// 绑定状态机入口:战神接管开火/待机动画(PlayFire 约定,见 TurretData.PlayWarGodAnimator)
|
||||||
// 同时缓存 TurretData:开火时优先用战神的子弹预制体(bulletPrefab/bulletPrefab_Two)
|
// 同时缓存 TurretData:开火时优先用战神的子弹预制体(bulletPrefab/bulletPrefab_Two)
|
||||||
@@ -1969,6 +2013,8 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
|||||||
}
|
}
|
||||||
currentZhanShen = null;
|
currentZhanShen = null;
|
||||||
currentZhanShenData = null;
|
currentZhanShenData = null;
|
||||||
|
// 没有战神了 → 关掉战神渲染相机
|
||||||
|
SetCameraActive(cam_ZS, false);
|
||||||
// 战神清了激光也没了
|
// 战神清了激光也没了
|
||||||
DestroyZhanShenLaser();
|
DestroyZhanShenLaser();
|
||||||
// 散射起点球也清掉(下次出场/换战神时重建)
|
// 散射起点球也清掉(下次出场/换战神时重建)
|
||||||
@@ -1991,6 +2037,8 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
|||||||
{
|
{
|
||||||
_pendingShowWing.SetActive(true);
|
_pendingShowWing.SetActive(true);
|
||||||
_pendingShowWing = null;
|
_pendingShowWing = null;
|
||||||
|
// 翅膀重新显示 → 恢复翅膀渲染相机
|
||||||
|
SetCameraActive(cam_Wing, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentZhanShen != null)
|
if (currentZhanShen != null)
|
||||||
@@ -1999,10 +2047,14 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
|||||||
if (turretParent != null)
|
if (turretParent != null)
|
||||||
turretParent.gameObject.SetActive(false);
|
turretParent.gameObject.SetActive(false);
|
||||||
currentZhanShen.SetActive(true);
|
currentZhanShen.SetActive(true);
|
||||||
|
// 战神重新显示 → 恢复战神渲染相机
|
||||||
|
SetCameraActive(cam_ZS, true);
|
||||||
}
|
}
|
||||||
else if (turretParent != null)
|
else if (turretParent != null)
|
||||||
{
|
{
|
||||||
turretParent.gameObject.SetActive(true);
|
turretParent.gameObject.SetActive(true);
|
||||||
|
// 无战神 → 战神相机保持关闭
|
||||||
|
SetCameraActive(cam_ZS, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 动画归位:先 None 再 Idle,强制重进 Idle(避免 Attack 定格)
|
// 动画归位:先 None 再 Idle,强制重进 Idle(避免 Attack 定格)
|
||||||
|
|||||||
@@ -62,6 +62,8 @@ public class TSYPaoTaiController : MonoBehaviour
|
|||||||
{
|
{
|
||||||
_paoTai = Instantiate(paoTaiPrefab, _sit.tSYPTParent, false);
|
_paoTai = Instantiate(paoTaiPrefab, _sit.tSYPTParent, false);
|
||||||
_paoTai.transform.localPosition = Vector3.zero; // 其余值不改(相机渲染)
|
_paoTai.transform.localPosition = Vector3.zero; // 其余值不改(相机渲染)
|
||||||
|
// ⭐ 特殊鱼炮台生成 → 打开它的渲染相机(销毁后关闭)
|
||||||
|
_sit.SetTSYPTCameraActive(true);
|
||||||
}
|
}
|
||||||
_sit.isDrillActive = true;
|
_sit.isDrillActive = true;
|
||||||
|
|
||||||
@@ -84,6 +86,8 @@ public class TSYPaoTaiController : MonoBehaviour
|
|||||||
// ===== 4. 立刻恢复普通炮台:爆奖与炮台无关 =====
|
// ===== 4. 立刻恢复普通炮台:爆奖与炮台无关 =====
|
||||||
_sit.isDrillActive = false;
|
_sit.isDrillActive = false;
|
||||||
if (_paoTai != null) Destroy(_paoTai);
|
if (_paoTai != null) Destroy(_paoTai);
|
||||||
|
// ⭐ 特殊鱼炮台已销毁 → 关闭它的渲染相机
|
||||||
|
_sit.SetTSYPTCameraActive(false);
|
||||||
if (_normalTurret != null) _normalTurret.SetActive(true);
|
if (_normalTurret != null) _normalTurret.SetActive(true);
|
||||||
// ⭐ 爆奖隐藏炮台丢了动画状态,强制 None→Idle 归位(仿 FlyTurretData.RestoreIdleAnim),
|
// ⭐ 爆奖隐藏炮台丢了动画状态,强制 None→Idle 归位(仿 FlyTurretData.RestoreIdleAnim),
|
||||||
// 否则自动开炮 ChangeState(Attack) 被同状态短路 → 动画定格
|
// 否则自动开炮 ChangeState(Attack) 被同状态短路 → 动画定格
|
||||||
@@ -118,6 +122,8 @@ public class TSYPaoTaiController : MonoBehaviour
|
|||||||
|
|
||||||
if (_sit != null) _sit.isDrillActive = false;
|
if (_sit != null) _sit.isDrillActive = false;
|
||||||
if (_paoTai != null) Destroy(_paoTai);
|
if (_paoTai != null) Destroy(_paoTai);
|
||||||
|
// ⭐ 特殊鱼炮台已销毁 → 关闭它的渲染相机
|
||||||
|
if (_sit != null) _sit.SetTSYPTCameraActive(false);
|
||||||
if (_normalTurret != null) _normalTurret.SetActive(true);
|
if (_normalTurret != null) _normalTurret.SetActive(true);
|
||||||
// ⭐ 兜底停止同样强制归位(OnStateChange 为空事件时 ?.Invoke 天然安全)
|
// ⭐ 兜底停止同样强制归位(OnStateChange 为空事件时 ?.Invoke 天然安全)
|
||||||
if (_sit != null)
|
if (_sit != null)
|
||||||
|
|||||||
@@ -203,11 +203,15 @@ public class ZuanTouXie_DieEvent : DieEffect_TSY
|
|||||||
_sit.currentZhanShen.SetActive(false);
|
_sit.currentZhanShen.SetActive(false);
|
||||||
if (_sit.turretParent != null)
|
if (_sit.turretParent != null)
|
||||||
_sit.turretParent.gameObject.SetActive(false);
|
_sit.turretParent.gameObject.SetActive(false);
|
||||||
|
// ⭐ 战神被特殊炮台覆盖隐藏 → 关掉战神渲染相机(RestoreTurretVisual 恢复显示时重新打开)
|
||||||
|
_sit.SetZSCameraActive(false);
|
||||||
|
|
||||||
if (paoTaiPrefab != null && _sit.tSYPTParent != null)
|
if (paoTaiPrefab != null && _sit.tSYPTParent != null)
|
||||||
{
|
{
|
||||||
_paoTai = Instantiate(paoTaiPrefab, _sit.tSYPTParent, false);
|
_paoTai = Instantiate(paoTaiPrefab, _sit.tSYPTParent, false);
|
||||||
_paoTai.transform.localPosition = Vector3.zero; // 其余值不改(相机渲染)
|
_paoTai.transform.localPosition = Vector3.zero; // 其余值不改(相机渲染)
|
||||||
|
// ⭐ 特殊鱼炮台生成 → 打开它的渲染相机(销毁后关闭)
|
||||||
|
_sit.SetTSYPTCameraActive(true);
|
||||||
}
|
}
|
||||||
_sit.isDrillActive = true;
|
_sit.isDrillActive = true;
|
||||||
|
|
||||||
@@ -301,6 +305,8 @@ public class ZuanTouXie_DieEvent : DieEffect_TSY
|
|||||||
{
|
{
|
||||||
if (_sit != null) _sit.isDrillActive = false;
|
if (_sit != null) _sit.isDrillActive = false;
|
||||||
if (_paoTai != null) Destroy(_paoTai);
|
if (_paoTai != null) Destroy(_paoTai);
|
||||||
|
// ⭐ 特殊鱼炮台已销毁 → 关闭它的渲染相机
|
||||||
|
_sit?.SetTSYPTCameraActive(false);
|
||||||
_sit?.RestoreTurretVisual();
|
_sit?.RestoreTurretVisual();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -453,6 +459,8 @@ public class ZuanTouXie_DieEvent : DieEffect_TSY
|
|||||||
if (_sit != null)
|
if (_sit != null)
|
||||||
{
|
{
|
||||||
_sit.isDrillActive = false;
|
_sit.isDrillActive = false;
|
||||||
|
// ⭐ 特殊鱼炮台已销毁 → 关闭它的渲染相机(显示由 RestoreTurretVisual 按当前装备恢复)
|
||||||
|
_sit.SetTSYPTCameraActive(false);
|
||||||
_sit.RestoreTurretVisual();
|
_sit.RestoreTurretVisual();
|
||||||
}
|
}
|
||||||
if (_paoTai != null) Destroy(_paoTai);
|
if (_paoTai != null) Destroy(_paoTai);
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ public class LoadingPanel : MonoBehaviour, ILoadingPanel
|
|||||||
public Action actionEnd;
|
public Action actionEnd;
|
||||||
public float fadeTime = 1.3f;
|
public float fadeTime = 1.3f;
|
||||||
|
|
||||||
/// <summary>过场视频显示的 RawImage(LoadPanel 预制体子节点 0),显示 LoginPanel VideoPlayer 投影的共享 RenderTexture</summary>
|
/// <summary>过场视频显示的 RawImage(LoadPanel 预制体子节点 0),显示常驻 VideoPlayer 投影的共享 RenderTexture</summary>
|
||||||
private RawImage videoImage;
|
private RawImage videoImage;
|
||||||
|
|
||||||
/// <summary>LoginPanel 根节点上播放过场视频的 VideoPlayer(加载面板只是显示它的输出,不自己播放)</summary>
|
/// <summary>常驻过场视频播放器(UIManager.loadVideoPlayer,挂在场景常驻 Manager 物体上;加载面板只是显示它的输出,不自己播放)</summary>
|
||||||
private VideoPlayer loginVideo;
|
private VideoPlayer loadVideo;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
@@ -41,15 +41,15 @@ public class LoadingPanel : MonoBehaviour, ILoadingPanel
|
|||||||
// 登录成功 UILoginPanel.Succeed() 的 ShowAsync(HomeMainPanel) 命中缓存秒开,
|
// 登录成功 UILoginPanel.Succeed() 的 ShowAsync(HomeMainPanel) 命中缓存秒开,
|
||||||
// 不再出现"登录成功后进大厅白等"。
|
// 不再出现"登录成功后进大厅白等"。
|
||||||
StartCoroutine(PreloadHomeMainRoutine());
|
StartCoroutine(PreloadHomeMainRoutine());
|
||||||
StartCoroutine(BindLoginVideoRoutine());
|
StartCoroutine(BindLoadVideoRoutine());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>播放过程中预载大厅主面板(避免大包解压和视频启动抢主线程)</summary>
|
/// <summary>播放过程中预载大厅主面板(避免大包解压和视频启动抢主线程)</summary>
|
||||||
private IEnumerator PreloadHomeMainRoutine()
|
private IEnumerator PreloadHomeMainRoutine()
|
||||||
{
|
{
|
||||||
// 1) 等共享过场视频(LoginPanel 根节点 VideoPlayer)真正起播(最多等 5 秒兜底,防止视频未播时死等)
|
// 1) 等常驻过场视频真正起播(最多等 5 秒兜底,防止视频未播时死等)
|
||||||
float waited = 0f;
|
float waited = 0f;
|
||||||
while ((loginVideo == null || !loginVideo.isPlaying) && waited < 5f)
|
while ((loadVideo == null || !loadVideo.isPlaying) && waited < 5f)
|
||||||
{
|
{
|
||||||
waited += Time.deltaTime;
|
waited += Time.deltaTime;
|
||||||
yield return null;
|
yield return null;
|
||||||
@@ -63,35 +63,33 @@ public class LoadingPanel : MonoBehaviour, ILoadingPanel
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 过场视频由 LoginPanel 根节点的 VideoPlayer 播放并投影到共享 RenderTexture,
|
/// 常驻过场视频由 UIManager.loadVideoPlayer 播放并投影到共享 RenderTexture,
|
||||||
/// 这里等它就绪后监听 loopPointReached:视频第一遍循环播放完毕时隐藏跳过按钮。
|
/// 这里等它就绪后监听 loopPointReached:视频第一遍循环播放完毕时隐藏跳过按钮。
|
||||||
/// (面板销毁时协程终止;OnDestroy 里也会解除监听)
|
/// (面板销毁时协程终止;OnDestroy 里也会解除监听)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private IEnumerator BindLoginVideoRoutine()
|
private IEnumerator BindLoadVideoRoutine()
|
||||||
{
|
{
|
||||||
while (loginVideo == null)
|
while (loadVideo == null)
|
||||||
{
|
{
|
||||||
yield return null;
|
yield return null;
|
||||||
if (UIManager.Instance == null) continue;
|
if (UIManager.Instance == null) continue;
|
||||||
var login = UIManager.Instance.Get<UIBase>(UIPanel.LoginPanel);
|
loadVideo = UIManager.Instance.loadVideoPlayer;
|
||||||
if (login == null) continue;
|
|
||||||
loginVideo = login.GetComponent<VideoPlayer>();
|
|
||||||
}
|
}
|
||||||
loginVideo.loopPointReached += OnFirstLoopPointReached;
|
loadVideo.loopPointReached += OnFirstLoopPointReached;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>视频第一遍播完:隐藏跳过按钮并解除监听</summary>
|
/// <summary>视频第一遍播完:隐藏跳过按钮并解除监听</summary>
|
||||||
private void OnFirstLoopPointReached(VideoPlayer vp)
|
private void OnFirstLoopPointReached(VideoPlayer vp)
|
||||||
{
|
{
|
||||||
vp.loopPointReached -= OnFirstLoopPointReached;
|
vp.loopPointReached -= OnFirstLoopPointReached;
|
||||||
loginVideo = null;
|
loadVideo = null;
|
||||||
HideSkipButton();
|
HideSkipButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
{
|
{
|
||||||
if (loginVideo != null)
|
if (loadVideo != null)
|
||||||
loginVideo.loopPointReached -= OnFirstLoopPointReached;
|
loadVideo.loopPointReached -= OnFirstLoopPointReached;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HideSkipButton()
|
private void HideSkipButton()
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB |
@@ -1,153 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: c0cdb1c166eeea94b8dd67c4d64929e9
|
|
||||||
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: 1
|
|
||||||
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: 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
|
|
||||||
- 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: 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
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
physicsShape: []
|
|
||||||
bones: []
|
|
||||||
spriteID: 5e97eb03825dee720800000000000000
|
|
||||||
internalID: 0
|
|
||||||
vertices: []
|
|
||||||
indices:
|
|
||||||
edges: []
|
|
||||||
weights: []
|
|
||||||
secondaryTextures: []
|
|
||||||
nameFileIdTable: {}
|
|
||||||
mipmapLimitGroupName:
|
|
||||||
pSDRemoveMatte: 0
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 38 KiB |
@@ -94,7 +94,7 @@ TextureImporter:
|
|||||||
androidETC2FallbackOverride: 0
|
androidETC2FallbackOverride: 0
|
||||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
- serializedVersion: 3
|
- serializedVersion: 3
|
||||||
buildTarget: Android
|
buildTarget: iPhone
|
||||||
maxTextureSize: 2048
|
maxTextureSize: 2048
|
||||||
resizeAlgorithm: 0
|
resizeAlgorithm: 0
|
||||||
textureFormat: -1
|
textureFormat: -1
|
||||||
@@ -120,7 +120,7 @@ TextureImporter:
|
|||||||
androidETC2FallbackOverride: 0
|
androidETC2FallbackOverride: 0
|
||||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
- serializedVersion: 3
|
- serializedVersion: 3
|
||||||
buildTarget: iPhone
|
buildTarget: Android
|
||||||
maxTextureSize: 2048
|
maxTextureSize: 2048
|
||||||
resizeAlgorithm: 0
|
resizeAlgorithm: 0
|
||||||
textureFormat: -1
|
textureFormat: -1
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 151 KiB |
@@ -94,7 +94,7 @@ TextureImporter:
|
|||||||
androidETC2FallbackOverride: 0
|
androidETC2FallbackOverride: 0
|
||||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
- serializedVersion: 3
|
- serializedVersion: 3
|
||||||
buildTarget: Android
|
buildTarget: iPhone
|
||||||
maxTextureSize: 2048
|
maxTextureSize: 2048
|
||||||
resizeAlgorithm: 0
|
resizeAlgorithm: 0
|
||||||
textureFormat: -1
|
textureFormat: -1
|
||||||
@@ -120,7 +120,7 @@ TextureImporter:
|
|||||||
androidETC2FallbackOverride: 0
|
androidETC2FallbackOverride: 0
|
||||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
- serializedVersion: 3
|
- serializedVersion: 3
|
||||||
buildTarget: iPhone
|
buildTarget: Android
|
||||||
maxTextureSize: 2048
|
maxTextureSize: 2048
|
||||||
resizeAlgorithm: 0
|
resizeAlgorithm: 0
|
||||||
textureFormat: -1
|
textureFormat: -1
|
||||||
|
|||||||
@@ -6086,9 +6086,12 @@ MonoBehaviour:
|
|||||||
tMP_TurretConsumeNum: {fileID: 6996998917093333593}
|
tMP_TurretConsumeNum: {fileID: 6996998917093333593}
|
||||||
turretConsumeNum_UGUI: {fileID: 0}
|
turretConsumeNum_UGUI: {fileID: 0}
|
||||||
wingParent: {fileID: 5982321734877658021}
|
wingParent: {fileID: 5982321734877658021}
|
||||||
|
cam_Wing: {fileID: 3474185499508581916}
|
||||||
zhanShenParent: {fileID: 3297566421429981692}
|
zhanShenParent: {fileID: 3297566421429981692}
|
||||||
|
cam_ZS: {fileID: 6602789974901403781}
|
||||||
currentZhanShenNumber: 0
|
currentZhanShenNumber: 0
|
||||||
tSYPTParent: {fileID: 2724832172110457149}
|
tSYPTParent: {fileID: 2724832172110457149}
|
||||||
|
cam_TSYPT: {fileID: 5925412083069679843}
|
||||||
isDrillActive: 0
|
isDrillActive: 0
|
||||||
isLaserLocked: 0
|
isLaserLocked: 0
|
||||||
turretParent: {fileID: 5516422369603436267}
|
turretParent: {fileID: 5516422369603436267}
|
||||||
|
|||||||
+1154
-34870
File diff suppressed because it is too large
Load Diff
@@ -1109,7 +1109,6 @@ GameObject:
|
|||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 1757802389424026021}
|
- component: {fileID: 1757802389424026021}
|
||||||
- component: {fileID: 7618136032869811654}
|
- component: {fileID: 7618136032869811654}
|
||||||
- component: {fileID: 5723835308432911354}
|
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: LoginPanel
|
m_Name: LoginPanel
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@@ -1164,42 +1163,6 @@ MonoBehaviour:
|
|||||||
loginParent: {fileID: 823316465834655317}
|
loginParent: {fileID: 823316465834655317}
|
||||||
WXLogin: {fileID: 2180513923416259210}
|
WXLogin: {fileID: 2180513923416259210}
|
||||||
btn_ServicePanel: {fileID: 1679042159541900254}
|
btn_ServicePanel: {fileID: 1679042159541900254}
|
||||||
--- !u!328 &5723835308432911354
|
|
||||||
VideoPlayer:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 6216245946385704259}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_VideoClip: {fileID: 32900000, guid: 029dc73b392ceec4fbde610235b81a08, type: 3}
|
|
||||||
m_TargetCameraAlpha: 1
|
|
||||||
m_TargetCamera3DLayout: 0
|
|
||||||
m_TargetCamera: {fileID: 0}
|
|
||||||
m_TargetTexture: {fileID: 8400000, guid: 19aab719d005628448bd0ac1931120bc, type: 2}
|
|
||||||
m_TimeReference: 0
|
|
||||||
m_TargetMaterialRenderer: {fileID: 0}
|
|
||||||
m_TargetMaterialProperty: <noninit>
|
|
||||||
m_RenderMode: 2
|
|
||||||
m_AspectRatio: 5
|
|
||||||
m_DataSource: 0
|
|
||||||
m_TimeUpdateMode: 2
|
|
||||||
m_PlaybackSpeed: 1
|
|
||||||
m_AudioOutputMode: 2
|
|
||||||
m_TargetAudioSources:
|
|
||||||
- {fileID: 0}
|
|
||||||
m_DirectAudioVolumes:
|
|
||||||
- 1
|
|
||||||
m_Url:
|
|
||||||
m_EnabledAudioTracks: 01
|
|
||||||
m_DirectAudioMutes: 00
|
|
||||||
m_ControlledAudioTrackCount: 1
|
|
||||||
m_PlayOnAwake: 1
|
|
||||||
m_SkipOnDrop: 1
|
|
||||||
m_Looping: 1
|
|
||||||
m_WaitForFirstFrame: 1
|
|
||||||
m_FrameReadyEventEnabled: 0
|
|
||||||
m_VideoShaders: []
|
|
||||||
--- !u!1 &6256436603004493382
|
--- !u!1 &6256436603004493382
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@@ -82,7 +82,10 @@ phoneLogin1.SetActive(false);
|
|||||||
public override void Show(object args = null)
|
public override void Show(object args = null)
|
||||||
{
|
{
|
||||||
base.Show(args);
|
base.Show(args);
|
||||||
|
|
||||||
|
// ⭐ 常驻过场视频:首次由 PlayOnAwake 起播,之后每次显示登录界面都从头重播
|
||||||
|
// (进主页时已被 UIManager.ReleaseLoginUI 停掉,避免一直有声音)
|
||||||
|
UIManager.Instance.PlayLoginVideo();
|
||||||
|
|
||||||
if (loadingParent.activeSelf)
|
if (loadingParent.activeSelf)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -264,6 +264,10 @@ Shader "Fishing3D/Fish/Opaque Bump Gold" {
|
|||||||
#pragma fragment ShadowPassFragment
|
#pragma fragment ShadowPassFragment
|
||||||
|
|
||||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||||
|
// Shadows.hlsl 里用到了 LerpWhiteTo,它定义在 core 包的 CommonMaterial.hlsl 中。
|
||||||
|
// URP 自带的 Lit 是先 include 了 LitInput.hlsl(里面含 CommonMaterial.hlsl)才没问题,
|
||||||
|
// 这个自定义 shader 缺这一步,编译就会报 "undeclared identifier 'LerpWhiteTo'",这里补上。
|
||||||
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
|
||||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl"
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl"
|
||||||
|
|
||||||
struct Attributes
|
struct Attributes
|
||||||
|
|||||||
@@ -268,6 +268,10 @@ Shader "Fishing3D/Fish/Opaque Light Gold" {
|
|||||||
#pragma fragment ShadowPassFragment
|
#pragma fragment ShadowPassFragment
|
||||||
|
|
||||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||||
|
// Shadows.hlsl 里用到了 LerpWhiteTo,它定义在 core 包的 CommonMaterial.hlsl 中。
|
||||||
|
// URP 自带的 Lit 是先 include 了 LitInput.hlsl(里面含 CommonMaterial.hlsl)才没问题,
|
||||||
|
// 这个自定义 shader 缺这一步,编译就会报 "undeclared identifier 'LerpWhiteTo'",这里补上。
|
||||||
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
|
||||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl"
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl"
|
||||||
|
|
||||||
struct Attributes
|
struct Attributes
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user