U3d之物理引擎(下)
2018-01-27 15:11
218 查看
如果对你有帮助,请做一棵蒲公英,让知识随风飘荡留在人的心里。
1. 触发事件
要想判断一个角色是否在某个空间区域,除了直接计算Transform组件的position值外,还可以怎么做呢?
我们可以把对象身上的XXX Collider触发器上勾选Is Trigger选项!
触发器事件执行的条件:两个物体上都要带碰撞器,至少带有一个刚体,并且两物体至少有一个把触发器打开。
触发器有哪些回调方法呢?
OnTriggerEnter(Collision other)代表进入触发器的时候调用一次
OnTriggerStay(Collision other)代表停留在触发器的时候持续调用
OnTriggerExit(Collision other)代表离开触发器的时候调用一次
作为回调方法的参数 other对象则是进入碰撞体的一方。
2. 物理材质
在Project窗口中点击右键Create->Physic Material创建物理材质
Dynamic Friction为动态摩擦力系数,范围0-1之间。
Static Friction为静态摩擦力系数,范围同上。
Bounciness反弹系数,范围同样是0-1.(这里有个有趣的现象,估计牛顿老人家的棺材板要压不住了呢,如果你在场景中创建一个物体,把它的反弹系数最大化,然后添加刚体使用重力,提起一个高度让它自然下落到一个同样有反弹系数最大的平面上,你会发现它不仅会像永动机一样跳动,还会越来越高,直至突破天际,大家想想这是为什么呢?)
当我们设置好了物理材质后,我们可以把做好的物理材质拖到Collider上的Material上使用,是不是很简单很方便呢?
3. 射线
我们再来思考一个问题,如何实现物体的移动到鼠标点击的位置呢?
这里我们来说说Unity提供的射线机制:通过虚拟射线检测所碰撞的物体(这个射线是看不到的,但是可以调试出结果)
Ray作为射线类,可以直接创建一条射线Ran ran = new Ray();
我们来看看他的两个属性,origin与direction,前者是发射的原点,后者则是发射的方向。
使用物理类Physics的Raycast方法可以实现射线碰撞检测功能
Physics.Raycast(Ray ray,out RaycastHit hit);其中的一种重载形式
返回值是bool值,所以我们可以判断是否射到了某些物体或图层
这里要来讲解一些物理引擎上篇的一个小问题
我们鼠标点击的点在U3D的世界里是三维的,那么我们的电脑屏幕是二维的,如何告诉电脑我们所点击坐标的Z轴呢?这里我们可以先手动实现一下,再看引擎给我们提供的方法。
Vector3 pos = input.MousePosition;
pos = new Vector3(pos.x,pos.y,Camera.main.transform.position.z);
pos = Camear.main.ScreenToWorldPoint(pos);
但是我们如果每次都这样写岂不是很麻烦?那我们来看看系统的方法
Ray ray = Camera.main.ScreenPointToRay(input.mousePosition);一句话搞定,但是效果是一样的,大家可以理解下原理。
1. 触发事件
要想判断一个角色是否在某个空间区域,除了直接计算Transform组件的position值外,还可以怎么做呢?
我们可以把对象身上的XXX Collider触发器上勾选Is Trigger选项!
触发器事件执行的条件:两个物体上都要带碰撞器,至少带有一个刚体,并且两物体至少有一个把触发器打开。
触发器有哪些回调方法呢?
OnTriggerEnter(Collision other)代表进入触发器的时候调用一次
OnTriggerStay(Collision other)代表停留在触发器的时候持续调用
OnTriggerExit(Collision other)代表离开触发器的时候调用一次
作为回调方法的参数 other对象则是进入碰撞体的一方。
2. 物理材质
在Project窗口中点击右键Create->Physic Material创建物理材质
Dynamic Friction为动态摩擦力系数,范围0-1之间。
Static Friction为静态摩擦力系数,范围同上。
Bounciness反弹系数,范围同样是0-1.(这里有个有趣的现象,估计牛顿老人家的棺材板要压不住了呢,如果你在场景中创建一个物体,把它的反弹系数最大化,然后添加刚体使用重力,提起一个高度让它自然下落到一个同样有反弹系数最大的平面上,你会发现它不仅会像永动机一样跳动,还会越来越高,直至突破天际,大家想想这是为什么呢?)
当我们设置好了物理材质后,我们可以把做好的物理材质拖到Collider上的Material上使用,是不是很简单很方便呢?
3. 射线
我们再来思考一个问题,如何实现物体的移动到鼠标点击的位置呢?
这里我们来说说Unity提供的射线机制:通过虚拟射线检测所碰撞的物体(这个射线是看不到的,但是可以调试出结果)
Ray作为射线类,可以直接创建一条射线Ran ran = new Ray();
我们来看看他的两个属性,origin与direction,前者是发射的原点,后者则是发射的方向。
使用物理类Physics的Raycast方法可以实现射线碰撞检测功能
Physics.Raycast(Ray ray,out RaycastHit hit);其中的一种重载形式
返回值是bool值,所以我们可以判断是否射到了某些物体或图层
这里要来讲解一些物理引擎上篇的一个小问题
我们鼠标点击的点在U3D的世界里是三维的,那么我们的电脑屏幕是二维的,如何告诉电脑我们所点击坐标的Z轴呢?这里我们可以先手动实现一下,再看引擎给我们提供的方法。
Vector3 pos = input.MousePosition;
pos = new Vector3(pos.x,pos.y,Camera.main.transform.position.z);
pos = Camear.main.ScreenToWorldPoint(pos);
但是我们如果每次都这样写岂不是很麻烦?那我们来看看系统的方法
Ray ray = Camera.main.ScreenPointToRay(input.mousePosition);一句话搞定,但是效果是一样的,大家可以理解下原理。
相关文章推荐
- U3d之物理引擎(上)
- Unity3D游戏开发初探—3.初步了解U3D物理引擎
- flash与物理引擎:HelloWorld
- Jbox2D学习(1)---物理引擎的下载与导入
- Box2d,物理引擎
- Cocos2d-x 3.1.1 学习日志13--物理引擎登峰造极之路
- APE物理引擎与Box2D物理引擎对比(初学)
- EVP5 Unity5 汽车物理引擎demo分析
- Cocos2d Box2d 物理引擎实现愤怒的小鸟
- Cocos2d-x学习笔记(十五)-------->物理引擎
- 游戏引擎物理碰撞(非正碰)
- 当前流行的几个AS3物理引擎
- ODE物理引擎使用
- Cocos2d-x 3.X 物理引擎登峰造极之路
- flash物理引擎应用:你的第一个Fisix应用程序
- 基于JBox2d物理引擎和canvas的游戏开发实例
- ## Cocos2d-x 3.x中自带物理引擎使用教程 ##
- PhysX物理引擎(入门教程)
- 物理引擎一
- ROS_Kinetic_07 ROS中机器人三维物理引擎高保真仿真利器gazebo 7.0