首页 > 游戏开发 > Unity3d Physics 类[转载]

Unity3d Physics 类[转载]

2010年11月9日 发表评论 阅读评论

Physics.RaycastAll

static function RaycastAll (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : RaycastHit[]
static function RaycastAll (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layermask : int = kDefaultRaycastLayers) : RaycastHit[]
函数描述
发射一条穿过整个场景的射线,返回他所有碰到的物体

参数理解:

ray : Ray       结构体,包含射线的源(origin : Vector3),和目标(direction : Vector3),即

用来表示射线投射点和方向

distance : float       浮点变量 射线长度

layerMask : int       层遮罩或深度,个人理解,这个参数决定射线能碰到物体的最大个数,很有用,大场景时,你不希望返回所有的物体吧,会增加系统开销

———————————–

static function Raycast (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
参数
名称                       描述
ray                         同上
distance                同上
layerMask              同上

返回
在射线范围内只要有 collider对象就返回true

———————————–
static function Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
参数
名字                      描述
ray                         同上
distance                同上
hitInfo rayhit          输出信息,这里指定一个 RaycastHit 变量 保存撞击信息
layerMask              同上

返回
撞击任何Collider对象返回true
———————————–
Physics.OverlapSphere
static function OverlapSphere (position : Vector3, radius : float, layerMask : int = kAllLayers) : Collider[]
参数
名字                        描述
position                  位置信息
radius                      以‘位置信息’为中心,以radius为半径的的一个范围
layerMask              同上

描述
返回一个Collider类型数组,保存radius内,layerMask深度内的Collider对象

   //被击中的collder变为半透明  
   var hits : RaycastHit[];       //定义一个RaycastHit数组           
   hits = Physics.RaycastAll (Camera.main.transform.position,   Camera.main.transform.forward,50);     //主相机的方向发射一条长50的射线,射线碰到的物体保存在数组hits中  
   Debug.DrawRay (Camera.main.transform.position, Camera.main.transform.forward *10, Color.green);  
//这个是调试中才看的到了,吧这条射线画出来  
   var hit : RaycastHit = hits[0];    //取碰到的第一个RaycastHit  
   var renderer = hit.collider.renderer;  
   if (renderer)  
   {  
    renderer.material.shader = Shader.Find("Transparent/Diffuse");  
    if (renderer.material.color.a !=0.3)  
    {  
     renderer.material.color.a = 0.3;  
    }  
    else  
    {  
     renderer.material.color.a = 1;  
    }  
   }
分类: 游戏开发 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.