最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
在unity3d里怎样隐藏物体
最近在做项目时,我也遇到了在 Unity3D 里隐藏物体的问题。由于自己对这方面了解有限,便在贴吧和社区里提问,得到了大神的解答。下面我将分享具体的实现方法,供大家参考。
Unity3D 中隐藏物体的方法
1. gameObject.renderer.enabled
通过设置 gameObject.renderer.enabled 的值,可以控制一个物体是否在屏幕上渲染或显示。当将其设置为 false 时,物体在屏幕上就相当于“隐身”了,但物体实际上仍然存在于场景中,并且其碰撞体依然有效。示例代码如下:
// 假设 gameObject 是要隐藏的物体
gameObject.renderer.enabled = false; // 隐藏物体
2. GameObject.Destroy()
GameObject.Destroy() 方法用于移除物体或物体上的组件,即销毁该物体。不过,需要注意的是,调用该方法后,物体的内存并不会立即释放。通常情况下,在调用 Destroy() 的场景(假设为 A 场景)之后的下下个场景(假设为 C 场景)中,才会真正释放该物体所占用的内存资源。示例代码如下:
// 销毁物体
GameObject.Destroy(gameObject);
3. gameObject.active
gameObject.active(在较新版本的 Unity 中为 gameObject.SetActive())用于控制物体是否在场景中停用。当将 gameObject.SetActive(false) 时,在场景中使用 GameObject.Find() 方法将无法找到该物体。如果该物体有子物体,可使用 SetActiveRecursively(false) 来递归地控制子物体是否在场景中停用。示例代码如下:
// 停用物体
gameObject.SetActive(false);
// 如果物体有子物体,递归停用
gameObject.SetActiveRecursively(false);
示例代码
以下是一个完整的示例代码,展示了如何通过按键来控制物体的显示和隐藏:
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour
{
GameObject m_obj;
// Use this for initialization
void Start ()
{
m_obj = GameObject.Find("box");
}
// Update is called once per frame
void Update ()
{
}
void OnGUI()
{
if (Input.GetKeyDown(KeyCode.W))
{
m_obj.SetActive(true);
}
if (Input.GetKeyDown(KeyCode.A))
{
m_obj.SetActive(false);
}
}
}
在上述代码中,通过按下 W 键可以显示名为 box 的物体,按下 A 键则隐藏该物体。
希望这些方法能帮助大家在 Unity3D 项目中实现物体的隐藏功能。