Merge branch 'develop' into feature/UI更新&安卓适配

This commit is contained in:
2026-07-02 19:32:13 +08:00
52 changed files with 2139 additions and 1832 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -516,6 +516,6 @@ MonoBehaviour:
m_EditorClassIdentifier:
defaultValue: 0
sliderMaxValue: 6
lockThreshold: 0.06
lockThreshold: 0.08
openAsset: {fileID: 11400000, guid: f3a3a8f61c646e54ea285290f46c6812, type: 2}
closeAsset: {fileID: 11400000, guid: f5cbafa33288ca949bbde2b8955f4b7b, type: 2}
@@ -40,7 +40,7 @@ ScriptedImporter:
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spritePixelsToUnits: 21.5
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 0
generateCubemap: 6
@@ -100,7 +100,7 @@ ScriptedImporter:
addSortingGroup: 1
addShadowCasters: 0
importFileNodeState: 1
platformSettingsDirtyTick: 639183460123309200
platformSettingsDirtyTick: 639186120455284200
textureAssetName:
singleSpriteImportData:
- name:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: d0cb193eb02313e4f88919ab5da2a8b4
guid: 41fd6715be9f76943842a59dfdd7e136
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
Binary file not shown.
@@ -0,0 +1,127 @@
fileFormatVersion: 2
guid: 63d4527845e1e824b8114298e704f951
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
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: 1
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: Server
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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+23 -17
View File
@@ -133,27 +133,33 @@ Shader "AIBIS/EyeUnifiedSprite"
return saturate(mul(mat, color));
}
fixed4 sampleMainTex(float2 uv)
half4 sampleMainTex(float2 uv)
{
return tex2D(_MainTex, uv);
return tex2D(_MainTex, saturate(uv));
}
fixed4 gaussianBlurSample(float2 uv, float stepSize)
half3 GaussianBlurRgb(float2 uv, float stepSize)
{
float angle = 1.937315; // ~111 deg, matches MemoryTuningSprite
float2 stepDir = float2(sin(angle), cos(angle));
float2 stepUv = stepDir * stepSize;
fixed4 col = sampleMainTex(uv) * 0.18;
col += sampleMainTex(uv + stepUv * 1.0) * 0.15;
col += sampleMainTex(uv - stepUv * 1.0) * 0.15;
col += sampleMainTex(uv + stepUv * 2.0) * 0.12;
col += sampleMainTex(uv - stepUv * 2.0) * 0.12;
col += sampleMainTex(uv + stepUv * 3.0) * 0.09;
col += sampleMainTex(uv - stepUv * 3.0) * 0.09;
col += sampleMainTex(uv + stepUv * 4.0) * 0.05;
col += sampleMainTex(uv - stepUv * 4.0) * 0.05;
return col;
#if defined(SHADER_API_MOBILE)
half3 rgb = sampleMainTex(uv).rgb * 0.34;
rgb += sampleMainTex(uv + stepUv).rgb * 0.33;
rgb += sampleMainTex(uv - stepUv).rgb * 0.33;
#else
half3 rgb = sampleMainTex(uv).rgb * 0.18;
rgb += sampleMainTex(uv + stepUv * 1.0).rgb * 0.15;
rgb += sampleMainTex(uv - stepUv * 1.0).rgb * 0.15;
rgb += sampleMainTex(uv + stepUv * 2.0).rgb * 0.12;
rgb += sampleMainTex(uv - stepUv * 2.0).rgb * 0.12;
rgb += sampleMainTex(uv + stepUv * 3.0).rgb * 0.09;
rgb += sampleMainTex(uv - stepUv * 3.0).rgb * 0.09;
rgb += sampleMainTex(uv + stepUv * 4.0).rgb * 0.05;
rgb += sampleMainTex(uv - stepUv * 4.0).rgb * 0.05;
#endif
return rgb;
}
fixed4 sampleSprite(float2 uv, float2 screenUv)
@@ -171,14 +177,14 @@ Shader "AIBIS/EyeUnifiedSprite"
float noise = hash21(floor(uv * 42.0) + floor(_Time.y * 16.0));
distortedUv += (noise - 0.5) * _DistortAmount;
// Match legacy AllIn1 scale (~offset * fade * 0.005); avoid MemoryTuning's 0.014 base.
float2 texel = _MainTex_TexelSize.xy;
float2 texel = max(abs(_MainTex_TexelSize.xy), float2(1e-5, 1e-5));
float stepSize = length(texel) + _BlurSize;
fixed4 col = sampleMainTex(distortedUv);
fixed4 blurCol = gaussianBlurSample(distortedUv, stepSize);
fixed3 blurredRgb = GaussianBlurRgb(distortedUv, stepSize);
float blurStrength = pow(saturate(_BlurAmount), 0.75);
return lerp(col, blurCol, blurStrength);
col.rgb = lerp(col.rgb, blurredRgb, blurStrength);
return col;
}
fixed4 frag(v2f i) : SV_Target
+4 -1
View File
@@ -68,6 +68,7 @@ Shader "UI/EyeViewportOverlay"
fixed4 color : COLOR;
float2 uv : TEXCOORD0;
float4 worldPosition : TEXCOORD1;
float4 screenPosition : TEXCOORD2;
};
sampler2D _MainTex;
@@ -85,6 +86,7 @@ Shader "UI/EyeViewportOverlay"
o.worldPosition = v.vertex;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.screenPosition = ComputeScreenPos(o.vertex);
o.color = v.color * _Color;
return o;
}
@@ -118,7 +120,8 @@ Shader "UI/EyeViewportOverlay"
fixed4 frag(v2f i) : SV_Target
{
float alpha = ComputeViewportAlpha(i.uv);
float2 screenUv = i.screenPosition.xy / max(i.screenPosition.w, 0.0001);
float alpha = ComputeViewportAlpha(saturate(screenUv));
fixed4 col = fixed4(i.color.rgb, i.color.a * alpha);
col.a *= UnityGet2DClipping(i.worldPosition.xy, _ClipRect);
return col;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -3172,7 +3172,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
m_IsActive: 1
--- !u!224 &960307108
RectTransform:
m_ObjectHideFlags: 0
@@ -3188,9 +3188,9 @@ RectTransform:
- {fileID: 231219352}
m_Father: {fileID: 367483172}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 94, y: -25}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 64, y: 100}
m_Pivot: {x: 1, y: 1}
--- !u!222 &960307110
@@ -20,20 +20,19 @@ namespace AibisDream.FixSystem
private const float ProjectorMoveDuration = 2f;
private const float MaxClarityDistortion = 1f;
private const float MaxFrequencyBlur = 0.6f;
private const float MobileMaxFrequencyBlur = 0.45f;
private const float MinPixelDensity = 18f;
private const float MobileMinPixelDensity = 24f;
private const float MaxPixelDensity = 96f;
private const string DirectionalDistortionFadeProperty = "_DirectionalDistortionFade";
private static readonly int EnablePixelateId = Shader.PropertyToID("_EnablePixelate");
private static readonly int FrequencyTuningId = Shader.PropertyToID("_FrequencyTuning");
private static readonly int ClarityTuningId = Shader.PropertyToID("_ClarityTuning");
private static readonly int DirectionalDistortionFadeId = Shader.PropertyToID(DirectionalDistortionFadeProperty);
private static readonly int PixelateFadeId = Shader.PropertyToID("_PixelateFade");
private static readonly int PixelatePixelDensityId = Shader.PropertyToID("_PixelatePixelDensity");
private static readonly int EnableGaussianBlurId = Shader.PropertyToID("_EnableGaussianBlur");
private static readonly int GaussianBlurFadeId = Shader.PropertyToID("_GaussianBlurFade");
private static readonly int GaussianBlurOffsetId = Shader.PropertyToID("_GaussianBlurOffset");
private static readonly int EnableUvDistortId = Shader.PropertyToID("_EnableUVDistort");
private static readonly int UvDistortFadeId = Shader.PropertyToID("_UVDistortFade");
private static readonly int MemoryGrayscaleId = Shader.PropertyToID("_MemoryGrayscale");
private static readonly int MemoryContrastId = Shader.PropertyToID("_MemoryContrast");
@@ -76,8 +75,10 @@ namespace AibisDream.FixSystem
[SerializeField] private MemoryPunchTapeSlot punchTapeSlot;
[SerializeField] private Material fadeMaterial;
[SerializeField] private Shader memoryTuningShader;
private Material runtimeMemoryMaterial;
private Material runtimeNoColorMemoryMaterial;
private bool spriteShaderTuningAvailable;
private Tween overlayTween;
public void OpenMemoryView()
@@ -276,14 +277,14 @@ namespace AibisDream.FixSystem
{
frequencySlider.OnTuningChanged -= ApplyFrequencyTuning;
frequencySlider.Init(memoryFrequencyVolume);
frequencySlider.SetVolumeOutputEnabled(!useSpriteShaderTuning);
frequencySlider.SetVolumeOutputEnabled(!spriteShaderTuningAvailable);
frequencySlider.OnTuningChanged += ApplyFrequencyTuning;
}
if (claritySlider != null)
{
claritySlider.OnTuningChanged -= ApplyClarityTuning;
claritySlider.Init(memoryClarityVolume);
claritySlider.SetVolumeOutputEnabled(!useSpriteShaderTuning);
claritySlider.SetVolumeOutputEnabled(!spriteShaderTuningAvailable);
claritySlider.OnTuningChanged += ApplyClarityTuning;
}
@@ -463,33 +464,31 @@ namespace AibisDream.FixSystem
private void ApplyFrequencyTuning(float strength)
{
if (!useSpriteShaderTuning || fadeMaterial == null)
if (!spriteShaderTuningAvailable || fadeMaterial == null)
return;
bool active = strength > 0.001f;
float blurCap = Application.isMobilePlatform ? MobileMaxFrequencyBlur : MaxFrequencyBlur;
float minPixelDensity = Application.isMobilePlatform ? MobileMinPixelDensity : MinPixelDensity;
SetFloatIfExists(FrequencyTuningId, strength);
SetFloatIfExists(EnablePixelateId, active ? 1f : 0f);
SetFloatIfExists(PixelateFadeId, strength);
SetFloatIfExists(PixelatePixelDensityId, Mathf.Lerp(MaxPixelDensity, MinPixelDensity, strength));
SetFloatIfExists(EnableGaussianBlurId, active ? 1f : 0f);
SetFloatIfExists(GaussianBlurFadeId, strength * MaxFrequencyBlur);
SetFloatIfExists(PixelatePixelDensityId, Mathf.Lerp(MaxPixelDensity, minPixelDensity, strength));
SetFloatIfExists(GaussianBlurFadeId, strength * blurCap);
SetFloatIfExists(GaussianBlurOffsetId, Mathf.Lerp(0.05f, 0.35f, strength));
}
private void ApplyClarityTuning(float strength)
{
if (!useSpriteShaderTuning || fadeMaterial == null)
if (!spriteShaderTuningAvailable || fadeMaterial == null)
return;
bool active = strength > 0.001f;
SetFloatIfExists(ClarityTuningId, strength);
SetFloatIfExists(EnableUvDistortId, active ? 1f : 0f);
SetFloatIfExists(UvDistortFadeId, strength * MaxClarityDistortion);
}
private void ResetSpriteTuning()
{
if (!useSpriteShaderTuning || fadeMaterial == null)
if (!spriteShaderTuningAvailable || fadeMaterial == null)
return;
ApplyFrequencyTuning(0f);
@@ -528,6 +527,7 @@ namespace AibisDream.FixSystem
private void PrepareRuntimeMemoryMaterial()
{
spriteShaderTuningAvailable = false;
if (!useSpriteShaderTuning || !HasMemoryGraphic())
return;
@@ -535,12 +535,20 @@ namespace AibisDream.FixSystem
if (baseMaterial == null)
baseMaterial = fadeMaterial;
var shader = baseMaterial != null ? baseMaterial.shader : null;
var shader = memoryTuningShader;
if (shader == null && baseMaterial != null)
shader = baseMaterial.shader;
if (shader == null || shader.name != "AibisDream/MemoryTuningSprite")
shader = Shader.Find("AibisDream/MemoryTuningSprite");
if (shader == null)
{
Debug.LogWarning("[MemoryProcess] 未找到 AibisDream/MemoryTuningSprite,调频将回退到当前材质表现。", this);
Debug.LogWarning("[MemoryProcess] 未找到 AibisDream/MemoryTuningSprite,调频将回退到 Volume 后处理。", this);
return;
}
if (!shader.isSupported)
{
Debug.LogWarning("[MemoryProcess] MemoryTuningSprite 在当前平台不受支持,调频将回退到 Volume 后处理。", this);
return;
}
@@ -560,6 +568,7 @@ namespace AibisDream.FixSystem
SetNoColorMemoryMaterial(runtimeNoColorMemoryMaterial);
}
spriteShaderTuningAvailable = true;
ResetSpriteTuning();
}
@@ -12,7 +12,7 @@ namespace AibisDream.FixSystem
{
[SerializeField] private float defaultValue = 0f;
[SerializeField] private float sliderMaxValue = 6f;
[SerializeField] private float lockThreshold = 0.06f;
[SerializeField] private float lockThreshold = 0.08f;
[SerializeField] private TimelineAsset openAsset;
[SerializeField] private TimelineAsset closeAsset;
@@ -1,4 +1,5 @@
using AibisDream.Kit;
using System.Collections;
using AibisDream.Kit;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
@@ -161,5 +162,23 @@ namespace AibisDream.Framework
{
await LocalizationSettings.InitializationOperation.Task;
}
/// <summary>
/// 等待本地化系统初始化完成(含 SettingLoader 触发的语言切换)。
/// </summary>
public static IEnumerator WaitUntilReady()
{
yield return LocalizationSettings.InitializationOperation;
yield return null;
}
/// <summary>
/// 等待 LocalizeStringEvent 等 UI 组件刷新文案。
/// </summary>
public static IEnumerator WaitForUIRefresh()
{
yield return null;
Canvas.ForceUpdateCanvases();
}
}
}
+41 -5
View File
@@ -22,6 +22,8 @@ namespace AibisDream
#endregion
private const float MainMenuFadeDuration = 0.5f;
private BindProperty<TalkSceneSO> _currentTalkSceneSo;
public override void OnSingletonInit()
{
@@ -36,9 +38,28 @@ namespace AibisDream
// 场景So事件注册
_currentTalkSceneSo = new BindProperty<TalkSceneSO>();
ActionKit.Sequence()
.Callback(() => EnumEventSystem.Global.Send(GameLoopEnum.AppStart))
.Start(this);
StartCoroutine(AppBootstrapCoroutine());
}
/// <summary>
/// 启动主界面:先黑屏,待本地化与 UI 就绪后再淡出,避免玩家看到初始化过程。
/// </summary>
private IEnumerator AppBootstrapCoroutine()
{
var playTool = UIManager.Instance.GetPanel<PlayToolPanel>();
UIManager.Instance.ShowPanel<PlayToolPanel>();
playTool?.ApplyFadeScreenCovered(true);
yield return LocalizationKit.WaitUntilReady();
EnumEventSystem.Global.Send(GameLoopEnum.AppStart);
yield return LocalizationKit.WaitForUIRefresh();
if (playTool != null)
{
yield return playTool.FadeOutAsync(MainMenuFadeDuration);
}
}
private void LoadAllSceneSos()
@@ -202,7 +223,12 @@ namespace AibisDream
private IEnumerator RestartCoroutine()
{
UIManager.Instance.GetPanel<PlayToolPanel>().FadeInSync(0.1f);
var playTool = UIManager.Instance.GetPanel<PlayToolPanel>();
UIManager.Instance.ShowPanel<PlayToolPanel>();
if (playTool != null)
{
yield return playTool.FadeInAsync(MainMenuFadeDuration);
}
// 清理所有系统注册
if (FixSystemCenter.SystemDic != null)
@@ -210,10 +236,15 @@ namespace AibisDream
FixSystemCenter.SystemDic.Clear();
}
playTool?.ClearPresentationEffects();
// 执行场景卸载等功能
CameraKit.Instance.ResetCamera();
yield return SceneLoader.Instance.UnloadSceneAsync();
DialogController.Instance.StopDialog();
yield return LocalizationKit.WaitUntilReady();
EnumEventSystem.Global.Send(GameLoopEnum.GameQuit);
// 音频继续
AudioManager.Instance.UnPauseAll();
@@ -222,7 +253,12 @@ namespace AibisDream
// 关闭结束面板
UIManager.Instance.HidePanel<EndPanel>();
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync();
yield return LocalizationKit.WaitForUIRefresh();
if (playTool != null)
{
yield return playTool.FadeOutAsync(MainMenuFadeDuration);
}
}
#endregion
@@ -263,6 +263,12 @@ public class EyeTarget : MonoBehaviour
return;
}
if (!shader.isSupported)
{
Debug.LogError($"[EyeTarget] AIBIS/EyeUnifiedSprite 在当前平台不受支持:{name}", this);
return;
}
Material currentMaterial = Application.isPlaying
? spriteRenderer.material
: spriteRenderer.sharedMaterial;
@@ -23,9 +23,14 @@ namespace AibisDream
/// <summary>Persistence:本遮罩=0UI Canvas=1Dialog Canvas=3。</summary>
[SerializeField] private int sortingOrder;
[Tooltip("Assign in Inspector so the shader is included in builds. Falls back to Shader.Find at runtime.")]
[SerializeField] private Shader overlayShader;
private Canvas overlayCanvas;
private Image overlayImage;
private Material instanceMaterial;
private bool overlayShaderAvailable;
private bool overlayFallbackLogged;
private EyeVisualSettings activeSettings;
private Coroutine autoBlinkRoutine;
private Tween blinkTween;
@@ -251,6 +256,7 @@ namespace AibisDream
return Application.isPlaying
&& moduleActive
&& !editorPreviewActive
&& overlayShaderAvailable
&& settings != null
&& settings.enableViewportOverlay;
}
@@ -279,6 +285,12 @@ namespace AibisDream
}
PrepareHierarchyIfNeeded();
if (!overlayShaderAvailable || instanceMaterial == null)
{
DisableOverlayFallback();
return;
}
ApplyCanvasRenderSettings();
activeSettings = settings;
ApplySettings(settings);
@@ -409,6 +421,16 @@ namespace AibisDream
EnsureOverlayHierarchy();
hierarchyReady = overlayCanvas != null;
if (!overlayShaderAvailable || instanceMaterial == null)
{
if (moduleActive || editorPreviewActive)
{
DisableOverlayFallback();
}
yield break;
}
if (activeSettings != null && instanceMaterial != null)
{
PushViewportParams(activeSettings);
@@ -420,46 +442,134 @@ namespace AibisDream
private void EnsureOverlayHierarchy()
{
if (overlayCanvas == null)
{
overlayCanvas = FindExistingOverlayCanvas();
}
if (overlayCanvas == null)
{
var canvasGo = new GameObject("EyeViewportOverlayCanvas");
canvasGo.transform.SetParent(transform, false);
overlayCanvas = canvasGo.AddComponent<Canvas>();
overlayCanvas.pixelPerfect = false;
var scaler = canvasGo.AddComponent<CanvasScaler>();
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
scaler.referenceResolution = new Vector2(1920f, 1080f);
scaler.matchWidthOrHeight = 0.5f;
canvasGo.AddComponent<CanvasScaler>();
canvasGo.AddComponent<GraphicRaycaster>();
}
var imageGo = new GameObject("Overlay", typeof(RectTransform));
imageGo.transform.SetParent(canvasGo.transform, false);
NormalizeCanvasTransform(overlayCanvas.transform);
overlayCanvas.pixelPerfect = false;
var rect = (RectTransform)imageGo.transform;
rect.anchorMin = Vector2.zero;
rect.anchorMax = Vector2.one;
rect.offsetMin = Vector2.zero;
rect.offsetMax = Vector2.zero;
var scaler = overlayCanvas.GetComponent<CanvasScaler>();
if (scaler == null)
{
scaler = overlayCanvas.gameObject.AddComponent<CanvasScaler>();
}
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
scaler.referenceResolution = new Vector2(1920f, 1080f);
scaler.matchWidthOrHeight = 0.5f;
overlayImage = imageGo.AddComponent<Image>();
overlayImage.raycastTarget = false;
overlayImage.color = Color.black;
SetupMaterial();
if (overlayCanvas.GetComponent<GraphicRaycaster>() == null)
{
overlayCanvas.gameObject.AddComponent<GraphicRaycaster>();
}
EnsureOverlayImage();
if (overlayImage != null && instanceMaterial == null && !TrySetupOverlayMaterial())
{
SetOverlayActive(false);
}
ApplyCanvasRenderSettings();
}
private void SetupMaterial()
private Canvas FindExistingOverlayCanvas()
{
Shader shader = Shader.Find("UI/EyeViewportOverlay");
foreach (var canvas in GetComponentsInChildren<Canvas>(true))
{
if (canvas != null && canvas.gameObject.name == "EyeViewportOverlayCanvas")
{
return canvas;
}
}
return null;
}
private void EnsureOverlayImage()
{
if (overlayImage == null && overlayCanvas != null)
{
Transform existing = overlayCanvas.transform.Find("Overlay");
if (existing != null)
{
overlayImage = existing.GetComponent<Image>();
}
}
if (overlayImage == null)
{
var imageGo = new GameObject("Overlay", typeof(RectTransform));
imageGo.transform.SetParent(overlayCanvas.transform, false);
overlayImage = imageGo.AddComponent<Image>();
}
var rect = overlayImage.rectTransform;
rect.anchorMin = Vector2.zero;
rect.anchorMax = Vector2.one;
rect.offsetMin = Vector2.zero;
rect.offsetMax = Vector2.zero;
rect.localScale = Vector3.one;
overlayImage.raycastTarget = false;
overlayImage.color = Color.black;
}
private static void NormalizeCanvasTransform(Transform canvasTransform)
{
if (canvasTransform == null)
{
return;
}
canvasTransform.localPosition = Vector3.zero;
canvasTransform.localRotation = Quaternion.identity;
canvasTransform.localScale = Vector3.one;
}
private void DisableOverlayFallback()
{
StopEffects();
SetOverlayActive(false);
if (overlayFallbackLogged)
{
return;
}
overlayFallbackLogged = true;
Debug.LogWarning(
"[EyeViewportOverlay] 遮罩 shader 不可用,已跳过眼洞遮罩(视觉模块仍可正常使用,只是没有椭圆暗角/眨眼)。",
this);
}
private bool TrySetupOverlayMaterial()
{
overlayShaderAvailable = false;
Shader shader = overlayShader != null
? overlayShader
: Shader.Find("UI/EyeViewportOverlay");
if (shader == null)
{
Debug.LogError("[EyeViewportOverlay] 找不到 UI/EyeViewportOverlay shader。", this);
return;
return false;
}
if (!shader.isSupported)
{
Debug.LogError("[EyeViewportOverlay] UI/EyeViewportOverlay shader 在当前平台不受支持。", this);
return false;
}
instanceMaterial = new Material(shader)
@@ -468,6 +578,8 @@ namespace AibisDream
hideFlags = HideFlags.DontSave
};
overlayImage.material = instanceMaterial;
overlayShaderAvailable = true;
return true;
}
private void ApplyCanvasRenderSettings()
@@ -478,7 +590,8 @@ namespace AibisDream
}
overlayCanvas.renderMode = RenderMode.ScreenSpaceCamera;
overlayCanvas.worldCamera = ResolveUICamera();
Camera uiCamera = ResolveUICamera();
overlayCanvas.worldCamera = uiCamera;
overlayCanvas.planeDistance = OverlayPlaneDistance;
overlayCanvas.sortingLayerName = OverlaySortingLayer;
overlayCanvas.sortingOrder = sortingOrder;
+4 -6
View File
@@ -42,7 +42,6 @@ namespace AibisDream.UI
private void Awake()
{
InitRefs();
EnumEventSystem.Global.Register(GameLoopEnum.GameQuit, HideAll);
}
private void InitRefs()
@@ -240,14 +239,13 @@ namespace AibisDream.UI
_signBoard.CloseSignBoard();
}
private void HideAll()
/// <summary>
/// 清理演出层内容,但不影响黑屏遮罩(用于返回主界面时在遮罩下重置状态)。
/// </summary>
public void ClearPresentationEffects()
{
_timeFlowsVersion++;
_fadeImage.DOKill();
_fadeImage.color = Color.clear;
_fadeImage.gameObject.SetActive(false);
_fullScreenImage.FadeOut(0.1f);
_showObjImage.FadeOut(0.1f);
_showObjPanel.SetActive(false);
+48 -16
View File
@@ -21,6 +21,13 @@ Shader "AibisDream/MemoryTuningSprite"
_UVDistortFade ("UV Distort Fade", Range(0,1)) = 0
_MemoryGrayscale ("Memory Grayscale", Range(0,1)) = 0
_MemoryContrast ("Memory Contrast", Range(0,3)) = 1
[HideInInspector] _StencilComp ("Stencil Comparison", Float) = 8
[HideInInspector] _Stencil ("Stencil ID", Float) = 0
[HideInInspector] _StencilOp ("Stencil Operation", Float) = 0
[HideInInspector] _StencilWriteMask ("Stencil Write Mask", Float) = 255
[HideInInspector] _StencilReadMask ("Stencil Read Mask", Float) = 255
[HideInInspector] _ColorMask ("Color Mask", Float) = 15
}
SubShader
@@ -37,7 +44,18 @@ Shader "AibisDream/MemoryTuningSprite"
Cull Off
Lighting Off
ZWrite Off
ZTest [unity_GUIZTestMode]
Blend SrcAlpha OneMinusSrcAlpha
ColorMask [_ColorMask]
Stencil
{
Ref [_Stencil]
Comp [_StencilComp]
Pass [_StencilOp]
ReadMask [_StencilReadMask]
WriteMask [_StencilWriteMask]
}
Pass
{
@@ -114,7 +132,9 @@ Shader "AibisDream/MemoryTuningSprite"
{
half pixels = max(1.0, lerp(_PixelMax, _PixelMin, strength));
pixels = lerp(pixels, max(1.0, density), step(0.001, density));
float2 aspectPixels = float2(pixels, max(1.0, pixels * _MainTex_TexelSize.z / _MainTex_TexelSize.w));
float texW = max(1.0, _MainTex_TexelSize.z);
float texH = max(1.0, abs(_MainTex_TexelSize.w));
float2 aspectPixels = float2(pixels, max(1.0, pixels * texW / texH));
return round((uv - 0.5) * aspectPixels) / aspectPixels + 0.5;
}
@@ -130,7 +150,8 @@ Shader "AibisDream/MemoryTuningSprite"
return uv + side * wave * volFxStrength * edgeMask;
}
half4 BlurSample(float2 uv, half strength)
// 仅模糊 RGB;alpha 由调用方取自中心采样,避免图集透明边被混进导致整图变透明(移动端常见)。
half3 BlurRgb(float2 uv, half strength)
{
float angle = radians(111.0);
float radial = distance(uv, 0.5) * 0.0026;
@@ -138,21 +159,27 @@ Shader "AibisDream/MemoryTuningSprite"
float2 stepDir = normalize(float2(sin(angle), cos(angle)));
float2 stepUv = stepDir * stepSize;
half4 col = SampleSprite(uv) * 0.18;
col += SampleSprite(uv + stepUv * 1.0) * 0.15;
col += SampleSprite(uv - stepUv * 1.0) * 0.15;
col += SampleSprite(uv + stepUv * 2.0) * 0.12;
col += SampleSprite(uv - stepUv * 2.0) * 0.12;
col += SampleSprite(uv + stepUv * 3.0) * 0.09;
col += SampleSprite(uv - stepUv * 3.0) * 0.09;
col += SampleSprite(uv + stepUv * 4.0) * 0.05;
col += SampleSprite(uv - stepUv * 4.0) * 0.05;
return col;
#if defined(SHADER_API_MOBILE)
half3 rgb = SampleSprite(uv).rgb * 0.34;
rgb += SampleSprite(uv + stepUv).rgb * 0.33;
rgb += SampleSprite(uv - stepUv).rgb * 0.33;
#else
half3 rgb = SampleSprite(uv).rgb * 0.18;
rgb += SampleSprite(uv + stepUv).rgb * 0.15;
rgb += SampleSprite(uv - stepUv).rgb * 0.15;
rgb += SampleSprite(uv + stepUv * 2.0).rgb * 0.12;
rgb += SampleSprite(uv - stepUv * 2.0).rgb * 0.12;
rgb += SampleSprite(uv + stepUv * 3.0).rgb * 0.09;
rgb += SampleSprite(uv - stepUv * 3.0).rgb * 0.09;
rgb += SampleSprite(uv + stepUv * 4.0).rgb * 0.05;
rgb += SampleSprite(uv - stepUv * 4.0).rgb * 0.05;
#endif
return rgb;
}
half4 ChromaticSample(float2 uv, half4 source, half strength)
{
float aspect = max(0.001, _MainTex_TexelSize.z / _MainTex_TexelSize.w);
float aspect = max(0.001, abs(_MainTex_TexelSize.z) / max(1.0, abs(_MainTex_TexelSize.w)));
float angle = 0.496 * 6.2831853;
float2 dirA = float2(cos(angle) / aspect, sin(angle));
float2 dirB = -dirA;
@@ -164,7 +191,9 @@ Shader "AibisDream/MemoryTuningSprite"
half3 splitRgb = (colA.rgb + colB.rgb) * 0.5865;
half splitAlpha = max(max(colA.a, colB.a), source.a);
half4 splitCol = half4(splitRgb, splitAlpha);
return lerp(source, splitCol, 0.85 * response);
half4 result = lerp(source, splitCol, 0.85 * response);
result.a = source.a;
return result;
}
half4 frag(Varyings input) : SV_Target
@@ -187,9 +216,12 @@ Shader "AibisDream/MemoryTuningSprite"
float2 pixelUv = PixelSnap(uv, pixelate, _PixelatePixelDensity);
uv = lerp(uv, pixelUv, pixelate);
half4 col = lerp(SampleSprite(uv), BlurSample(uv, blur), blur);
half4 sharp = SampleSprite(uv);
half3 rgb = lerp(sharp.rgb, BlurRgb(uv, blur), blur);
half4 col = half4(rgb, sharp.a);
col = ChromaticSample(uv, col, clarity);
col *= input.color;
col.a *= input.color.a;
col.rgb *= input.color.rgb;
return col;
}
ENDHLSL
+7 -7
View File
@@ -44,11 +44,11 @@ me: 佩佩?<waitfor=0.1>还没走吗。 #line:04bdd27
peipei: 天冷了。<waitfor=0.2>很快就是冬天了。 #line:0310493
//它头也不回地说。 #line:005c752
<<change_actor_state_async "医生UpHeadIn" 诊室外医生>>
天气确实开始变冷了,<br>冬天应该是真的要来了。 #line:0aeb015
天气确实开始变冷了,<waitfor=0.2>冬天应该是真的要来了。 #line:0aeb015
<<hide_dialog>>
<<change_actor_state_async "SMOKE" 诊室外医生>>
<<wait 0.2>>
烟和呼出的气雾混合在一起,<br>飘散到空中。 #line:05e3283
烟和呼出的气雾混合在一起,<waitfor=0.2>飘散到空中。 #line:05e3283
<<wait 1>>
me: 嗯。<waitfor=0.2>天冷了。 #line:09c6402
@@ -60,7 +60,7 @@ me: 你不是要回去工作吗? #line:094a88f
<<hide_dialog>>
<<wait 0.5>>
佩佩依然没有回头,<br>还是痴痴地抬头看着。 #line:061416c
佩佩依然没有回头,<waitfor=0.2>还是痴痴地抬头看着。 #line:061416c
<<hide_dialog>>
<<wait 2>>
@@ -86,7 +86,7 @@ peipei: 你喜欢冬天吗? #line:0db3bf2
->没意义 #line:0d3afff
<<change_actor_state "医生Turn the head" 诊室外医生>>
<<wait 1>>
me: 我们是机体,<waitfor=0.1>季节对我们来说没有意义。 #line:0090b32
me: 我们是机体,<waitfor=0.1><br>季节对我们来说没有意义。 #line:0090b32
佩佩依旧抬着头,<br>树叶从它的面前飘落。 #line:0eadf07
peipei: 对啊,<waitfor=0.1>我们是机体。 #line:0434891
peipei: 我怎么会忘了…… #line:0df59d5
@@ -106,7 +106,7 @@ me: 它不太稳定,<waitfor=0.1>你需要放松一些。 #line:0a70f88
<<stop_random_animation 随机落叶>>
<<control_single_part 树叶动画 树叶大风>>
<<wait 1>>
佩佩低下头,<br>一会儿又抬了起来,<br>重新看向天空。<br>树叶从它的面前飘落。 #line:0149a78
佩佩低下头,<waitfor=0.2>一会儿又抬了起来,<waitfor=0.1>重新看向天空。<waitfor=0.2><br>树叶从它的面前飘落。 #line:0149a78
// 它接住了一片,举了起来,对着空中。 #line:0378444
<<hide_dialog>>
<<wait 0.5>>
@@ -131,13 +131,13 @@ me: 它已经黄了。 #line:0049b60
//佩佩仔细端详它,捏着叶柄轻轻地旋转着。 #line:04efadd
<<hide_dialog>>
<<wait 1>>
树叶从它的手指之间滑落,<br>轻轻地飘走了。 #line:0c7c5dd
树叶从它的手指之间滑落,<waitfor=0.2>轻轻地飘走了。 #line:0c7c5dd
<<hide_dialog>>
<<wait 1>>
peipei: 再见了,<waitfor=0.2>叶子。 #line:0694ade
佩佩看了路斯一眼,<br>露出了一个淡淡的微笑,<br>转头离开了。 #line:00d0440
佩佩看了路斯一眼,<waitfor=0.2>露出了一个淡淡的微笑,<waitfor=0.2><br>转头离开了。 #line:00d0440
<<fade_out_actor "诊室外佩佩">>
<<wait 1>>
//<<play_sfx "event:/Scriptal/pager">>
+19 -19
View File
@@ -55,13 +55,13 @@ me: 谢谢。 #line:09a2a98
<<set_global_param d1n_drunk 1>>
<i>路斯一饮而尽。</i> #line:031e661
<i>一饮而尽。</i> #line:031e661
<<hide_dialog>>
<<wait 1>>
<i>世界都变得安静了下来。<br>只有模模糊糊、朦朦胧胧的声音…</i> #line:091be9d
<i>那是安全的声音。<br>也就是没有声音。</i> #line:0bcbdd8
<i>那是安全的声音。<waitfor=0.4><br>也就是没有声音。</i> #line:0bcbdd8
<<hide_dialog>>
<<wait 0.7>>
@@ -71,7 +71,7 @@ me: 谢谢。 #line:09a2a98
<<hide_dialog>>
<<wait 0.5>>
ql: 喝这么急。小心烧坏消化模块喔。 #line:02690c1
ql: 喝这么急。<waitfor=0.3>小心烧坏消化模块喔。 #line:02690c1
<<change_actor_state "5ShakingIN" 酒吧调酒妹>>
<<fade_in_actor 酒吧调酒妹>>
ql: 我还以为医生都不会有烦心事呢。 #line:0b73f06
@@ -94,14 +94,14 @@ me: 别太依赖它,<waitfor=0.1><br>有可能会让你的情绪模块紊乱
ql: 你不想问<waitfor=0.1><br>你自己是什么气味吗? #line:0a9173c
<i>路斯轻轻微笑。</i> #line:068a830
<i>轻轻微笑。</i> #line:068a830
me: 我听得出来<waitfor=0.1><br>你自己是打算要说的。 #line:077704b
//<<fade_out_actor 酒吧调酒妹 0.5>>
<<change_actor_state "1CloseeyeSmile" 酒吧调酒妹>>
//<<fade_in_actor 酒吧调酒妹 0.5>>
<<hide_dialog>>
<<wait 0.5>>
<i>它也笑了。是一个灿烂的笑。</i> #line:0fb7377
<i>它也笑了。<waitfor=0.3>是一个灿烂的笑。</i> #line:0fb7377
ql: 猜一下嘛。 #line:07950d4
ql: 你有和我身上一样的气味。 #line:09f8aa5
@@ -182,7 +182,7 @@ ql: 怎么样? #line:08a175f
<<change_actor_state_async Idle 酒吧医生>>
me: 话说在前头。<waitfor=0.2>如果有什么副作用… #line:0bfc102
<<change_actor_state "Smile" 酒吧调酒妹>>
ql: 如果有什么副作用,<waitfor=0.1>你就举报我好了。 #line:01d180c
ql: 如果有什么副作用,<waitfor=0.1><br>你就举报我好了。 #line:01d180c
ql: 放心吧。 #line:033df7b
<<hide_dialog>>
<<change_actor_state "2IN" 酒吧调酒妹>>
@@ -195,8 +195,8 @@ ql: 怎么样? #line:08a175f
<<change_actor_slot 酒吧调酒妹 吧台内>>
<<fade_in_actor 酒吧调酒妹 0.5>>
ql: 先别急着喝噢。 #line:06f058b
<i>路斯看向酒杯。</i> #line:0aa5cd8
<i>酒水在杯子里晃动着,<br>折射出迷幻的色彩。</i> #line:0594f36
<i>看向酒杯。</i> #line:0aa5cd8
<i>酒水在杯子里晃动着,<waitfor=0.2>折射出迷幻的色彩。</i> #line:0594f36
<<hide_dialog>>
<<wait 1>>
@@ -222,13 +222,13 @@ ql: 医生,<waitfor=0.1>如果一个病人被损坏了,<waitfor=0.1><br>不
<<wait 1>>
me: 我会给出三个思路。 #line:0306ca0
me: 第一,<waitfor=0.1>如果受损原件可以更换,<waitfor=0.1>就更换。<waitfor=0.2><br>第二,<waitfor=0.1>如果其它原件可以代偿,<waitfor=0.1>就想办法代偿。<waitfor=0.2><br>第三… #line:04097d2
me: 第一,<waitfor=0.1>如果受损原件可以更换,<waitfor=0.1>就更换。<waitfor=0.5><br>第二,<waitfor=0.1>如果其它原件可以代偿,<waitfor=0.1>就想办法代偿。<waitfor=0.4><br>第三… #line:04097d2
<<change_actor_state_async Idle 酒吧医生>>
<<set_global_param d1n_drunk 1.5>>
<i>路斯喝了一口酒。</i> #line:0f4862c
me: 如果这三条都没用,<waitfor=0.1><br>我会建议它主动申请回收。<waitfor=0.2><br>提升资源回转效率。 #line:03b0d7f
<i>喝了一口酒。</i> #line:0f4862c
me: 如果这三条都没用,<waitfor=0.1>我会建议它主动申请回收。<waitfor=0.2><br>提升资源回转效率。 #line:03b0d7f
ql: 真是标准的*医生*回答呢。<waitfor=0.2><br>不过… #line:05027e7
ql: 第三条你还没说呢。 #line:075cba9
@@ -248,9 +248,9 @@ ql: 已经坏了的,<waitfor=0.1>就让它坏了吧。<waitfor=0.2><br>就当
ql: 我们不都是这样吗?<waitfor=0.2><br>我们生来就是要坏的。 #line:0e6330a
ql: 对着伤口哭泣,<waitfor=0.1><br>只怕会让伤口锈蚀更严重吧。 #line:0b79003
me: 你是想说,<waitfor=0.1><br>我们有些本就“生来如此”的损伤,<waitfor=0.1>对吧? #line:0f1b08a
me: 也就是你说的,<waitfor=0.1><br>我们的原型里的,<waitfor=0.1><br>天然的"问题"。 #line:002672e
me: 但是…<waitfor=0.1>这个天然的"问题"<waitfor=0.1><br>恰恰就是我们被制造的意义,<waitfor=0.1>不是么? #line:0b2cf39
me: 你是想说,<waitfor=0.1><br>我们有些本就“生来如此”的<br>损伤,<waitfor=0.1>对吧? #line:0f1b08a
me: 也就是你说的,<waitfor=0.1><br>我们的原型里的,<waitfor=0.1>天然的"问题"。 #line:002672e
me: 但是…<waitfor=0.1>这个天然的"问题"<waitfor=0.1><br>恰恰就是我们被制造的意义,<waitfor=0.1><br>不是么? #line:0b2cf39
me: 如果把我们的"意义"都解决了,<waitfor=0.1>那… #line:0bb801d
ql: 那会怎样? #line:04e455e
@@ -266,7 +266,7 @@ me: 我不知道。 #line:08ee8ce
ql: 其实…<waitfor=0.1>无论你喝下这杯酒,<waitfor=0.1><br>或者决定不喝…… #line:0d8f0c2
ql: 也都是由"原型"驱动的。<waitfor=0.2><br>也就是说,<waitfor=0.1>都是主脑安排的。 #line:029136f
ql: 既然主脑自有它的安排。<waitfor=0.2><br>为什么要替它操心呢? #line:0d9b99d
ql: 况且…<waitfor=0.1>每个机体生来就注定要被回收,<waitfor=0.1><br>难道就代表着,<waitfor=0.1>它们应该立刻被回收吗? #line:0cd87b4
ql: 况且…<waitfor=0.1>每个机体生来就注定要被回收,<waitfor=0.1>难道就代表着,<waitfor=0.1><br>它们应该立刻被回收吗? #line:0cd87b4
ql: 你越是操心,<waitfor=0.1>越是发现自己什么也做不了,<waitfor=0.1><br>反而坏的更严重了。 #line:011a8dd
<i>酒保自己拿起你的酒轻轻抿了一口。</i> #line:00f3b9d
@@ -326,7 +326,7 @@ me: 那…<waitfor=0.1>它有什么用? #line:055b1a7
ql: 人类用这种方式来找到自己隐藏的思绪。 #line:0bd59d4
ql: 总之…<waitfor=0.1>卡上的机体就代表你。<waitfor=0.2><br>你怎么看它,<waitfor=0.1><br>就意味着你怎么看待你自己。 #line:0bc3651
ql: 你看到了什么?<waitfor=0.2><br>不用告诉我,<waitfor=0.1><br>告诉你自己就好啦。 #line:0eedcba
ql: 你看到了什么?<waitfor=0.5><br>不用告诉我,<waitfor=0.1>告诉你自己就好啦。 #line:0eedcba
<<hide_tarot>>
<<change_actor_state "1Smile" 酒吧调酒妹>>
<<wait 1>>
@@ -346,14 +346,14 @@ ql: 是嘛。 #line:0ec76a5
<<set_music_param event:/Amb/amb_beachsample beach_sample_stage 0.2>>
<<change_actor_state_async Idle 酒吧医生>>
<i>路斯看着手中的牌。<br>把牌翻转过来,<br>又仔细看了看。</i> #line:087f9c2
<i>看着手中的牌。<waitfor=0.2><br>把牌翻转过来,<waitfor=0.2>又仔细看了看。</i> #line:087f9c2
<i>酒杯里的酒的颜色似乎正在变幻。<br>路斯望着它出神。</i> #line:075fce1
<i>酒杯里的酒的颜色似乎正在变幻。望着它出神。</i> #line:075fce1
//<i>你望着它出神。</i> #line:06a9f93
<<set_global_param d1n_drunk 3>>
<i>路斯一饮而尽。</i> #line:0910557
<i>一饮而尽。</i> #line:0910557
<<change_actor_state_async 醉酒 酒吧医生>>
<<change_actor_state 醉酒loop 酒吧医生>>
-3
View File
@@ -144,7 +144,6 @@ title: MemoryDeepIn
tags: event
---
<<clear_screen>>
<<ModuleHightLight Memory false>>
<<switch_fix_system_to Memory>>
<<jump 进入记忆>>
===
@@ -155,7 +154,6 @@ tags: event
title: UFDeepIn
tags: event
---
<<ModuleHightLight UF false>>
<<jump UF深入检查>>
===
@@ -168,7 +166,6 @@ position: -9,21
---
<<clear_screen>>
<<switch_fix_system_to Eye>>
<<ModuleHightLight Eye false>>
===
@@ -59,13 +59,6 @@ UfModule: 拒绝访问!需要A+级权限进行深入检查。 #line:00d6e4d
me: 还是再检查一次吧。 #line:0cdd59e
<<Reset_Plug>>
<<endif>>
<<ModuleHightLight Eye false>>
<<ModuleHightLight Emo false>>
<<ModuleHightLight Logic false>>
<<ModuleHightLight Speak false>>
<<ModuleHightLight Color false>>
<<ModuleHightLight UF false>>
<<ModuleHightLight Memory false>>
<<hide_dialog>>
<<clear_screen>>
@@ -173,7 +166,6 @@ position: 572,-2497
Error: 检测到未知来源的异常显像! #line:0afe40d
<<wait 0.3>>
<<set $PlugCount=$PlugCount+1>>
<<ModuleHightLight Eye false>>
<<ModuleAlarm Eye true>>
me: 无色彩信号…<waitfor=0.2>?……<waitfor=0.3>异常显像? #line:0b14c70
<<if $colorChecked == false>>
@@ -243,7 +235,6 @@ MemModule: 已与记忆模块建立连接! #line:08a12cc
//这里有理解误区:玩家会以为记忆就存储在卡带里;需要处理
<<wait 0.1>>
->深入检查 #line:0749c3a
<<ModuleHightLight Memory false>>
<<hide_dialog>>
<<jump MemoryDeepIn>>
<<else>>
@@ -256,7 +247,6 @@ MemModule: 已与记忆模块建立连接! #line:08a12cc
<<endif>>
<<wait 0.3>>
MemModule: 检查完成!未发现关键错误。 #line:0dde0d2
<<ModuleHightLight Memory false>>
<<wait 0.3>>
me: 记忆模块一切正常。 #line:067e962
<<set $memoryChecked = true>>
@@ -295,7 +285,6 @@ ChipModule: 已与附加模块建立连接! #line:03032df
<<wait 1>>
<<if $colorChecked ==false>>
<<set $PlugCount=$PlugCount+1>>
<<ModuleHightLight Color false>>
me: 这似乎是美工机体的特殊模块…<waitfor=0.2>让我查查数据库。 #line:01e03c0
<<hide_dialog>>
<<open_progress_window 数据库查询 "正在查询:色觉晶圆训练槽……" 2>>
@@ -347,7 +336,6 @@ Linking: 正在建立连接… #line:0445421
<<wait 0.2>>
EmoModule: 已与情绪模块建立连接! #line:00d2d0b
->检查 #line:0b6168e
<<ModuleHightLight Emo false>>
<<hide_dialog>>
Analysing:------ #line:0cb133b
<<if $emoChecked == false>>
@@ -388,7 +376,6 @@ Linking: 正在建立连接… #line:0b59a02
<<wait 0.2>>
SpeakerModule: 已与表达模块建立连接! #line:0ce06c1
->检查 #line:03d9dfe
<<ModuleHightLight Speak false>>
<<hide_dialog>>
Analysing:------ #line:058f3df
<<if $speakerChecked == false>>
@@ -423,7 +410,6 @@ Linking: 正在建立连接… #line:09de170
<<wait 0.2>>
LogicModule: 已与逻辑模块建立连接! #line:0d49573
->检查 #line:0a649d5
<<ModuleHightLight Logic false>>
<<hide_dialog>>
Analysing:------ #line:0a6b872
<<if $logicChecked == false>>
@@ -292,7 +292,6 @@ position: -1045,-2332
<<if $eyeTargetTriggerCount == 3>>
<<ModuleAlarm Eye false>>
<<ModuleHightLight Memory true>>
<<set $isFinishedEyeCheck=true>>
<<Set_MouseMovementLockState EyeManager false>>
<<jump 视觉检查状态>>
@@ -6,8 +6,6 @@ position: -449,-3574
<<fade_in 1>>
<<switch_fix_system_to "BodyModule" "Head">>
<<fade_out 1>>
<<ModuleHightLight Eye false>>
<<ModuleHightLight Memory true>>
<<jump 进入记忆检查>>
===
@@ -86,7 +84,6 @@ position: -871,-2773
<<set $ufDiscussCount=3>>
<<set $eyeDiscussCount=2>>
<<switch_fix_system_to "BodyModule">>
<<ModuleHightLight Memory false>>
<<jump 记忆检查状态>>
<<endif>>
@@ -206,4 +203,4 @@ ppm: 如果公司这么讨厌的话,<waitfor=0.2>我就不在那里干就好
<<stop_music event:/Music/mem_pp_2>>
<<play_sfx event:/Scriptal/mem_out>>
<<jump End_memoryPaly>>
===
===
+4 -3
View File
@@ -36,8 +36,9 @@ me: 有了这种数据泄露,<waitfor=0.1><br>你的视觉模块就会像颜
<<wait 1>>
me: 受到了这些异常色彩的干扰,<waitfor=0.1><br>UF也就无法正确地生成颜色了。 #line:05e6ce3
<<wait 0.5>>
<<show_full_screen "pp1_分析4" 0>>
<<wait 0.3>>
<<show_full_screen "pp1_分析4-1" 0>>
<<show_full_screen "pp1_分析4-2" 0>>
<<wait 0.2>>
pp: 也就是说…<waitfor=0.1>我的想象力…<waitfor=0.1>干扰了UF的工作? #line:08e0f2d
me: 你可以这么理解。 #line:0439642
<<wait 0.5>>
@@ -74,7 +75,7 @@ me: 请不要忘记这点。<br>我可不想因为<waitfor=0.2>“<color=\#FFB20
//这段感觉放到术前谈话更好
<<complete_task "line:02a3a37">>
//【占位】:不过绘图机器人存储的颜色记忆也足够多了,也没什么新的值得记住的东西了
<<fade_in 1>>
//<<fade_in 1>>
<<jump 结束分析>>
===
@@ -19,7 +19,7 @@ tags: content
colorID: 3
position: 251,-1150
---
<<fade_out 1>>
//<<fade_out 1>>
<<wait 2>>
<<hide_dialog>>
<<hide_full_screen>>
@@ -21,7 +21,6 @@ me: 还没结束…<waitfor=0.1>保险起见,<waitfor=0.1>我们进视觉复
<<fade_out 0.1>>
<<clear_tasks>>
Task: 检查视觉模块 #line:037c944
<<ModuleHightLight Eye true>>
<<DropCable>>
<<set $eyeChecked = false>>
===
@@ -128,7 +127,6 @@ EyeModule: 已与视觉模块建立连接! #line:0dc8d9d
Error: 未检测到色彩信号! #line:0059fae
Error: 检测到丢失和记忆模块的连接。 #line:0638bb4
<<wait 0.1>>
<<ModuleHightLight Eye false>>
<<ModuleAlarm Eye true>>
<<if $eyeChecked==false>>
me: 看起来是生效了。<waitfor=0.2><br>不过,<waitfor=0.1>还是要深入检查,亲眼确认一下。 #line:08c9f56
+3
View File
@@ -34,6 +34,9 @@ GraphicsSettings:
- {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 4800000, guid: 6652ed847ed1bc641bd702f03c650adf, type: 3}
- {fileID: 4800000, guid: 9f7b2ef66c2842c496327822f79da521, type: 3}
- {fileID: 4800000, guid: f7f1f0a7430f4f44fa1d7af89e1e013f, type: 3}
m_PreloadedShaders: []
m_PreloadShadersBatchTimeLimit: -1
m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}