您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

72 行
2.3 KiB

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<Renderer>();
if (renderer != null)
{
var material = renderer.material;
if (material != null)
{
material.SetInt("_StencilMask", lastDoorMaskValue);
}
}
var childRenderer = door.transform.GetChild(0).GetComponent<Renderer>();
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<Renderer>();
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<Renderer>();
if (childRenderer != null)
{
var childMaterial = childRenderer.material;
if (childMaterial != null)
{
childMaterial.SetInt("_StencilMask", 0);
}
}
}
}
}