unity 中怎样设置图片遮罩随时间显示和隐藏

2015年01月27日 10:50 0 点赞 0 评论 更新于 2025-11-21 15:33

在开发过程中,我们常常需要对物体进行隐藏和显示操作。下面将详细介绍在Unity中实现物体隐藏和显示的几种方法。

一、设置Renderer状态

每一个可以被渲染的物体都会包含一个Renderer组件,其作用是将物体渲染到屏幕上。若禁用这个组件,自然就能实现隐藏物体的效果。

代码示例

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {
public Transform target;

void Start() {
}

void OnGUI() {
// renderer control
if (GUILayout.Button("display")) {
MeshRenderer[] marr = target.GetComponentsInChildren<MeshRenderer>(true);
foreach (MeshRenderer m in marr) {
m.enabled = true;
}
}
if (GUILayout.Button("hide")) {
MeshRenderer[] marr = target.GetComponentsInChildren<MeshRenderer>(true);
foreach (MeshRenderer m in marr) {
m.enabled = false;
}
}
}
}

这里做了一个遍历,因为一个物体可能有多个面片,所以需要把物体所有面片上的MeshRenderer全部禁用掉。此外,一些较为复杂的渲染可能会涉及Trail RendererLine RendererSkinned Mesh RendererMesh Renderer等,我们只需找到对应的渲染器组件,通过禁用或激活它来实现物体的隐藏或显示。

二、设置Active

Unity 4.x写法

gameObject.SetActive(true); // 显示物体
gameObject.SetActive(false); // 隐藏物体

Unity 3.x写法

gameObject.SetActiveRecursively(true); // 显示物体
gameObject.SetActiveRecursively(false); // 隐藏物体

Unity 4.x会保持当前物体子物体所有的状态,而Unity 3.x如果设置activetrue,所有子物体都会变为true,这也是Unity升级后改进的一点。

三、设置Layer

假设现有Layer为:

  • Default = 0
  • TransparentFX = 1
  • Ignore Raycase = 2
  • Water = 4
  • MyLayer = 8

设置相机CameraCulling Mask为:Default + TransparentFX + Ignore Raycase + Water。那么当设置物体的LayerMyLayer时,物体的Layer层在当前相机被忽略,也就相当于隐藏。具体代码如下:

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {
void OnGUI () {
if (GUILayout.Button("Display")) {
gameObject.layer = LayerMask.NameToLayer("Default");
}
if (GUILayout.Button("Hide")) {
gameObject.layer = LayerMask.NameToLayer("MyLayer");
}
}
}

综上所述,在Unity中实现物体隐藏和显示的代码并不复杂,大家认真研究一下就能掌握。