• 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:花费

      在导航的过程中,会自动寻找花费最小的路径

  • 相关阅读:
    轻松把你的项目升级到PWA
    聊聊React高阶组件(Higher-Order Components)
    java NIO系列教程2
    java NIO系列教程1
    个人笔记
    onclick时间加return和不加return的区别
    URL编码分析与乱码解决方案
    第九天 1-8 RHEL7软件包管理
    第八天 RHEL7.2 文件权限管理(第一部分)
    第七天 Linux用户管理、RHEL6.5及RHEL7.2 root密码破解、RHEL6.5安装vmware tools
  • 原文地址:https://www.cnblogs.com/xingyunge/p/6776144.html
Copyright © 2020-2023  润新知