using UnityEngine; public class DoorManager : MonoBehaviour { private static GameObject lastDoor; // 存储上一扇进入的门 private static int lastDoorMaskValue; // 存储上一扇门的Stencil Mask值 private void OnTriggerEnter(Collider other) { // 检查进入的是否是玩家 if (other.CompareTag("Player")) { // 恢复上一扇门的Stencil Mask值 RestoreStencilMask(lastDoor); // 更新上一扇门和其Stencil Mask值 lastDoor = gameObject; SetStencilMaskToZero(lastDoor); } } private void RestoreStencilMask(GameObject door) { if (door != null) { var renderer = door.GetComponent(); if (renderer != null) { var material = renderer.material; if (material != null) { material.SetInt("_StencilMask", lastDoorMaskValue); } } var childRenderer = door.transform.GetChild(0).GetComponent(); if (childRenderer != null) { var childMaterial = childRenderer.material; if (childMaterial != null) { childMaterial.SetInt("_StencilMask", lastDoorMaskValue); } } } } private void SetStencilMaskToZero(GameObject door) { if (door != null) { var renderer = door.GetComponent(); if (renderer != null) { var material = renderer.material; if (material != null) { lastDoorMaskValue = material.GetInt("_StencilMask"); material.SetInt("_StencilMask", 0); } } var childRenderer = door.transform.GetChild(0).GetComponent(); if (childRenderer != null) { var childMaterial = childRenderer.material; if (childMaterial != null) { childMaterial.SetInt("_StencilMask", 0); } } } } }