Unity 物理系统

Unity物理系统

##1、人机交互数据库

++1.1、外部输入设备编程

++++键盘设计模式

++++触屏网络

++++摇杆ide

++++鼠标学习

++1.2Input类简介动画

++++Input类是输入系统的接口,使用这个类可以读取输入管理器设置的按键,以及访问移动设备的多点触控或加速感应数据,能够经过该类来实现外部设备控制游戏场景里面的物体。spa

++++经常使用的输入方式: 键盘输入、鼠标输入.net

++++键盘输入经常使用方法:设计

-- GetKey :按键按下期间返回true

-- GetKeyDown :按键按下的第一帧返回true

-- GetKeyUp :按键松开的第一帧返回true

++++Input类简介

Edit=>Project Settins=>Input=>【输入管理器】


++++虚拟按键

(虚拟按键,与所设置的键盘按键相对应,能够根据实际须要更改相关设置)

-- Horizontal Horizontal):水平虚拟按键。

-- Name :虚拟按键名字,能够经过该名字获得虚拟轴上的值。

-- Descriptive Name

-- Descriptive Negative  

-- Negative Button left):对应按键的左箭头,表明X轴负方向

-- Positive Button right):对应按键的右箭头,表明Y轴正方向

-- Alt Negative Button a):与左箭头功能相同

-- Alt Positive Button d):与右箭头功能相同

-- Gravity 3):抬起按键值恢复为0的时间

-- Dead 0.001):小于此值计为0,用于摇杆

-- Sensitivity 3):按下按键后传递值的大小

-- Snap V):同时按下正负按钮时值为空

-- Invert :表明X轴的正负方向反转

-- Type Key or Mouse Button):应用到何种输入设备

-- Axis X axis):应用到X

-- Joy Num Get Motion from all Joy) :受控制的操做杆数


++1.3、键盘事件

++++大多数Windows窗口程序都经过处理键盘事件来处理键盘输入,经过名称指定的按键检测按键不一样的状态,处理相应的事件。

++++经过名字获得虚拟的值

Static float GetAxis(string axisName)

Float hor = Input.GetAxis(“Horizontal”);

hor接收水平虚拟轴值的变化结果,当按下a键(左箭头)会获得负值(-1~0),d键(右箭头)会获得正值(0~1),能够用此值控制游戏物体的水平移动。


++1.4、鼠标事件

++++例:在“CS”游戏中经过鼠标左键表示射击;鼠标右键表示放大准星,鼠标事件应用很是普遍。

++++鼠标属性和方法

--mousePosition :获得当前鼠标位置

--GetMouseButtonDown :鼠标按键按下的第一帧返回true

--GetMouseButtonUp :鼠标按键松开的第一帧返回true

--GetMouseButton :鼠标按键按下期间一直返回true

--GetAxis(“Mouse X”) :获得一帧内鼠标在水平方向的移动距离

--GetAxis(“Mouse Y”) :获得一帧内鼠标在垂直方向的移动距离

--GetAxis(“Mouse ScrollWheel”) :获取鼠标滚轮的值


##2、碰撞器

++2.1Collider碰撞器组件

++++当咱们在场景中建立基本游戏物体后,引擎会自动的为该物体加上Collider(碰撞器)组件,其主要功能是进行碰撞检测。


++++Collider组件的种类

对于规则的游戏物体可使用引擎提供的碰撞器,对于一些大的场景,其碰撞网格能够由建模师提供。

Search => collider

-- Box Collider

-- Box Collider 2D

-- Capsule Collider

-- Circle Collider 2D

-- Edge Collider 2D

-- Mesh Collider

-- Polygon Collider 2D

-- Sphere Collider

-- Terrain Collider

-- Wheel Collider

-- World Particle Collider

++2.2、碰撞器点击触发事件

++++场景物体的鼠标事件

--OnMouseDown :鼠标在Collider之上,按下鼠标,该事件即被触发

--OnMouseDrag :鼠标在Collider之上,当鼠标拖动时触发

--OnMouseEnter :移动鼠标进入Collider区域的时候,该事件被触发

--OnMouseExit :移动鼠标移出Collider区域的时候,该事件被触发

--OnMouseOver :鼠标处于Collider之上时,每帧都会调用该事件

--OnMouseUp :当鼠标弹起的时候,该事件被触发调用

--OnMouseUpAsButton :当鼠标在同一个Collider上按下又弹起的状况下会触发调用该事件

++++场景物体的鼠标事件

OnMouseEnter  =>  OnMouseOver  =>  OnMouseExit

               OnMouseUpAsButton

               OnMouseDown

               OnMouseUp

               OnMouseDrag


##3、刚体组件

++3.1、物理引擎介绍

++++在游戏中使用物理引擎能够真实的模拟出现实世界中的一些物理效果,例如重力,摩擦力,碰撞等,在Unity中使用的是PhysX物理引擎,该引擎能够在3D世界中模拟须要的效果,它渲染的游戏画面很是的逼真,能够给玩家身临其境的感受。

++++Unity中要使一个物体受物理引擎的控制,主要是经过刚体组件来实现的。

++++刚体的做用:

刚体可以受到力做用,逼真的展现物体运动效果。

--1、重力:自由落体

--2、副作用力: 例如,与其它物体碰撞

--3、阻力: 受到阻力会慢慢中止运动

--4、外加力: 能够给物体施加一个外力

++3.2、刚体组件的使用

++++Rigidbody

--Mass 1):质量,值越大重量越大

--Drag 0):运动过程当中受的阻力

--Angular Drag 0.05):旋转时受到的阻力

--Use Gravity V):是否使用重力

--Is Kinematic

--Interpolate

--Collision Detection

--Constraints(约束,例如勾选Y时,Y方向不能够移动/旋转)

  ---Freeze Position  (冻结位置):X   Y   Z

  ---Freeze Rotation  (冻结旋转):X   Y   Z


++++刚体组件的使用

Interpolate: 插值:当你发现刚体运动时抖动,能够尝试设置这个选项。)

Collision Detection: 碰撞检测: 主要用于避免高速物体穿过其余物体,却未触发碰撞的状况。)

--Interpolate

  ---None(不该用插值)

  ---Interpolate(内插值,基于上一帧的变换来平滑帧变换)

  ---Extrapolate(外插值,基于下一帧的预估变换来平滑帧变换)

--Collision Detection

  ---Discrete(不连续碰撞检测,适用于普通模式,这也是默认模式)

  ---Continuous(连续碰撞检测,通常用于高速运动物体碰撞的物体)

  ---Continuous Dynamic(动态连续碰撞检测,适用于高速物体)


++++注意事项

--对同一个物体,要么经过刚体操纵,要么经过变换操纵,不要同时使用刚体和变换来操纵。由于给刚体施加力和力矩,也会改变物体变换组件的位置和旋转角度,同时使用两种方式会致使旋转和其它计算出现问题。

--若是须要直接操纵物体变换,同时又想拥有刚体特性,那么须要你选择运动学。

++3.3、刚体组件经常使用属性和方法

++++刚体组件经常使用属性:

--velocity :刚体的速度

--angularVelocity :刚体的角速度

--drag :物体的阻力

--angularDrag :物体的角阻力

--mass :刚体的质量

--useGravity :是否受重力影响

--isKinematic :是否使用动力学

--freezeRatation :是否冻结旋转

--collisionDetectionMode :碰撞检测模式

--position :刚体位置

--rotation :刚体旋转

++++刚体组件经常使用方法:

--AddForce :给刚体添加一个力

--AddExplosionForce :给刚体添加一个力,模拟爆炸效果

--AddForceAtPosition :在指定的位置添加一个力

--AddRelativeForce :添加相对力

--AddRelativeTorque :添加相对力矩

--MovePosition :使用刚体移动物体到指定位置


##四、碰撞事件

++4.一、碰撞检测分类:

++++静态碰撞器Static Collider: 只有碰撞器没有刚体的物体;

--现象:保持静止或者轻微移动,如:平面、树木

++++刚体碰撞器Rigidbody Collider:具备刚体和碰撞器的物体;

--现象:彻底受物理引擎影响

++++运动学刚体碰撞器:带刚体,且勾选Is Kinematic,此碰撞器不能添加力,只能经过transform移动。

++4.二、注意事项:

++++碰撞发生的条件:

--1、发生碰撞的两个物体都必须带有Collider

--2、发生碰撞的两个物体至少有一个带有刚体

--3、发生碰撞的两个物体必须有相对运动

++4.三、碰撞器的回调方法

++++onCollisionEnter(Collision other) :碰撞开始一瞬间被调用

++++onCollisionStay(Collision other) :一直保持碰撞状态时被调用

++++onCollisionExit(Collision other) :碰撞分离的一瞬间被调用


##五、触发事件

++5.一、触发事件

++++物体的空间检测

++++触发器

--触发器事件执行的条件:两个物体上都要带碰撞器,至少带有一个刚体,而且两物体至少有一个把触发器打开。


++++触发器的回调方法

--OnTriggerEnter(Collider other) :进入触发器的时候调用一次

--OnTriggerStay(Collider other) :处于某个触发器之中的时候持续调用

--OnTriggerExit(Collider other) :退出触发器的时候调用一次

++++场景物体的Trigger事件


++++Trigger事件的语法

--脚本挂载的碰撞体

  ---void OnTriggerEnter(Collider other){ ... }

  ---void OnTriggerExit(Collider other){ ... }

  ---void OnTriggerStay(Collider other){ ... }

--事件传入参数(Collider

--进入的碰撞体(Collider

  ---attached

  ---bounds

  ---enabled

  ---isTrigger

  ---material

  ---sharedMaterial


##六、物理材质

++6.一、物理材质的建立

++++Project窗口中点击右键【Create=>Physic Material】建立物理材质。

++++物理材质用于调整摩擦力和反弹力。


++6.二、物理材质属性设置(MyPhysicMaterial

++++Dynamic Friction (0.6):动态摩擦系数,范围0~1,用于调整该物体的动态摩擦力。

++++Static Friction (0.6):静态摩擦系数,范围0~1,用于调整该物体的静态摩擦力。

++++Bounciness (0):反弹系数,范围0~1,用于调整该物体的反弹力。

++++Friction Combine :组合摩擦力,用于调整摩擦力取值。

--Average :两个摩擦力的平均值;

--Mininum :两个摩擦力中最小的值;

--Multiply :两个摩擦力相乘的值;

--Maxinum :两个摩擦力中最大的值;

++++BounceCombine :组合弹力,用于调整弹力取值。


++6.三、物理材质的使用


##七、射线

++7.一、射线碰撞简介

++++Unity提供了射线机制: 经过虚拟射线检测所碰撞到的物体。

++7.二、射线的建立

++++建立射线: Rayray = new Ray();

--origin :射线发射的原点

--direction :射线发射的方向

++7.三、射线碰撞的应用

++++使用Physics类方法Raycast方法实现射线碰撞检测功能。

bool Raycast(Rayray,out RaycastHithitInfo);

  --ray :要发射的射线

  --hitInfo :碰撞信息

++++从主摄像机到鼠标点击位置建立一条射线;

    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);





#立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/

++立钻哥哥推荐的拓展学习连接(Link_Url

++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/

++++Unity引擎基础http://www.noobyard.com/article/p-ggcuedyq-ka.html

++++Unity面向组件开发http://www.noobyard.com/article/p-eiunlkzw-dt.html

++++Unity物理系统http://www.noobyard.com/article/p-mcqnwufb-kd.html

++++Unity2D平台开发http://www.noobyard.com/article/p-brjbvtac-hs.html

++++UGUI基础http://www.noobyard.com/article/p-nvzrvath-mc.html

++++UGUI进阶http://www.noobyard.com/article/p-tpspjolu-gt.html

++++UGUI综合http://www.noobyard.com/article/p-nfgrebqx-gg.html

++++Unity动画系统基础http://www.noobyard.com/article/p-otjpnbzz-dq.html

++++Unity动画系统进阶http://www.noobyard.com/article/p-hxghrtgb-bp.html

++++Navigation导航系统http://www.noobyard.com/article/p-skpvrobt-t.html

++++Unity特效渲染http://www.noobyard.com/article/p-sudpqrhk-bp.html

++++Unity数据存储http://www.noobyard.com/article/p-ybvcceul-m.html

++++Unity中Sqlite数据库http://www.noobyard.com/article/p-vxpuqxev-ca.html

++++WWW类和协程http://www.noobyard.com/article/p-alggjlwu-cy.html

++++Unity网络http://www.noobyard.com/article/p-bjvfgzwg-dw.html

++++C#事件http://www.noobyard.com/article/p-dietpjzv-gm.html

++++C#委托http://www.noobyard.com/article/p-oiohmxtc-gh.html

++++C#集合http://www.noobyard.com/article/p-vdfpislb-ex.html

++++C#泛型http://www.noobyard.com/article/p-vujvnprk-ee.html

++++C#接口http://www.noobyard.com/article/p-emexlwmu-dm.html

++++C#静态类https://blog.csdn.net/vrunsoftyanlz/article/details/78630979

++++C#中System.String类http://www.noobyard.com/article/p-uchiaxzw-cq.html

++++C#数据类型http://www.noobyard.com/article/p-kqtbvoyq-ba.html

++++Unity3D默认的快捷键http://www.noobyard.com/article/p-gbllyjbs-s.html

++++游戏相关缩写http://www.noobyard.com/article/p-pzpxsztf-gm.html

++++设计模式简单整理http://www.noobyard.com/article/p-scmbzocc-hg.html

++++U3D小项目参考https://blog.csdn.net/vrunsoftyanlz/article/details/80141811

++++UML类图http://www.noobyard.com/article/p-aakurcwi-bm.html

++++Unity知识点0001http://www.noobyard.com/article/p-bqmetnys-ep.html

++++U3D_Shader编程(第一篇:快速入门篇)http://www.noobyard.com/article/p-ptwlpwbc-gz.html

++++U3D_Shader编程(第二篇:基础夯实篇)http://www.noobyard.com/article/p-dadqpvvp-hv.html

++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/


--_--VRunSoft : lovezuanzuan--_--