《Unity从入门到放弃》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+Terrain+Prefab+预制体+Collider+Rigidbody+立钻哥哥++OK++)

Urania ·
更新时间:2024-11-10
· 900 次阅读

Unity从入门到放弃

版本

作者

参与者

完成日期

备注

YanlzVR_Unity_V01_1.0

严立钻

 

2020.04.26

 

 

 

 

 

 

 

##《Unity从入门到放弃》发布说明:

++++Unity从入门到放弃”:是对“Unity”的基础探索;【VR云游戏】:Unity+SteamVR+云技术+5G+AI:其中Unity主要开发语言就是C#,所以在进入Unity开发前先对C#进行一轮基础夯实,熟悉C#之后,那就可以进行Unity开发了,最后结合SteamVRVRTK等插件进行VR开发了;

++++Unity从入门到放弃”:定位在一个科普类知识,“从入门到放弃”是一个系列,是最基础的,也是最有参考价值的!

 

@@提示:有些博客可能只是开了头,如果感兴趣的同学,可以“点赞”或“评论区留言”,只要关注的同学多了,那就会继续完善哟!(“++==”,表示没有写完的,如果关注度不高就不完善了;“++ok++”,表示此篇博客已经完成,是阶段性完整的!)

 

$$$$博客溯源:

&&&&“从入门到放弃”系列:

++++Unity从入门到放弃https://blog.csdn.net/VRunSoftYanlz/article/details/105776475

++++【C#从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/105757329

++++【Linux从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/104176967

++++【C++从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/103849127

++++【Python从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/101393069

++++【Qt从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/100904511

 

 

++++VR云游戏=Unity+SteamVR+云技术+5G+AI;(说明:AI人工智能不是我们的主要研究技术,只是了解一下,领略一下有风的感觉!但是,VR是我们的研究重点

 

 

 

##《Unity从入门到放弃》目录 #第一篇:C#基础篇 #第二篇:Unity基础篇 #第三篇:Unity项目篇 #第四篇:Unity中的行业应用篇 #第五篇:Unity项目中的游戏服务器篇 #第六篇:Unity项目安全篇 #第七篇:立钻哥哥带您Unity从入门到放弃

 

 

 

 

 

#第一篇:C#基础篇
#第一篇:C#基础篇
#第一篇:C#基础篇 ++++立钻哥哥:C#是微软公司发布的一种简洁的、面向对象的且类型安全的程序设计语言;C#应用领域比较广泛,可以进行游戏软件开发、桌面应用系统开发、智能手机程序开发、多媒体系统开发、网络应用程序开发以及操作系统平台开发等;因C#语言简单易学,功能强大,所以受到很多程序员的青睐,成为程序开发人员使用的主流编程语言之一 ++++【C#从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/105757329 #第2讲:Unity引擎基础
#第2讲:Unity引擎基础
#第2讲:Unity引擎基础

++++2.1、Unity引擎简介

++++2.2、用户界面介绍

++++2.3、Terrain地形系统

++++2.4、3D基础理论

##2.1、Unity引擎简介
##2.1、Unity引擎简介
++2.1、Unity引擎简介

++++2.2.1、Unity3D简介

++++2.2.2、著名企业的加入

++++2.2.3、游戏引擎

++++2.2.4、Unity特点

++++2.2.5、Unity发展历史

++++2.2.6、使用Unity开发的游戏

###2.2.1、Unity3D简介
###2.2.1、Unity3D简介
++2.2.1、Unity3D简介

++++立钻哥哥:Unity Technologies公司开发的跨平台游戏引擎

++++[虚拟现实(Virtual Reality)]:虚拟仿真技术,是当今世界前沿科学之一;利用电脑模拟产生一个三维空间的虚拟世界,通过各种输入设备和虚拟环境中的事物进行交互,让使用者身临其境的观察空间内的事物;

###2.2.2、著名企业的加入
###2.2.2、著名企业的加入
++2.2.2、著名企业的加入

++++立钻哥哥:2015年5月,前Epic Games总裁,迈克.卡普斯(Mike Capps)加入Unity;

###2.2.3、游戏引擎
###2.2.3、游戏引擎
++2.2.3、游戏引擎

++++立钻哥哥:游戏引擎是一款游戏最最核心的代码,程序的框架;包含:渲染引擎、物理引擎、碰撞检测系统、音效、脚本引擎、动画系统、人工智能、网络引擎、以及场景管理

++++使用游戏引擎,开发者可以重用已有的核心技术,将精力集中在游戏逻辑和设计上,从而简单快速的创建游戏;

###2.2.4、Unity特点
###2.2.4、Unity特点
++2.2.4、Unity特点

++++立钻哥哥:Unity特点:开发效率高;跨平台

 

 

 

###2.2.5、Unity发展历史
###2.2.5、Unity发展历史
++2.2.5、Unity发展历史

++++立钻哥哥:2004年丹麦三位年轻人决定开发;2005年发布Unity1.0版本

++++2007年发布Unity2.0版本;2010年发布Unity3.0版本;

++++2015年发布Unity5.0版本;

++++2012年Unity上海分公司成立,正式进军中国市场;

###2.2.6、使用Unity开发的游戏
###2.2.6、使用Unity开发的游戏
++2.2.6、使用Unity开发的游戏

++++立钻哥哥:Unity成功案例:王者荣耀

##2.2、用户界面介绍
##2.2、用户界面介绍
++2.2、用户界面介绍

++++2.2.1、Unity界面布局

++++2.2.2、资源商店的使用

++++2.2.3、创建游戏对象

++++2.2.4、常用快捷键的使用

###2.2.1、Unity界面布局
###2.2.1、Unity界面布局
++2.2.1、Unity界面布局

++++立钻哥哥:Unity界面布局一般包括:Project(项目资源面板)、Hierarchy(层次面板)、Scene(场景面板)、Game(游戏面板)、Inspector(检视面板)等;

++++[Project(项目资源面板)]:存放游戏的所有资源,例如场景、脚本、模型、音频、图片等文件;

++++[Hierarchy(层次面板)]:显示当前场景中所有游戏对象的层次关系;包含了当前场景的游戏对象(GameObject),其中一些是资源文件的实例,如3D模型和其他预制组件的实例;

++++[Scene(场景面板)]:提供设计游戏界面的可视化面板;

++++[Game(游戏面板)]:预览游戏运行后的界面;

++++[Inspector(检视面板)]:显示当前选定游戏对象附加的组件及其属性信息;

###2.2.2、资源商店的使用
###2.2.2、资源商店的使用
++2.2.2、资源商店的使用

++++立钻哥哥:Unity引擎中打开Asset Store视图即可浏览资源的商城;通过简单的注册流程便可下载所需要的资源

++++Unity中打开AssetStore快捷键:[Ctrl + 9]

++++Asset Store链接:https://assetstore.unity.com/

###2.2.3、创建游戏对象
###2.2.3、创建游戏对象
++2.2.3、创建游戏对象

++++立钻哥哥:游戏对象也称为游戏物体,游戏中的一个角色,一个模型甚至环境特效都可以称为游戏对象

++++点击菜单[GameObject]即可创建Unity提供的基本游戏对象:

###2.2.4、常用快捷键的使用
###2.2.4、常用快捷键的使用
++2.2.4、常用快捷键的使用

++++立钻哥哥:常用快捷键包括:变换工具、定点吸附、缩放场景、移动场景、设置物体为视图中心、围绕物体旋转缩放、摄像机视角调整等

++++[变换工具]Q移动场景;W移动物体;E旋转物体;R缩放物体;

++++[定点吸附]:选择物体后按住V键,定位定点,再拖拽到目标物体某个定点上;

++++[缩放场景]:按下鼠标滚轮拖动场景,滚动滚轮缩放场景;

++++[移动场景]:鼠标右键旋转场景;点击Q键后,通过左键移动场景;

++++[场景漫游]:点击右键同时按下W/S/A/D/Q/E键可以实现场景漫游;

++++[设置物体为视图中心]:在Scene面板选中物体后按F键;或在Hierarchy面板双击物体,可将物体设置为场景视图的中心;

++++[围绕物体旋转缩放]:按住Alt键同时通过鼠标左键围绕某物体旋转场景,鼠标右键缩放场景;

++++[调整摄像机视角]:选中摄像机,按[Shift+Ctrl+F]调整摄像机视角;

 

 

 

 

 

##2.3、Terrain地形系统
##2.3、Terrain地形系统
++2.3、Terrain地形系统

++++2.3.1、创建地形

++++2.3.2、编辑地形:高度、地形纹理等

++++2.3.3、树和草的创建与编辑

++++2.3.4、场景漫游

###2.3.1、创建地形
###2.3.1、创建地形
++2.3.1、创建地形

++++立钻哥哥:创建Terrain地形:[GameObject]菜单=>[3D Object]=>[Terrain]

###2.3.2、编辑地形:高度、地形纹理等
###2.3.2、编辑地形:高度、地形纹理等
++2.3.2、编辑地形:高度、地形纹理等

++++立钻哥哥:选中地形(Terrain)后,可以在检视器中查看地形编辑工具

###2.3.3、树和草的创建与编辑
###2.3.3、树和草的创建与编辑
++2.3.3、树和草的创建与编辑

++++立钻哥哥:选中地形(Terrain)后,可以在第四项和第五项用来创建和编辑树和草

++++选择[Edit Trees ...][Edit Details ...]导入树和草资源,刷到地形上即可;

###2.3.4、场景漫游
###2.3.4、场景漫游
++2.3.4、场景漫游

++++立钻哥哥:导入[UnityStandardAssetsSetup(标准的资源)]中的角色控制器

##2.4、3D基础理论
##2.4、3D基础理论
++2.4、3D基础理论

++++2.4.1、坐标系

++++2.4.2、向量

++++2.4.3、网格

++++2.4.4、纹理

###2.4.1、坐标系
###2.4.1、坐标系
++2.4.1、坐标系(笛卡尔坐标系)

++++立钻哥哥:Unity中采用左手坐标系(拇指、食指和其余手指分别代表:XYZ轴正方向)

++世界坐标系(Global)

++++立钻哥哥:世界坐标系是一个特殊的坐标系,它建立了描述其他坐标系所需要的参考框架

++++世界坐标系简言之:西

++本地坐标系(Local)

++++立钻哥哥:本地坐标系(物体坐标)和特定物体相关联的坐标系

++++每个物体都有它们独立的坐标系,简言之:

++视图

++++立钻哥哥:视图分为:ISO(正交模式)和Persp(透视模式)

++++[ISO(正交模式)]:国际标准视图(远近一样大,适合2D布局);

++++[Persp(透视模式)]:近大远小,适合3D布局;

###2.4.2、向量
###2.4.2、向量
++2.4.2、向量

++++立钻哥哥:向量:有大小和方向的量,如速度和位移就是向量

++++[标量]:只有大小没有方向的量,如速率和长度就是标量;

++向量加法

++++立钻哥哥:c=a+b;

++向量减法

++++立钻哥哥:通常用于获取从一个对象到另一个对象的方向和距离

++++在减法中,两个参数的顺序会影响结果,b-a方向从点a指向点b,大小为ab线段的长度;

++法向量

++++立钻哥哥:如果一个非零向量n与平面a垂直,则称向量n为平面a的法向量

###2.4.3、网格
###2.4.3、网格
++2.4.3、网格

++++立钻哥哥:在图形学中,多边形网格不过是一个多边形列表,三角网格就是全部由三角形组成的多边形网格,任意多边形网格都可以转换成三角网格

++++四个点的面不一定是一个平面(一张纸对折场景);

++网格组件

++++立钻哥哥:Unity中常见网格组件:Mesh Filter(网格筛选器)、Mesh Renderer(网格渲染器)

++++[网格筛选器(Mesh Filter)]:选择使用什么样的网格;

++++[网格渲染器(Mesh Renderer)]:渲染网格;

###2.4.4、纹理
###2.4.4、纹理
++2.4.4、纹理

++++立钻哥哥:纹理(Textures)是附加到物体表面的贴图

++材质和着色器

++++立钻哥哥:材质是物体的质地,指色彩、纹理、光滑度、透明度、反射率、折射率、发光度等;实际上就是Shader的实例

++++[Shader着色器]:专门用来渲染3D图形的技术,可以使纹理以某种方式展示;实际就是一段嵌入到渲染管线中的程序,可以控制GPU运算图像效果的算法;

++纹理、着色器与材质的关系

++++立钻哥哥:[纹理+shader]=>[材质Material]=>GameObject

#第3讲:Unity面向组件开发
#第3讲:Unity面向组件开发
#第3讲:Unity面向组件开发

++++3.1、Unity组件开发

++++3.2、Unity脚本组件

++++3.3、常用类

++++3.4、Prefab预设体

##3.1、Unity组件开发
##3.1、Unity组件开发
++3.1、Unity组件开发

++++3.1.1、工程与应用程序

++++3.1.2、Unity工程开发框架

++++3.1.3、Unity面向组件开发思想

++++3.1.4、脚本组件的使用

###3.1.1、工程与应用程序
###3.1.1、工程与应用程序
++3.1.1、工程与应用程序

++++立钻哥哥:新创建的Unity工程,在其目录文件夹中包含4个文件夹:Assets/Library/ProjectSettings/Temp/

++++[Assets/]:里面存放的是项目所需要的资源;

++++[Library/]:里面存放的是所需要的库文件;

++++[ProjectSettings/]:里面存放的是工程设置文件;

++++[Temp/]:里面存放的是临时文件;

###3.1.2、Unity工程开发框架
###3.1.2、Unity工程开发框架
++3.1.2、Unity工程开发框架

++++立钻哥哥:

++++工程,场景,游戏对象和组件的关系:

--一个工程里面有多个场景,相当于一个游戏有多个关卡;

--一个场景里面有多个游戏对象,相当于游戏中的不同的元素;

--每个游戏对象又有一个或者多个组件,游戏对象想要实现什么样的功能只需要加上相对应的组件即可;

###3.1.3、Unity面向组件开发思想
###3.1.3、Unity面向组件开发思想
++3.1.3、Unity面向组件开发思想

++++立钻哥哥:Unity面向组件开发,游戏物体想要实现什么样的功能,只需要添加相对应的组件即可,此时会在Inspector检视面板中显示出来,一些属性值可以可视化的更改

###3.1.4、脚本组件的使用
###3.1.4、脚本组件的使用
++3.1.4、脚本组件的使用

++++立钻哥哥:Unity2017之前版本自带Mono脚本编辑器,创建Mono应用程序;Unity2017之后推荐使用VSVisual Studio),包括了整个软件生命周期中需要的大部分工具

++++在Unity中通过菜单设置修改默认的脚本编辑器:[Edit]=>[Preferences]=>[External Tools]=>[External Script Editor];

++脚本组件

++++立钻哥哥:脚本是一种特殊的组件,它用于添加到游戏对象上以实现用户自定义的一些功能

++++Unity主要支持C#来编写脚本;

 

++脚本的创建

++++立钻哥哥:Project视窗Asset文件夹中点击右键,创建C#脚本,然后把创建的脚本拖放到游戏物体上即可

++脚本的使用

++++立钻哥哥:双击创建的脚本组件,即可打开脚本

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

using System;

 

public class MyClass : MonoBehaviour{

}    //立钻哥哥:public class MyClass:MonoBehaviour{}

++++说明:类名与脚本组件名一致,并自动的继承MonoBehaviour类;(类名与脚本名不一样会出错

##3.2、Unity脚本组件
##3.2、Unity脚本组件
++3.2、Unity脚本组件

++++3.2.1、Unity脚本类

++++3.2.2、MonoBehaviour类

++++3.2.3、脚本生命周期

++++3.2.4、常用调试方法

###3.2.1、Unity脚本类
###3.2.1、Unity脚本类
++3.2.1、Unity脚本类

++++立钻哥哥:Unity中的常用脚本类可简单分为四大类:宏观控制类游戏对象类组件类资源类

++++[宏观控制类]:主要作用是针对Unity程序中的某一方面进行宏观控制;包括:应用程序类(Application)、输入类(Input)、图形输出类(GUI)、物理引擎类(Physics)、资源类(Resources)、时间类(Time)等;

++++[游戏对象类(GameObject)]:表示当前脚本挂载的游戏对象;

++++[组件类(Component)]:脚本开发中的组件类可以和图形界面中的检视面板对应起来;(每一个游戏对象的细节设置与操控都需要借助组件类来完成)

++++[资源类]:资源一般都是在图形界面导入之后直接使用;

###3.2.2、MonoBehaviour类
###3.2.2、MonoBehaviour类

++3.2.2、MonoBehaviour类

++++立钻哥哥:Unity脚本组件必须继承MonoBehaviour

++++继承自MonoBehaviour的脚本组件可以自动调用其封装好了的回调方法;

###3.2.3、脚本生命周期
###3.2.3、脚本生命周期
++3.2.3、脚本生命周期

++++立钻哥哥:脚本生命周期:[Awake()]=>[OnEnable()]=>[Start()]=>[FixedUpdate()]=>[Update()]=>[LateUpdate()]=>[OnBecameVisible()]=>[OnGUI()]=>[OnBecameInvisible()]=>[OnDisable()]=>[OnDestroy()]=>[OnApplicationQuit()]

++++初始阶段:Awake()OnEnable()Start()

--Awake()唤醒:当物体载入时立即调用1次,常用于在游戏开始前进行初始化,可以判断当满足某种条件执行此脚本 this.enable = true;

--OnEnable()当可用:每当脚本对象启用时调用;

--Start()开始:物体载入且脚本对象启用时被调用1次;常用于数据或游戏逻辑初始化,执行时机晚于Awake()

++++物理阶段:FixedUpdate()

--FixedUpdate()固定更新:脚本启用后,固定时间被调用,适用于对游戏对象做物理操作,例如移动等;

--设置更新频率:[Edit]=>[Project Setting]=>[Time]=>[Fixed Timestep]值,默认为0.02s;

++++游戏逻辑:Update()LateUpdate()

--Update()更新:脚本启用后,每次渲染场景时调用,频率与设备性能及渲染量有关;

--LateUpdate()延迟更新:在Update()函数被调用后执行,适用于跟随逻辑;

++++场景渲染:OnGUI()OnBecameVisible()OnBecameInvisible()

--OnGUI()渲染:渲染和处理GUI事件时调用;

--OnBecameVisible()当可见:当Mesh Renderer在任何相机上可见时调用;

--OnBecameInVisible()当不可见:当Mesh Renderer在任何相机上不可见时调用;

++++结束阶段:OnDisable()OnDestroy()OnApplicationQuit()

--OnDisable()当不可用:对象变为不可用和附属游戏对象非激活状态时此函数被调用;

--OnDestroy()当销毁:当脚本销毁或附属的游戏对象被销毁时调用;

--OnApplicationQuit()当程序结束:应用程序退出时被调用;

###3.2.4、常用调试方法
###3.2.4、常用调试方法
++3.2.4、常用调试方法

++++立钻哥哥:在学习和使用Unity时会经常调试代码,常用的调试方法有:第一种,在可能出错的行添加断点第二种,选择打印消息的方式

++调试方法1:在可能出错的行添加断点

++++立钻哥哥:

++调试方法2:打印消息的方式

++++立钻哥哥:常用打印消息的方式:一种是print,一种是Debug.Log()

++++[print()方法]:它是MonoBehaviour类的成员;当一个脚本继承MonoBehaviour时,才可以使用Print方法;

++++[Debug方法]:是一个独立的、密闭的类;Debug任何地方都可以,建议使用Debug.Log()方法;

##3.3、常用类
##3.3、常用类
++3.3、常用类

++立钻哥哥:APIApplication Programming Interface)应用程序编程接口,是一些预先定义的函数;Unity引擎提供了丰富的组件和类库,为开发者提供了非常大的便利,熟练掌握和使用这些API对于提高游戏开发效率很重要

++++3.3.1、Component

++++3.3.2、GameObject

++++3.3.3、Transform

++++3.3.4、Vector3

++++3.3.5、Quaternion

++++3.3.6、Time

++++3.3.7、Mathf

###3.3.1、Component类
###3.3.1、Component类
++3.3.1、Component类

++++立钻哥哥:Component类:gameObjecttransformtagcolliderrendererrigidbodyGetComponent()GetComponentInChildren()GetComponents()GetComponentsInChildren()

++++[gameObject]:组件附加的游戏对象;组件总是被附加到游戏对象上;

++++[transform]:附加到此游戏对象Transform组件(如果没有则为空);

++++[tag]:此游戏对象的标签;

++++[collider]:附加到此游戏对象的Collider(如无附加则为空);

++++[renderer]:附加到此游戏对象Renderer组件(如果没有则为空);

++++[rigidbody]:附加到此游戏对象Rigidbody组件(如果没有则为空);

++++[GetComponent()]:如果游戏对象有附加type类型的组件,则返回,如果没有则为空;

++++[GetComponentInChildren()]:返回此游戏对象上type类型的组件或任何它的子对象,使用深度优先搜索;

++++[GetComponents()]:返回此对象type类型的所有组件;

++++[GetComponentsInChildren()]:返回此游戏对象与其子对象所有type类型的组件;

 

 

 

###3.3.2、GameObject类
###3.3.2、GameObject类
++3.3.2、GameObject类

++++立钻哥哥:GameObject类:tagnameFindGameObjectsWithTag(string tag)、T GetComponent<T>()、SetActive(bool value)、FindWithTag(string tag)

++++通过tag得到游戏物体:

--static GameObject FindWithTag(string tag);

--GameObject.FindWithTag(“立钻哥哥”);

++++通过name得到游戏物体:

--static GameObject Find(string name);

--GameObject.Find(“立钻哥哥”);

++++[tag]:可读写属性,游戏物体的tag;

++++[name]:可读写属性,游戏物体的name;

++++[FindGameObjectsWithTag(string tag)]:静态方法,返回所有tag标识的物体,返回值是个数组;

++++[T GetComponent<T>()]:泛型实例方法,得到T类型的组件(强烈建议使用);

++++[SetActive(bool value)]:实例方法,设置游戏物体是否是活动的;

++++[FindWithTag(string tag)]:静态方法,得到tag标识的游戏物体;

###3.3.3、Transform类
###3.3.3、Transform类
++3.3.3、Transform类

++++立钻哥哥:Transform类:任何创建的游戏对象在场景中都会有位置,旋转和缩放最基本的信息,故该组件是必须存在的

++++Transform组件作用:1、负责游戏对象的变换(位置,旋转和缩放);2、维持父子关系;

++++[position]:世界坐标系中transform的位置;

++++[localPosition]:相对于父物体的位置;

++++[eulerAngles]:欧拉角,旋转的角度;

++++[rotation]:世界坐标系中变换的四元数;

++++[parent]:物体父物体的Transform组件;

++++[root]:物体最高层次父物体的Transform组件;

++++[void Translate(Vector3 translation)]:使当前对象朝translation

++++[void Rotate(Vector3 eulerAngles)]:按给定的欧拉角进行旋转;

++++[void RotateAround(Vector3 point, Vector3 axis, float angle)]:绕point点沿axis轴旋转angle度;

++++[Transform Find(string name)]:通过名字查找子物体;

++++[void LookAt(Transform target)]:使物体朝向target点;

###3.3.4、Vector3类
###3.3.4、Vector3类
++3.3.4、Vector3类

++++立钻哥哥:Vector3类是封装了向量运算相关变量和方法的结构体

++++Vector类的点乘、叉乘;

++点乘

++++立钻哥哥:点乘又称“点积”和“内积”

++++几何意义:a*b = |a|*|b|*cos:两个向量的单位向量相乘后再乘以二者夹角的余弦值;

++++代码:float dot = Vector3.Dot(Va, Vb);

++++点乘应用:对于标准化过的向量,点乘结果等于两向量夹角的余弦值;

++++计算两向量夹角:

float dot = Vector3.Dot(a.normalized, b.normalized);

float angle = Mathf.Acos(dot) * Mathf.Rad2Deg;

++叉乘

++++立钻哥哥:叉乘又称“叉积”或“外积”

++++几何意义:结果为两个向量所组成面的垂直向量,模长为两向量模长乘积再乘夹角



云技术 vr unity 5G

需要 登录 后方可回复, 如果你还没有账号请 注册新账号