Останки: встроенный шейдер вместо бандлового, краснее, x1.2
Тест 10.10: останки в игре бледно-бежевые, хотя в Unity тот же префаб тёмный - игра рисует копию Standard из бандла иначе (как было у крысы). BundleShaderFix ставит встроенный Standard останкам, черепу и ножу-мечу (очередь сохраняется). Плёнка краснее (указание: «больше красного на не-кости»), модель x1.2, иконка перерисована. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
f0b326b7e5
commit
6028252cd6
@@ -0,0 +1,89 @@
|
||||
using System.Collections.Generic;
|
||||
using HarmonyLib;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NecromancerTome
|
||||
{
|
||||
/// <summary>
|
||||
/// Шейдер Standard из наших бандлов (10.10.2026). Тест в игре: останки красного трупа вышли бледно-бежевыми, хотя
|
||||
/// в Unity тот же префаб тёмный и багровый (снимок NecroPreviewOne) - игра рисует копию Standard, приехавшую
|
||||
/// в бандле, не так, как свой Standard. То же раньше было у крысы (RatModel.cs подменяет шейдер на свой) и у
|
||||
/// пирамиды (маджента издалека). Здесь - общая подмена для новых моделей: останки (сущность necroRemains),
|
||||
/// череп и нож-меч прилива (модели предметов). Материалы бандла общие - правится один раз на материал.
|
||||
/// Очередь отрисовки сохраняется (у меча прилива - прозрачная, Fade).
|
||||
/// </summary>
|
||||
public static class BundleShaderFix
|
||||
{
|
||||
static Shader _std;
|
||||
static readonly HashSet<int> _done = new HashSet<int>();
|
||||
|
||||
public static void Fix(Transform _root)
|
||||
{
|
||||
if (_root == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (_std == null)
|
||||
{
|
||||
_std = Shader.Find("Standard");
|
||||
if (_std == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
foreach (Renderer r in _root.GetComponentsInChildren<Renderer>(true))
|
||||
{
|
||||
foreach (Material m in r.sharedMaterials)
|
||||
{
|
||||
if (m == null || m.shader == null || m.shader == _std || m.shader.name != "Standard" || !_done.Add(m.GetInstanceID()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
int queue = m.renderQueue;
|
||||
m.shader = _std;
|
||||
m.renderQueue = queue;
|
||||
Debug.Log("[NecromancerTome] BundleShaderFix: материал '" + m.name + "' - встроенный Standard (очередь " + queue + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Останки красного трупа - модель сущности.</summary>
|
||||
[HarmonyPatch(typeof(EModelBase), nameof(EModelBase.createModel))]
|
||||
public static class Patch_EModelBase_createModel_BundleShaderFix
|
||||
{
|
||||
static int _cls = int.MinValue;
|
||||
|
||||
public static void Postfix(EModelBase __instance)
|
||||
{
|
||||
if (_cls == int.MinValue)
|
||||
{
|
||||
_cls = EntityClass.FromString(RemainsDecay.EntityClassName);
|
||||
}
|
||||
Entity e = __instance.entity;
|
||||
if (e != null && e.entityClass == _cls)
|
||||
{
|
||||
BundleShaderFix.Fix(__instance.GetModelTransform());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Череп и нож (меч прилива) - модели предметов: в руке и на земле.</summary>
|
||||
[HarmonyPatch(typeof(ItemClass), nameof(ItemClass.CloneModel))]
|
||||
public static class Patch_ItemClass_CloneModel_BundleShaderFix
|
||||
{
|
||||
public static void Postfix(ItemClass __instance, AssetManagement.InstanceHandle<GameObject> __result)
|
||||
{
|
||||
string n = __instance?.Name;
|
||||
if (n != "necroSkull" && n != SnakeMode.KnifeName)
|
||||
{
|
||||
return;
|
||||
}
|
||||
GameObject go = __result.Instance;
|
||||
if (go != null)
|
||||
{
|
||||
BundleShaderFix.Fix(go.transform);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -141,7 +141,7 @@ namespace NecromancerTome
|
||||
}
|
||||
// центр модели останков сдвинут от таза к груди: отодвинуть назад на полкорпуса, чтобы таз остался на месте
|
||||
Vector3 back = Quaternion.Euler(0f, yaw, 0f) * Vector3.back;
|
||||
g += back * 0.16f;
|
||||
g += back * 0.19f; // модель x1.2 (NecroRemainsSetup.Scale)
|
||||
|
||||
if (!(EntityFactory.CreateEntity(cls, g, new Vector3(0f, yaw, 0f)) is EntityLootContainer rem))
|
||||
{
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 21 KiB |
Reference in New Issue
Block a user