u3dunity3d culling maskk可以用于3d吗

2439人阅读
Unity相关(19)
2.1.3 cullingMask属性:摄像机按层渲染
基本语法:public intcullingMask { }
功能说明:此属性用于按层(即GameObject.layer)有选择性的渲染场景中的物体。通过cullingMask可以使得当前摄像机有选择性的渲染场景中的部分物体,默认cullingMask=-1即渲染场景中任何层物体,当cullingMask=0时不渲染场景中任何层,若只渲染分别位于2、3、4层的物体则可以使用代码cullingMask=(1&&2)+(1&&3)+ (1&&4)来实现。
实例演示:下面通过实例演示属性cullingMask的使用。
using UnityE
using System.C
public class CullingMask_ts : MonoBehaviour
void OnGUI()
//默认CullingMask=-1,即渲染任何层
if (GUI.Button(new Rect(10.0f, 10.0f, 200.0f, 45.0f), &CullingMask=-1&))
camera.cullingMask = -1;
//不渲染任何层
if (GUI.Button(new Rect(10.0f, 60.0f, 200.0f, 45.0f), &CullingMask=0&))
camera.cullingMask = 0;
//仅渲染第0层
if (GUI.Button(new Rect(10.0f, 110.0f, 200.0f, 45.0f), &CullingMask=1&&0&))
camera.cullingMask = 1 && 0;
//仅渲染第8层
if (GUI.Button(new Rect(10.0f, 160.0f, 200.0f, 45.0f), &CullingMask=1&&8&))
camera.cullingMask = 1 && 8;
//渲染第8层与第0层
if (GUI.Button(new Rect(10.0f, 210.0f, 200.0f, 45.0f), &CullingMask=0&&8&))
//注:不可大意写成camera.cullingMask = 1 && 8+1;或
//camera.cullingMask = 1+1&&8 ;因为根据运算符优先次序其分别等价于
//camera.cullingMask = 1 && (8+1)和camera.cullingMask = (1+1)&&8
camera.cullingMask = (1 && 8) + 1;
在这段代码中,在OnGUI方法中定义了5个不同的Button来渲染不同层的物体。当然,在使用cullingMask来有选择性渲染物体之前,需要先对场景中的物体的层次进行设置。另外需要注意在渲染多个层时的代码写法,如代码中所示,在渲染第8层和第0层时,且勿将代码写成camera.cullingMask = 1 && 8+1或camera.cullingMask = 1+1&&8的形式。具体的渲染情况请读者自行运行程序查看。
本文章内容摘自图书《Unity API解析》,源码下载地址:.cn/book/1474
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:49809次
排名:千里之外
原创:16篇Unity3D(22)
最近看别人写的Demo,里面这个Linecast字段的LayerMask参数看了半天也没看懂
void Update()
// The player is grounded if a linecast to the groundcheck position hits anything on the ground layer.
grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 && LayerMask.NameToLayer("Ground"));
// If the jump button is pressed and the player is grounded then the player should jump.
if(Input.GetButtonDown("Jump") && grounded)
jump = true;
后来去官网看,半天也没个例子,还是google吧,在网上看到各路大神的解释,终于明白了,LayerMask实际上是一个位码操作,在Unity3d中Layers一共有32层,这个是不能增加或者减少的:
摘自官网:
Layers are used throughout Unity as a way to create groups of objects that share particular characteristics (see this page for further details). Layers are primarily used to restrict operations such as raycasting or rendering so that they are only applied to the groups of objects that are relevant. In the manager, the first eight layers are defaults used by Unity and are not editable. However, layers from 8 to 31 can be given custom names just by typing in the appropriate text box. Note that unlike tags, the number of layers cannot be increased.
所以那个LayerMask实际上是用Int32的32个位来表示每个层级,当这个位为1时表示使用这个层,为0时表示不用这个层。
回到上面的例子:
1 && LayerMask.NameToLayer("Ground")
这一句实际上表示射线查询只在Ground所在这个层级查找。
再来看看NameToLayer是干嘛的。
官网解释:
Description
Given a layer name, returns the layer index as defined by either a Builtin or a User Layer in the Tag Manager.
是返回的该名字所定义的层的层索引,注意是从0开始。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:19998次
排名:千里之外
原创:30篇
转载:32篇
(4)(1)(1)(1)(1)(3)(24)(25)(2)5494人阅读
unity3d(23)
unity3d中如何使用layerMask参数:
Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers)
其实很简单:1 && 10&&打开第10的层。
~(1 && 10) 打开除了第10之外的层。
~(1 && 0) 打开所有的层。
(1 && 10) | (1 && 8) 打开第10和第8的层。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1185347次
积分:12342
积分:12342
排名:第1071名
原创:160篇
转载:251篇
评论:104条
(1)(1)(2)(2)(12)(3)(1)(7)(12)(13)(9)(24)(22)(5)(12)(11)(2)(5)(4)(9)(2)(2)(2)(10)(7)(15)(2)(9)(26)(9)(4)(18)(8)(19)(12)(9)(19)(13)(16)(30)(15)(19)(4)扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
关注:1733
当前位置: &
__________________________________________________________________________________
开发者干货区版块规则:
  1、文章必须是图文形式。(至少2幅图)
& && &2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
& && &3、本版块只支持在游戏蛮牛原创首发,不支持转载。
& && &4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
& && &5、......
__________________________________________________________________________________
查看: 2509|回复: 17
ugui如何制作遮照和切割效果(mask)
本帖为抢楼帖,欢迎抢楼!&
奖励楼层: 1,2,5,9,14,25,36,50&
9排名<font color="#FF昨日变化3主题帖子积分
蛮牛币10223
在线时间331 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
由于项目需求需要动态加载用户头像并且变成圆的头像。服务器下载的图片全都是矩形,所以就要客户端来切割。具体效果如下:
原理方法就用UGUI里的mask遮照来实现。实例步骤:1.下面有两个物体,maskhead 和他的子物体userhead_portrait
2.maskhead作为背景层必须是圆的图片(此处要切成圆的,如果要切成三角形就必须是三角形的图片),其上必须有mask这个组件。3.首先明白mask组件只能遮照他的子物体。所以被切割的层必须作为maskhead的子物体。
具体属性看截图:父物体的属性截图:
被切割图片属性:
从上面的图片中就可以看出虽然被切割的图片(userhead_portrait)是矩形,但会被mask切割为圆形状。
每日推荐:
271/150排名<font color="#FF昨日变化3主题帖子积分
初来乍到, 积分 71, 距离下一级还需 79 积分
初来乍到, 积分 71, 距离下一级还需 79 积分
在线时间21 小时
ugui如何制作遮照和切割效果(mask)
每日推荐:
4387/500排名<font color="#FF昨日变化3主题帖子积分
四处流浪, 积分 387, 距离下一级还需 113 积分
四处流浪, 积分 387, 距离下一级还需 113 积分
在线时间115 小时
来赚点蛮牛币。。。。。。。。
每日推荐:
5975/1000排名<font color="#FF昨日变化1主题帖子积分
熟悉之中, 积分 975, 距离下一级还需 25 积分
熟悉之中, 积分 975, 距离下一级还需 25 积分
蛮牛币3029
在线时间400 小时
了解了,感谢楼主
每日推荐:
4315/500排名<font color="#FF昨日变化3主题帖子积分
四处流浪, 积分 315, 距离下一级还需 185 积分
四处流浪, 积分 315, 距离下一级还需 185 积分
在线时间144 小时
来赚点蛮牛币。。。。。。。。
每日推荐:
9排名<font color="#FF昨日变化2主题帖子积分
在线时间582 小时
这个MASK有明显的锯齿,建议用shader来做
每日推荐:
9排名<font color="#FF昨日变化2主题帖子积分
在线时间79 小时
这个MASK有明显的锯齿,建议用shader来做
Shader的话,有些移动端会伤不起的,尤其是安卓
每日推荐:
9排名<font color="#FF昨日变化2主题帖子积分
在线时间582 小时
Shader的话,有些移动端会伤不起的,尤其是安卓
其实还好,&shader移动端伤不起&只是三人成虎而已,UGUI一样是使用了很多shader,只要不是特别复杂的shader语法,同时注意编程优化,问题都不大。具体你可以自己尝试一下。
每日推荐:
73688/5000排名<font color="#FF昨日变化2主题帖子积分
日久生情, 积分 3688, 距离下一级还需 1312 积分
日久生情, 积分 3688, 距离下一级还需 1312 积分
蛮牛币1310
在线时间1583 小时
来赚点蛮牛币。。。。。。。。
每日推荐:
拾荒者-http://www.shihuangzhe.org
4324/500排名<font color="#FF昨日变化1主题帖子积分
四处流浪, 积分 324, 距离下一级还需 176 积分
四处流浪, 积分 324, 距离下一级还需 176 积分
在线时间131 小时
来赚点蛮牛币。。。。。。。。
每日推荐:
71809/5000排名<font color="#FF昨日变化1主题帖子积分
日久生情, 积分 1809, 距离下一级还需 3191 积分
日久生情, 积分 1809, 距离下一级还需 3191 积分
蛮牛币2147
在线时间636 小时
其实还好,&shader移动端伤不起&只是三人成虎而已,UGUI一样是使用了很多shader,只要不是特别复杂的shade ...
求告知哪里有mask的shader,shader怎么用在UI上的?
[]: llupll 捡了钱没交公 蛮牛币 降了 2
每日推荐:
3280/300排名<font color="#FF昨日变化2主题帖子积分
偶尔光临, 积分 280, 距离下一级还需 20 积分
偶尔光临, 积分 280, 距离下一级还需 20 积分
在线时间63 小时
還是那麽地無聊啊!
每日推荐:
257/150排名<font color="#FF昨日变化10主题帖子积分
初来乍到, 积分 57, 距离下一级还需 93 积分
初来乍到, 积分 57, 距离下一级还需 93 积分
在线时间28 小时
我也是这么做的,但这样做有个问题,某些机型会不起作用,图片还是显示正方形,例如Oppo R9。。
每日推荐:
3154/300排名<font color="#FF昨日变化5主题帖子积分
偶尔光临, 积分 154, 距离下一级还需 146 积分
偶尔光临, 积分 154, 距离下一级还需 146 积分
在线时间20 小时
頂一下 馬克{:94:}{:94:}{:94:}{:94:}{:94:}{:94:}{:94:}{:94:}{:94:}{:94:}{:94:}{:94:}
每日推荐:
3258/300主题帖子积分
偶尔光临, 积分 258, 距离下一级还需 42 积分
偶尔光临, 积分 258, 距离下一级还需 42 积分
在线时间176 小时
我们也用这个方法,圆型图片锯齿的确很严重,后来在上边又放了个圆环边框解决的。不过13#的问题我们也遇到过,的确是有些机型不起作用。。。
每日推荐:
游戏蛮牛给予质量较高、影响力较大的unity相关技术开发者的荣誉称号
连续签到30天Unity3D中Layers和LayerMask解析 - 简书
Unity3D中Layers和LayerMask解析
Unity中是用int32来表示32个Layer层。int32表示二进制一共有32位(0—31)。在Unity中可编辑的Layer如下图所示:
在Unity中每个GameObject都有Layer属性,默认的Layer都是Default。在Unity中可编辑的Layer共有24个(8—31层),官方已使用的是0—7层,默认不可编辑!
LayerMask实际上是一个位码操作,在Unity3D中一共有32个Layer层,并且不可增加。
按位运算符:~、|、&、^。位运算符主要用来对二进制位进行操作。
逻辑运算符:&&、||、!。逻辑运算符把语句连接成更复杂的复杂语句。
按位运算符:左移运算符&&,左移表示乘以2,左移多少位表示乘以2的几次幂。
举个栗子:
var temp = 14 && 2; 表示十进制数14转化为二进制后向左移动2位。
temp最后计算的值为 14乘以2的平方,temp = 56;
同理,右移运算符&&,移动多少位表示除以2的几次幂。
具体可以转到博客:.
上面是个基础知识的补充。
在Unity中是用LayerMask
官方给出的描述是:Layers are most commonly used by Cameras to render only a part of the scene, and by Lights to illuminate only parts of the scene. But they can also be used by raycasting to selectively ignore colliders or to create collisions。
翻译下就是:Layers通常被摄像机用来渲染部分场景,和灯光照射部分场景使用。但是它们也可以用来做射线检测时忽略一些collder或Collision使用。
在代码中使用时如何开启某个Layers?
LayerMask mask = 1 && 你需要开启的Layers层。
LayerMask mask = 0 && 你需要关闭的Layers层。
举几个个栗子:
LayerMask mask = 1 && 2; 表示开启Layer2。
LayerMask mask = 0 && 5;表示关闭Layer5。
LayerMask mask = 1&&2|1&&8;表示开启Layer2和Layer8。
LayerMask mask = 0&&3|0&&7;表示关闭Layer3和Layer7。
上面也可以写成:
LayerMask mask = ~(1&&3|1&&7);表示关闭Layer3和Layer7。
LayerMask mask = 1&&2|0&&4;表示开启Layer2并且同时关闭Layer4.
using UnityE
using System.C
public class example : MonoBehaviour {
LayerMask mask =
~(1&&3|1&&7);
void Update() {
if (Physics.Raycast(transform.position, transform.forward, 100, mask.value))
Debug.Log("Hit something");
专注游戏AI和图形学研究

我要回帖

更多关于 unity3d shader mask 的文章

 

随机推荐