Unity3D中隐藏与显示物体
来源:互联网 发布:chrome 淘宝联盟插件 编辑:程序博客网 时间:2024/06/09 18:07
Unity3D中隐藏与显示物体
Unity3D中隐藏与显示物体的一些操作
在使用unity3d开发游戏的过程中,我们常常会遇到需要隐藏或者显示的操作,针对这一点,下面做了一些总结。
一、设置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 Renderer,Line Renderer,Skinned Mesh Renderer,Mesh Renderer等,那就找到它,禁用/激活它来实现隐藏或显示。
二、设置Active
unity4.x写法:
1
2 gameObject.SetActive(true);//显示物体
gameObject.SetActive(false);//隐藏物体
unity3.x写法:
1
2 gameObject.SetActiveRecursively(true);显示物体
gameObject.SetActiveRecursively(false);隐藏物体
unity4.x会保持当前物体子物体所有的状态,unity3.x则是如果设置active为true,所有子物体全部变为true。 这也是unity升级后改进的一点。
三、设置Layer
假设现有Layer为:
Default = 0,TransparentFX = 1,Ignore Raycase = 2,Water = 4,MyLayer = 8.
设置相机Camera的Culling Mask为:Default+TransparentFX+Ignore Raycase+Water.
那么当设置物体的Layer为MyLayer时候,物体的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"); } }
}
以上各种方法谨供大家参考,在选用的时候要根据实际的情况来选用适合的方法来实现物体的隐藏与显现。
unity3d 游戏对象消失三种方法的区别(enabled/Destroy/active)
gameObject.renderer.enabled
//是控制一个物体是否在屏幕上渲染或显示 而物体实际还是存在的 只是想当于隐身 而物体本身的碰撞体还依然存在的
GameObject.Destroy()
//表示移除物体或物体上的组件 代表销毁该物体 实际上该物体的内存并没有立即释放 而是在你下下个场景中槽释放内存资源,就是你a场景中Destroy了 一般是在c场景中才真正释放该物体的内存资源(这是我的体会 不知道理解错误没)
gameObject.active
//是否在场景中停用该物体 在你gameObject.active =false中 则你在场景中用find找不到该物体
//如果该物体有子物体 你要用SetActiveRecursively(false) 来控制是否在场景中停用该物体(递归的)
- Unity3D中隐藏与显示物体
- Unity3D中隐藏与显示物体的方法
- Unity3D中隐藏与显示物体的一些操作
- unity3d中让物体显示和隐藏
- unity3d中隐藏/显示物体方法总结
- unity3d中隐藏/显示物体方法总结
- unity3d中让物体显示和隐藏
- unity3d中让物体显示和隐藏的方法
- unity3d中隐藏/显示物体方法总结 – unity3d游戏开发
- 设置物体的隐藏与显示
- Unity3D基础学习 加载场景时隐藏物体,点击显示时显示物体
- Unity3d代码获取隐藏物体
- 【Unity3D】对话框、隐藏与显示、拖拽
- NGUI与Unity3d物体交叉显示的一种解决方案
- Unity3D脚本:隐藏GameObject子物体
- Unity3D游戏开发之如何隐藏物体
- unity3d中摄像机父物体与模型碰撞
- [Unity3D]Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果
- 解决办法:mysql_connect()不支持请检查mysql模块是否正确加载
- 常用Linux知识
- uinavigationController和uiSrcoll以及uiPageControl的结合使用---小相册
- 基于EasyDarwin实现幼儿园监控类项目
- 天真无谐
- Unity3D中隐藏与显示物体
- 2015.8.5 第十堂 内存管理(上)
- 双硬盘双系统,光驱位硬盘升级win10注意事项
- String 类
- Eclipse、Hibernate、mysql安装配置及例子
- Java 中的语法糖 (Syntactic Sugar)
- IOS开发他山之石系列-安装Alcatraz
- 快速搭建PHP+iis环境
- Win7升级win10后硬盘(分区)访问被拒绝,无法访问的解决方案