unity 游戏场景中各类物体碰撞使用技巧

3D游戏场景中很多碰撞对象需要处理,总体分为,一墙壁、树木、岩石等环境静态类,二人物角色、本地操作玩家、NPC、AI等脚本控制移动类,三子弹、技能球、技能碰撞物等速度快的物体。这三类的碰撞分析大概为,第一种只需要加collider组件,不要加rigidbody,因为这两个组合实现只有碰撞,没有碰撞效果,如位移、旋转等,没有刚体rigidbody,就不会有碰撞效果,就好像人只是棉花做的,不会有任务碰撞效果,所以最适合做这种静态障碍物。第二种角色(通常不会产生碰撞或者被碰撞效果的物体)类,运用character controller组件,这个组件内含胶体碰撞器,可以检测到碰撞,刚体分为静态动态两种,也有内置。所以只要这一个组件就行,不要再添加collider和rigidbody,可以实现碰撞,但是不会有位移旋转等效果,比较适合角色类,因为是脚本操作移动,并且比较节约资源。他的碰撞检测函数为 void OnControllerColliderHit(ControllerColliderHit hit),不是传统的OnCollisionEnter这一类。第三种高速类物体的碰撞最后用raycast检测碰撞,
Ray myRay = new Ray(transform.position, (transform.position + transform.forward * 3));

RaycastHit hit;   //创建RaycastHit型变量,用于存放射线碰撞信息

//发设一条射线,myRay距离3长,碰撞到的物体信息存放在hit中,放在下面进行判断。

if (Physics.Raycast(myRay,out hit,3))   
{
    if (hit.collider.gameObject.tag=="tagDoor")
    {
        GameObject.Find("outPost").GetComponent<Animation>().Play("dd");
    }
}
发布了49 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_23158477/article/details/105114367
今日推荐