查看: 1339|回复: 4
打印 上一主题 下一主题

[其他] 四种碰撞检测交互的总结

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-10-18 03:15:21 |只看该作者 |倒序浏览
第一种函数:function OnControllerColliderHit (hit:ControllerColliderHit)  
主角专用函数
例子:function OnControllerColliderHit(hit:ControllerColliderHit)
{
                  if (hit.gameObject.tag=="playerDoor" && doorisopen==false)
   {
                               currentdoor=hit.gameObject;
                                opendoor(hit.gameObject);
    }

}

不足之处:当碰撞物体碰撞模式为:(Is Trigger 触发模式)  时,主角与物体不会发生碰撞,而且会穿过物体。


第二种函数:static function Raycast (origin : Vector3, direction : Vector3, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
  • origin
    The starting point of the ray in world coordinates.
    在世界坐标,射线的起始点。
  • direction
    The direction of the ray.
    射线的方向。
  • distance
    The length of the ray
    射线的长度。
  • hitInfo
    If true is returned, hitInfo will contain more information about where the collider was hit (See Also: RaycastHit).
    如果返回true,hitInfo将包含碰到器碰撞的更多信息。
  • layerMask
    A Layer mask that is used to selectively ignore colliders when casting a ray.
    只选定Layermask层内的碰撞器,其它层内碰撞器忽略。

    此碰撞函数可用于射击游戏里面发射枪弹。

    应用例子:
    RaycastHit info;
    bool hit =Physics.Raycast(枪口的位置 , 摄像机的正前方,  out info  , 100 ,敌人碰撞层)
    {
           if(hit)
                {
                        if(info.transform.Tag.CompareTo("enemy")==0)
                            {

                            }
                        //在射中的地方释放一个粒子效果
                        Instantiate(粒子,info.point, info.transform.rotation);

                }
    }


    第三种函数:function OnTriggerEnter(hit:Collider)


    优点:触发模式碰撞,脚本是运用于碰撞物体上,这样大大减轻了主角身上脚本数量的负担。(强烈推荐)


    注意:不要忘记勾选Is Trigger




    第四种函数function OnCollisionEnter (collisionInfo : Collision)

    相对于OnTriggerEnter,OnCollisionEnter传递的是Collision类而不是Collider。Collision包含接触点,碰撞速度等细节。如果在函数中不使用碰撞信息,省略collisionInfo参数以避免不必要的运算。注意如果碰撞体附加了一个非动力学刚体,只发送碰撞事件。

    也就是说必须要有力才可以发生碰撞。(不推荐使用这种方法)




分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏1 支持支持0 反对反对0
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-10-18 03:52:59 |只看该作者
Good to know !
回复

使用道具 举报

16

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
3
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2014-11-6 19:55:04 |只看该作者
多谢,不错的知识点!
回复

使用道具 举报

100

主题

3

听众

7683

积分

高级设计师

Rank: 6Rank: 6

纳金币
2378
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-11-6 20:53:46 |只看该作者
好强大的资源!
回复

使用道具 举报

0

主题

2

听众

1346

积分

助理设计师

Rank: 4

纳金币
505
精华
0
5#
发表于 2014-11-10 11:28:09 |只看该作者
学习! 谢谢指导
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-4 01:20 , Processed in 0.084705 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部