Unity入门&物理引擎
一.Unity六大模块
首先,Unity界面有六大模块,分别是:Hierarchy,Scene,Game,Inspector,Project,Console。下面对这六个视图的功能进行详解。
1.Hierarchy:层级视图
功能:显示当前场景或多个场景内的所有游戏对象,并表达对象之间的层级关系。
2.Scene:场景视图
功能:显示当前场景的所有游戏对象,并显示场景及游戏对象的基本操作
场景操作:Q(场景移动)、Alt+鼠标左键(场景旋转)、2D/3D、鼠标滚轮(拉近拉远场景)、鼠标右键+WASD(场景漫游)
对象操作:W(对象拖动)、E(对象旋转)、R(对象缩放)、T(2D宽高设置)、F(聚焦游戏对象到屏幕中央)、Z(设置中心点:pivot(模型原型中心点)、Center(Unity计算的中心点))、X(设置游戏对象方位:Local(自身的上下左右前后)、Global(世界的上下左右前后))、Ctrl+Shift+F(设置当前选中的游戏对象到观察位置,不仅仅应用于摄像机)
3.Game:游戏视图
功能:显示最终玩家看到的游戏画面
Gizmos:在Game视图显示辅助线及图标
4.Inspector:监视器面板
功能:监视游戏对象、文件、工程设置
监视游戏对象属性:游戏对象图标、激活状态、名称、静态、标签、层、组件
5.Project:工程界面
功能:显示当前工程的Assets文件夹,掌握搜索功能
6.Console:控制台面板
功能:显示提示信息、警告信息、错误信息
二.Unity脚本
1.Unity工程架构
Assets:存储工程所需的所有资源文件
Library:工程所需要的所有资源库(类库)(自动生成)
ProjectSetting:工程设置文件(可移植)
Temp:临时文件
2.Unity开发框架
项目-->场景-->对象-->组件-->属性
3.Unity脚本支持的语言
C#、JS
4.Unity脚本生命周期(9个回调函数)
Awake():游戏开始时最先执行,不受组件可用性的影响,用于游戏对象的初始化
OnEnable():脚本组件可用时执行一次
Start():在OnEnable之后执行一次,受组件可用性的影响,用于更新游戏场景和状态
FixedUpdate():每个一定时间间隔执行一次,通常用于物理状态更新
Update():每帧执行一次
LateUpdate():在Update之后执行,每帧调用一次,用于更新游戏场景和状态,和相机有关的更新一般放在这里
OnGui():每帧执行两次(接近两次),渲染LegencyGui(旧版UI)
OnDisable():脚本不可用时执行一次
OnDestroy():脚本组件被销毁时执行一次
5.调试方式
打印:Debug.Log()
print() 脚本必须继承MonoBehaviour
划线:DrawLine(Vector3 start,Vector3 end);
DrawRay(Vector3 start,Vector3 dir);
三.常用类
1.GameObject
属性:transform、name、tag、layer、activeSelf
方法:
成员方法:SetActive、GetComponent(这一系列)、CompareTag
静态方法:Find、FindWithTag、FindGameObjectsWithTag、CreatePrimitive(创建一个基础对象(Cube、Sphere等))
2.Transform
功能:控制游戏对象的变换
维持父子关系
属性:
控制游戏对象的变换:
position(相对于世界原点,给组件的某个属性赋一个具体的值)、localPosition(相对于父物体)
enlerAngles(相对于世界坐标,旋转顺序为先X,后Y,最后为Z,给组件添加一个具体的值)、localEulerAngles(表示一个物体旋转的角度)
rotation、localRotation、localScale、forward、up、right
维持父子关系:parent、root(根对象)、childCount(子对象个数)
方法:
控制游戏对象的变换:
Translate(移动,在现有值的基础上加一个新值)、
Rotate(Vector3 vec)(当前物体沿着vec的方向和角度进行旋转:自转,在现有值的基础之上去旋转)
RotateAround(一点,一个轴,旋转的角度)(公转)
LookAt(将当前游戏对象的Z轴正方形指向某个位置)
维持父子关系:SetParent、GetChild、Find
Find:在子对象中通过名称查找一个Transform,特点:可以找到非激活的对象
3.Vector3(结构体)
成员方法:normalized 当前向量的标准化向量(归一化)
magnitude 向量的模
sqrMagnitude 模的平方 (比较两个向量的长度的时候使用)
静态方法:forward 世界的前方
up 世界的上方
right 世界的右方
Angle(Vector3,Vector3) 求两个向量的夹角 float类型
Distance(Vector3,Vector3) 求两个点的距离 float类型
Lerp 插值
Cross(temp0,temp1) 求两个向量的叉乘 法向量(左手法则:temp0穿过掌心,剩下的一个手指指向temp1,大拇指的方向为叉乘的方向)
Dot(Vector3,Vector3) 求两个向量的点乘
Project(Vector3,Vector3.dir) 求一个向量在一个方向上的投影向量
Normalize() 求单位向量
4.Quaternion(四元数)(结构体)
功能:表示一个旋转(解决万像锁问题)
LookRotation 将一个向量转成四元数(以Up轴为参照)
Lerp 插值
Euler(float x, float y, float z);(静态) 将欧拉角转成四元数
identity 空旋转
5.Mathf
Lerp:线性插值函数
Clamp(需要判断的数字,范围的下限,范围的上限):求限定值
Mathf.Deg2Rad;角度转弧度
Abs
Sin()、Cos()、Tan()、Asin()、Acos()、Atan()、Atan2()、PI
6.Time
deltaTime(从这一帧到下一帧的时间间隔)
fixedDeltaTime
time(从游戏开始到现在所经历的时间)
timeScale (时间缩放)游戏时间:现实时间
4.Collider(组件)
如果两个物体想发生碰撞,需要具备的条件:
--至少有一个物体需要有刚体组件
--两个物体都需要有碰撞盒子
--两物体有相对运动
1.属性:isTrigger、Center、Size
2.与鼠标的碰撞(7个回调函数)
OnMouseEnter 当鼠标进入碰撞体范围执行一次
OnMouseOver 鼠标在碰撞体范围内持续调用,每帧一次
OnMouseExit 当鼠标离开碰撞体范围执行一次
OnMouseDown 当鼠标在碰撞体范围内按下,执行一次
OnMouseDrag 当鼠标在碰撞体的范围内持续按下,鼠标保持移动持续执行,每帧一次
OnMouseUp 当鼠标在碰撞体范围内按下,抬起时执行一次
OnMouseUpAsButton 当鼠标在碰撞体范围内按下并抬起执行一次
3.碰撞体之间的碰撞(回调)
条件:两个必须都有碰撞体,其中至少一个有刚体,保持相对运动
OnCollisionEnter(Collision other) 开始碰撞时执行
OnCollisionStay(Collision other) 碰撞中保持相对运动时调用
OnCossionExit(Collision other) 碰撞结束时调用
4.触发
条件:两个物体都有碰撞组件,其中一个是触发器,至少有一个刚体
OnTriggerEnter(Collider other) 进入触发器时调用
OnTriggerStay(Collider other) 持续在触发器范围内调用
OnTruggerExit(Collider other) 离开触发器范围时调用
5.刚体(RigiBody)
1.属性:velocity 速度(向量)
2.方法:
AddForce(Vector3.forward*100):给物体添加一个位移的力
AddRelativeForce(Vector3.forward*100):给物体添加一个力,相对于自身坐标
AddTorque(Vector3.forward*100):给物体添加一个力矩,相对于世界坐标,给一个物体旋转的力
AddRelativeTorque(Vector3.forward*100):给物体添加一个力矩,相对于自身坐标
AddExplosionForce (力的大小,爆炸中心点,爆炸半径)特点:写在哪个刚体上,哪个刚体收到爆炸影响
3.组件属性
Mass、Drag、AngleDrag、useGrivaty、isKinematic、插值、碰撞检测、约束
6.物理射线
halfExtents:保留半径,从发射点开始,到保留半径范围内的物体不会被射线射到
射线是不会穿越物体的,只有具有碰撞体的物体才可以接收射线
Ray r = Camera.main.ScreenToRay(Input.mousePosition):从鼠标在屏幕的位置发射的一条射线,方向为摄像机到鼠标位置
RaycastHit hit;用来描述射线射到的物体
Physics.Raycast 检测一个
Physics.RaycastAll 检测多个
7.导航代理(NavMeshAgent)
Radius:半径 Height:高度 BaseOffset:偏移
speed:速度 AngularSpeed:角速度 Acceleration:加速度
StoppingDistance:停止距离(距离点的位置)
AutoBraking:自动减速到停止
Quality:躲避障碍物的质量
Priority:优先级(数大的优先级高)
AutoTraverseOffMeshLine:自动网格链接
AutoRepath:自动重新寻路(知道到达目的地)
AreaMask:代理人支持通过哪些导航区域
private NavMeshAgent nav;
private NavMeshPath path = new NavMeshPath();
//这个组件的普通方法,通过目标的位置,通过导航的方式判断能否到达目标位置如果能到达,返回一个NavMeshPath的对象path,里面存储着导航路径
//path有两个属性:1.status:返回的是NavMeshPath对象 2.corners:返回的是一个Vector3数组,所有拐点的坐标
nav.CalculatePath(Vector3 targetPosition,NavMeshPath path)
这里面设置的是路径的信息
AgentRadius:根据导航代理半径烘焙场景中的障碍物
AgentHeight:根据导航代理高度烘焙场景中的障碍物
MaxSlope:被烘焙的物体爬坡最高角度
StepHeight:能够被烘焙的台阶的高度
DropHeight:掉落高度
JumpDistance:跳跃距离
导航代理的动态障碍物组件(障碍物下面依然有路径)
Carve:重新动态烘焙(即时的烘焙,耗性能)
MoveThreshold:烘焙距离(障碍物移动到达烘焙距离后才会重新烘焙)
TimeToStationary:当障碍物静止多长时间后开始烘焙
CanveOnlyStationary:只有在静止的时候开始烘焙
NavagationStatic:静态导航
GenerateOffMeshLink:网格连接(可以用来做跳跃)
NavigationArea:当前障碍物属于哪个区域
Name:区域名字
Cost:花费
在导航的过程中,会自动寻找花费最小的路径
Unity入门&物理引擎的更多相关文章
- 关于Unity中物理引擎的使用
物理引擎控制刚体,刚体上面贴上图片,所以看起来就是游戏运行起来的状态 物理世界计算刚体的运行状态,通过贴图显现出运算结果. 一.物理引擎 1:Unity 2D物理引擎基于Box2D封装而成;2: 物理 ...
- Unity的物理引擎是如何实现碰撞的呢?
物理引擎不允许两个碰撞器重叠,当两个或多个物体碰撞时,Unity会根 据他们的旋转速度计算碰撞效果.计算主要根据物体的碰撞器是静止的还 是动态的.物体是不移动的,例如,墙,地面,院子里的喷池等.动态物 ...
- Unity3D游戏开发初探—3.初步了解U3D物理引擎
一.什么是物理引擎? 四个世纪前,物理学家牛顿发现了万有引力,并延伸出三大牛顿定理,为之后的物理学界的发展奠定了强大的理论基础.牛顿有句话是这么说的:“如果说我看得比较远的话,那是因为我站在巨人的肩膀 ...
- Unity3D笔记三 物理引擎
一.物理引擎 1.物理引擎就是模拟真实世界中物体碰撞.跌落等反应,通过Ballance.愤怒的小鸟来理解什么是物理引擎.Unity的物理引擎使用的是NviDIA的PhysX.2.选中一个游戏对象,主菜 ...
- Unity 物理引擎动力学关节
Unity物理引擎中的各个动力学关节 Hinge Joint (铰链关节) Fixed Joint (固定关节) Spring Joint (弹簧关节) Character Joint(角色关节) C ...
- 【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠
碰撞与休眠 上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性.一旦刚体開始运动,那么系统方法便会监视刚体的碰撞状态.一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束. ...
- 【Unity 3D】学习笔记三十六:物理引擎——刚体
物理引擎就是游戏中模拟真是的物理效果.如两个物体发生碰撞,物体自由落体等.在unity中使用的是NVIDIA的physX,它渲染的游戏画面很逼真. 刚体 刚体是一个很很中要的组件. 默认情况下,新创的 ...
- Unity入门知识
参考书:<Unity3D 游戏开发> ● scene图中按F键:放大,居中当前选中的物体 ● 坐标轴:红-x轴,绿-y轴,蓝-z轴 ● 逐帧运行程序: ● OnGUI:可以用来画界面 ● ...
- Unity入门一,什么是GameObject,MonoBehaviour
Unity入门一,什么是GameObject,MonoBehaviour GameObject和Component Unity是一个Component-Based的引擎,所有物体都是GameObjec ...
随机推荐
- JDK源码阅读顺序
很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起.以下为小编整理的通常所需阅读的源码范围. 标题为包名,后面序号为优先级1-4,优先级递减 1.java.lang 1) Obj ...
- android开发 RecyclerView 瀑布列表布局
1.写一个内容的自定义小布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xm ...
- Android Camera开发:周期性循环自动聚焦auto focus挂掉原因分析(preview is not enabled)
参考:Android Camera开发:扫描二维码,周期性循环自动聚焦auto focus挂掉原因分析(preview is not enabled) 最近做Android人脸识别时,camera在自 ...
- kubernetes下安装mysql
参考文档:https://blog.csdn.net/sealir/article/details/81177747 注:有mysql安装在k8s集群内,集群外且通过k8s service endpo ...
- AspxCallback和AspxCallbcakPanel区别
AspxCallback是一个无界面控件,主要功能是启动一个回调,进行数据交互,而AspxCallbcakPanel为一个容器控件,可以在里面添加控件,并且可以局部刷新AspxCallbcakPane ...
- Git安装和基本使用(1)
参考廖雪峰GIt教程 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137 ...
- 用代码检查Windows程序的位数
方法就是通过读取程序文件的头部来判断,具体代码如下: #include <stdio.h> #include <windows.h> int CrnGetImageFileMa ...
- 关于php MD5加密 与java MD5 加密结果不一致的问题
针对PHP不是UTF-8编码导致的问题 public String md5(String txt) { try{ MessageDiges ...
- 深度学习原理与框架-卷积神经网络-cifar10分类(图片分类代码) 1.数据读入 2.模型构建 3.模型参数训练
卷积神经网络:下面要说的这个网络,由下面三层所组成 卷积网络:卷积层 + 激活层relu+ 池化层max_pool组成 神经网络:线性变化 + 激活层relu 神经网络: 线性变化(获得得分值) 代码 ...
- flash时间轴声音大小控制
A2时间轴声音大小控制: var sound:Sound = new Sound(); sound.setVolume(200); 把背景音乐放到一个影片剪辑里,剪辑起名 例如bgm_mc 声音模式为 ...