Unity物理系统

##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知识点0001https://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--_--

Unity 物理系统相关推荐

  1. Unity 物理系统 -- 碰撞体简介(碰撞、触发条件)

    Unity 物理系统 -- 碰撞体简介(碰撞.触发条件) 几个常用的碰撞体: Box Collider:盒碰撞体,盒碰撞体是一个立方体外形的基本碰撞体,该碰撞体可以调整为不同大小的长方体,可用作门.墙 ...

  2. Unity物理系统中碰撞体、刚体、isKinematic、isTrigger的关系(附动画演示)

    Unity物理系统中碰撞体.刚体.isKinematic.isTrigger的关系 写在前面 产生碰撞的条件 产生触发的条件 实验一:蓝块(碰撞体).红块(碰撞体) 实验二:蓝块(碰撞体).红块(碰撞 ...

  3. unity 计时器_如何用unity 物理系统 实现Stickfight中火柴人的布娃娃效果(二)

    上一期中,我们完成了角色在没有任何输入的情况下实现了站立平衡,这期,我们就来聊一下角色的运动吧. 玄夜smile:如何用unity 物理系统 实现Stickfight中火柴人的布娃娃效果(一) ,还没 ...

  4. Unity 物理系统:Rigidbody(刚体)

    Rigidbody组件    属性 释义 说明 Mass 质量 刚体的质量. Drag 阻力 影响位置运动的阻力系数. Angular Drag 角阻力 影响旋转运动的阻力系数. Use Gravit ...

  5. Unity 物理系统 -- 刚体简介

    刚体(RigidBody) 在Unity理引擎中,使用刚体(RigidBody)来模拟这种物理效果,当一个游戏对象被赋予刚体组件之后,游戏引擎就会对其进行物理效果的计算和模拟.同时我们也可以给这个对象 ...

  6. Unity物理系统-物理材质-Collider碰撞体的弹力不够大如何处理

    物理材质Physic Material: 当碰撞器发生碰撞的时候,具有该材质的游戏物体就会具有该材质的属性: Step1:在Project窗口下新建Physic Material(命名为mat),并更 ...

  7. 【unity物理系统】人物乳摇的实现

    首先找到人物胸部的顶点骨骼位置,拷贝一下 如图所示 然后在原物体上挂栽如下脚本 using System.Collections; using System.Collections.Generic; ...

  8. unity学习之物理系统

    物理系统分为8个大块: 接合体(Articulation Body) 通过接合体可以使用分层组织的游戏对象构建物理接合,例如机器人手臂或运动链. 碰撞体 盒型碰撞体 (Box Collider)  一 ...

  9. 2022-05-01 Unity核心3——2D物理系统

    文章目录 一.刚体 Rigid Body 2D 二.碰撞器 Collider 2D 三.物理材质 Material 2D 四.恒定力 Constant Force 2D 五.2D 效应器 Effect ...

最新文章

  1. 5g局域网传输速度_这个路由太牛了吧?,三步搭建局域网,接上U盘就是NAS
  2. LeetCode 455. 分发饼干(贪心)
  3. 网络(11)-什么是RestFul风格?
  4. Spring MVC的转发与重定向
  5. 冰汽朋克侦查机器人_冰汽时代生病机制是什么 寒霜朋克所有机制漏洞一览
  6. js布尔类型+数字判断_C ++中的布尔数据类型
  7. ZK 数据传输三:在页面使用SpringUtil获取spring层类再获取数据(jsp页面或zul页面)...
  8. GBK字符串转Unicode字符串
  9. 小白攻略(三):数学建模论文的写作
  10. 中国科学院研制的开放式超导磁共振成像磁体系统
  11. semilogx 多条曲线_如何在excel中绘制多条曲线
  12. Linux架设Jsp环境
  13. 手机平板功放芯片BCT8933,PINtoPIN替换AW8733
  14. 元宇宙区块链卡牌游戏Defina Finance上线|详解
  15. 扩展jQuery读书笔记:第一章,jQuery扩展
  16. 亮剑java web_为什么《亮剑Java Web 项目开发案例导航》第二个项目运行不了?
  17. 点击屏幕其他地方让edittext失去焦点 的实现
  18. python暴力破解excel_使用 Python 读写 Excel 文件(一)
  19. 企业微信生态下的会员管理系统
  20. 怎么在Win7系统中开启Wifi热点

热门文章

  1. java计算机毕业设计无人驾驶汽车管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  2. windows7是计算机硬件吗,Windows7硬件最低配置要求介绍
  3. Python 笔记第二部分:容器和编码
  4. 一张图掌握10个表格和工具让你轻松做好项目管理
  5. jQuery入门第十章(视频音频)
  6. ASCII码表【美国信息交换标准代码】
  7. Java + OpenCV 模板匹配
  8. 包围盒算法基本知识(一)
  9. 石油远程《机械制图》在线考试
  10. 华为USG系列防火墙配置-带宽管理