##1、人机交互
++1.1、外部输入设备
++++键盘
++++触屏
++++摇杆
++++鼠标
++1.2、Input类简介
++++Input类是输入系统的接口,使用这个类能够读取输入管理器设置的按键,以及访问移动设备的多点触控或加速感应数据,可以通过该类来实现外部设备控制游戏场景里面的物体。
++++常用的输入方式: 键盘输入、鼠标输入
++++键盘输入常用方法:
-- 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.1、Collider碰撞器组件
++++当我们在场景中创建基本游戏物体后,引擎会自动的为该物体加上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、碰撞事件
++4.1、碰撞检测分类:
++++静态碰撞器Static Collider: 只有碰撞器没有刚体的物体;
--现象:保持静止或者轻微移动,如:平面、树木
++++刚体碰撞器Rigidbody Collider:具有刚体和碰撞器的物体;
--现象:完全受物理引擎影响
++++运动学刚体碰撞器:带刚体,且勾选Is Kinematic,此碰撞器不能添加力,只能通过transform移动。
++4.2、注意事项:
++++碰撞发生的条件:
--1、发生碰撞的两个物体都必须带有Collider
--2、发生碰撞的两个物体至少有一个带有刚体
--3、发生碰撞的两个物体必须有相对运动
++4.3、碰撞器的回调方法
++++onCollisionEnter(Collision other) :碰撞开始一瞬间被调用
++++onCollisionStay(Collision other) :一直保持碰撞状态时被调用
++++onCollisionExit(Collision other) :碰撞分离的一瞬间被调用
##5、触发事件
++5.1、触发事件
++++物体的空间检测
++++触发器
--触发器事件执行的条件:两个物体上都要带碰撞器,至少带有一个刚体,并且两物体至少有一个把触发器打开。
++++触发器的回调方法
--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、物理材质
++6.1、物理材质的创建
++++在Project窗口中点击右键【Create】=>【Physic Material】创建物理材质。
++++物理材质用于调整摩擦力和反弹力。
++6.2、物理材质属性设置(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.3、物理材质的使用
##7、射线
++7.1、射线碰撞简介
++++Unity提供了射线机制: 通过虚拟射线检测所碰撞到的物体。
++7.2、射线的创建
++++创建射线: Rayray = new Ray();
--origin :射线发射的原点
--direction :射线发射的方向
++7.3、射线碰撞的应用
++++使用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引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft : lovezuanzuan--_--