您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
72 行
2.3 KiB
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|