一.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入门&物理引擎的更多相关文章

  1. 关于Unity中物理引擎的使用

    物理引擎控制刚体,刚体上面贴上图片,所以看起来就是游戏运行起来的状态 物理世界计算刚体的运行状态,通过贴图显现出运算结果. 一.物理引擎 1:Unity 2D物理引擎基于Box2D封装而成;2: 物理 ...

  2. Unity的物理引擎是如何实现碰撞的呢?

    物理引擎不允许两个碰撞器重叠,当两个或多个物体碰撞时,Unity会根 据他们的旋转速度计算碰撞效果.计算主要根据物体的碰撞器是静止的还 是动态的.物体是不移动的,例如,墙,地面,院子里的喷池等.动态物 ...

  3. Unity3D游戏开发初探—3.初步了解U3D物理引擎

    一.什么是物理引擎? 四个世纪前,物理学家牛顿发现了万有引力,并延伸出三大牛顿定理,为之后的物理学界的发展奠定了强大的理论基础.牛顿有句话是这么说的:“如果说我看得比较远的话,那是因为我站在巨人的肩膀 ...

  4. Unity3D笔记三 物理引擎

    一.物理引擎 1.物理引擎就是模拟真实世界中物体碰撞.跌落等反应,通过Ballance.愤怒的小鸟来理解什么是物理引擎.Unity的物理引擎使用的是NviDIA的PhysX.2.选中一个游戏对象,主菜 ...

  5. Unity 物理引擎动力学关节

    Unity物理引擎中的各个动力学关节 Hinge Joint (铰链关节) Fixed Joint (固定关节) Spring Joint (弹簧关节) Character Joint(角色关节) C ...

  6. 【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠

    碰撞与休眠 上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性.一旦刚体開始运动,那么系统方法便会监视刚体的碰撞状态.一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束. ...

  7. 【Unity 3D】学习笔记三十六:物理引擎——刚体

    物理引擎就是游戏中模拟真是的物理效果.如两个物体发生碰撞,物体自由落体等.在unity中使用的是NVIDIA的physX,它渲染的游戏画面很逼真. 刚体 刚体是一个很很中要的组件. 默认情况下,新创的 ...

  8. Unity入门知识

    参考书:<Unity3D 游戏开发> ● scene图中按F键:放大,居中当前选中的物体 ● 坐标轴:红-x轴,绿-y轴,蓝-z轴 ● 逐帧运行程序: ● OnGUI:可以用来画界面 ● ...

  9. Unity入门一,什么是GameObject,MonoBehaviour

    Unity入门一,什么是GameObject,MonoBehaviour GameObject和Component Unity是一个Component-Based的引擎,所有物体都是GameObjec ...

随机推荐

  1. uva-565-枚举

    16个披萨配料,选出一种组合满足所有人的需求,当然,如果某个人不喜欢A,结果里不包含A也是满足这个人的.只要答案满足题意既可,答案不唯一,special judge 用位枚举 #include < ...

  2. 重识linux-linux的账号与用户组

    重识linux-linux的账号与用户组 1 账号 每个登录linux系统的用户都有 uid和gid uid就是用户ID,gid就是组ID 在系统上存账号信息的文件是 /etc/passwd 存密码相 ...

  3. EA Data Modeling 显示别名设置

    1.设置 2.效果 

  4. maven 插件深入了解

    http://www.infoq.com/cn/news/2011/04/xxb-maven-7-plugin http://www.infoq.com/cn/news/2011/05/xxb-mav ...

  5. PHP Composer 包管理器的安装和使用

    一,包管理器的安装 01,首先确定 php 命令能够全局使用,要是不能请修改环境变量 02,使用 curl 命令安装 => curl -sS http://install.phpcomposer ...

  6. leetcode509

    public class Solution { public int Fib(int N) { ) { ; } ) { ; } else { List<int> list = new Li ...

  7. 在ls命令中使用通配符

    通配符比较简单.我们已经知道通配符常常是在shell终端中用来匹配文件名的,今天来看一下在ls命令中使用通配符的例子. 用法:ls [选项]... [文件]... ls本身也有很多的选项,我们今天不看 ...

  8. Windows下如何查看某个端口被谁占用

    开发时经常遇到端口被占用的情况,这个时候总是很令人抓狂,知道被哪个进程占用还好,结束就是了,要是不知道我们该怎么办呢? 我告诉大家一个方法,^_^. 1. 开始—->运行—->cmd,或者 ...

  9. html 基础之a标签的属性target解析

    学习前端,有很多标签其实有很多不同的功能,但是用到的不多,所以就没有发现:当发现的时候,觉得很不可思议,有耳目一新的感觉.例如a 标签,之前只是知道,使用a标签,可以打开一个链接,然后访问一个新的页面 ...

  10. Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter

    类的继承关系 Reader |__ BufferedReader.StringReader.InputStreamReader |__ FileReader Writer |__ BufferedWr ...