2014-11-02 13:12:04 jlstmac3 阅读数 393

Unity3D 中的layer与Cocos2d中的layer有所不同!

Cocos2D中的layer可以看做是一个容器!用来盛放游戏物体!可以对该layer进行移动放大等操作,其children也会随着改变!

Unity3D中的layer,我的理解是更接近于一种标识作用!

一个layer可以指定给多个GameObject!然后对该layer的GameObject可以做3类操作:

1.camara选择性的显示!

在camera的culling mask选项中可以选择不同layer进行显示!

2.让灯光只照射到指定的layer上

3.使用Raycast做选择性的碰撞检测

unity圣典的解释:

http://game.ceeger.com/Components/Layers.html

2019-08-22 13:56:31 qq_34229678 阅读数 563

Unity3D UGUI修改Layer层级让摄像机看不到UI

最近测试才发现,改变UI自身的Layer层是无法让摄像机屏蔽UI的,不过可以通过改变其 Canvas(画布)的Layer层来影响摄像机。

2014-10-31 11:15:37 wuming22222 阅读数 571

      本文是对Unity3D圣典关于Layer的文章:http://game.ceeger.com/Components/Layers.html作一些说明。

      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 used by raycasting to selectively ignore colliders or to create collisions.

P.S.:忽略某些碰撞器时射线就会穿过这些碰撞器,若射线不忽略碰撞器,则碰撞器就会被碰撞器挡住。

欢迎各位不吝赐教!

2012-11-30 15:17:20 miaoweiye 阅读数 2719

          先说说Unity3D关于动画方便的东西,Animation Mixing (动画混合),什么是动画混合呢?举个简单的例子吧,一个模型现在又3种动作,分别是idle、walk、shoot,在Unity3D中一个Layer只能播放二种动画,shoot动作只影响左肩膀的骨骼,而不会影响腿部的动作,所有这里就可以把shoot和walk进行Mixing。

 

function Start ()
{

//增加一个动画剪辑片段

//
 animation.AddClip(animation["shoot"].clip, "shootUpperBody");
 animation["shootUpperBody"].AddMixingTransform(transform.Find("mover/gun")); //@parm 路径
 animation["shootUpperBody"].AddMixingTransform(transform.Find("mover/roothandle/spine1"));
//设置动画模式 
 animation.wrapMode = WrapMode.Loop;

 animation["jump"].wrapMode = WrapMode.Clamp;
 animation["shoot"].wrapMode = WrapMode.Clamp;
 animation["shootUpperBody"].wrapMode = WrapMode.Clamp;
 
 // Put idle and run in a lower layer. They will only animate if our action animations are not playing
 animation["idle"].layer = -1;
 animation["run"].layer = -1;
 
 animation.Stop();
}


function Update () {
 if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1)
 {
  animation.CrossFade("run");
  animation["run"].speed = Mathf.Sign(Input.GetAxis("Vertical"));
 }
 else
  animation.CrossFade("idle");

 if (Input.GetButtonDown ("Jump"))
 {
  animation.CrossFade("jump", 0.3);
 }
  if (Input.GetButtonDown ("Fire1"))
 {
  if (animation["run"].weight > 0.5)
   animation.CrossFadeQueued("shootUpperBody", 0.3, QueueMode.PlayNow);
  else
   animation.CrossFadeQueued("shoot", 0.3, QueueMode.PlayNow);
 }

 

2016-01-21 10:18:21 andyhebear 阅读数 387

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

官方给出的描述是: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.

在代码中使用时如何开启某个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 UnityEngine;
using System.Collections;

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");

    }
}
没有更多推荐了,返回首页