Project(工程、项目):工程是把游戏开发当前所需要的资源归类管理用的。

Console控制台:日志、报错、调试,右上角,消息过滤

Assets:资源,存储游戏中一切用到的资源
Library:临时库文件
ProjectSettings:项目设置、项目控制
Temp:临时文件夹
UnityPackageManager:资源包

工程迁移:
Assets、ProjectSettings、UnityPackageManager,这三个文件夹必须拷贝走
如果报错,先删掉Library和Temp,再重新打开Unity
dependencies关联资源,引用资源

project面板:管理所有项目资源和文件
Inspector:当前选中游戏物体细节
 
程序=数据结构+算法
数据结构:存储数据的结构,栈、堆、链
List的核心是数组,
 
.unity后缀名:场景文件
.unitypackage后缀名:资源包
 
偏好设置
MonoDevelop:微软出品,早年为了实现跨平台(Mac),后来VS2017支持Mac

 
组件的概念:将一些具有功能性的代码封装起来,封装成一个类,当这个类挂到游戏物体身上去的时候,就相当于对此类的实例化,变成了具有这个功能的对象实体,那么这个游戏物体也就具有了这个对象所具有的功能。
组件的挂载相当于创建对象,添加功能性的对象。
游戏物体:
从表现层来看:场景视图中或者层级视图中能被看到的或者能被选中的都叫游戏物体。
从面向对象的角度来看:游戏物体是一个或者多个组件的集合。
Transform是基本组件,即使GameObject空物体也要有基本组件。坐标系,朝向,形体,
Position:单位米
Rotation:单位Unity(欧拉角,角度)和C#(四元素,弧度)
右手坐标系(数学运算)和左手坐标系(几何变换):拇指X轴右,食指Y轴上,中指Z轴前
Scale:单位倍数
Reset:重置还原
 
MonoBehaviour:是每个脚本派生的类的基类。
Start、Updata(生命周期函数、事件函数):在特定的时间点被游戏引擎被动调用的函数叫做生命周期函数。
Unity分为编辑内存和运行内存
第一步实例化所有游戏物体的组件
第二步激活所有游戏物体的组件
Awake():在此组件被实例化的时候执行一次
OnEnable():在此组件被激活的时候执行一次
OnDisable():在此组件被失活的时候执行一次
Start():在此组件对象第一次被激活的时候执行一次(在游戏开始的时候被执行一次,用来初始化)
Updata():每一画面刷新帧被调用一次(在游戏物体和脚本组件被激活的情况下)
FixedUpdate():每一物理帧更新刷新一次(物理帧是固定帧0.02秒)
LateUpdate():每一画面刷新帧被调用一次,只不过比Updata要晚(常用于摄像机跟随,防抖)OnDestroy():在此组件被销毁(remove)的时候执行一次(游戏运行时,在运行内存中销毁,编辑内存仍在)
帧(Frame):屏幕刷新的表示方式
帧率(FPS):帧率 = 帧数 / 时间 (单位时间内画面刷新的帧数)
肉眼:
手游:~
PC/主机游戏:~
VR:120以上

collapse折叠调用,显示调用次数

整个游戏物体的激活与失活,游戏物体被激活失活时,会同步激活失活游戏物体的组件

单个物体组件的激活与失活

Mesh网格,正方形4个顶点2个三角面,平面10x10米,面片1x1米

Snap settings 吸附

给物体添加图标

Unity3D 快捷键
当前轴心旋转:Alt+鼠标左键
移动场景:鼠标滚轮键 / Q
缩放场景:使用鼠标滚轮键 / Alt+鼠标右键
居中所选物:F
飞行浏览:鼠标右键+WSAD(按Shift加速),QE上下
Edit菜单
播放:Ctrl+P,暂停:Ctrl+Shift+P,单帧预览:Ctrl+Alt+P
Assets菜单
刷新:Ctrl+R
GameObject菜单
新建空对象:Ctrl+Shift+N,移动物体到视图中心点:Ctrl+Alt+F,移动物体与视图对齐:Ctrl+Shift+F
Component菜单
添加组件:Ctrl+Shift+A
近距离查看游戏对象
在Hierarchy视图中选择游戏对象,然后在Scene视图中按快捷键“F”来近距离查看该游戏对象。
游戏对象不在主摄像头中
Hierarchy中双击选择需要显示的游戏对象,再单击Main Camera选中,最后Ctrl+Shift+F键盘即可。
旋转视图
Alt键 + 鼠标左键 可以任意拖动鼠标来旋转视图。如果x,y,z坐标轴恢复不了,可以先单击X轴(Y、Z)再鼠标右键选择“Free” 最后通过这个来调试。
缩放视图:滚动鼠标中键可以缩放整体视图。
变换工具栏:拖动工具:Q 移动工具:W 旋转工具: E 缩放工具:R
按住Ctrl键移动物体会以一定的增量来移动物体
Edit-Snap Setting 栅格和捕捉设置
Ctrl+Shift 使物体在另一个物体上移动,物体在被相交的物体上移动
顶点吸附 选中物体,按键盘V键 就可以看到物体的顶点:可以快速使两个物体定位
关闭顶点吸附:Shift+V
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]//类和结构都需要被序列化后,才可以在检视面板显示
public class Student
{
public string name;
public int age;
public override string ToString()
{
return string.Format("[name:{0},age:{1}]",name ,age);
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Unity1803 : IEnumerable
{
List<Student> students;//我没有加public,老师加了public
public Unity1803()
{
students = new List<Student>()
{
new Student() { name = "张三",age= },
new Student() { name = "李四",age= },
new Student() { name = "王二",age= },
new Student() { name = "赵六",age= },
new Student() { name = "田七",age= },
};
}
public IEnumerator GetEnumerator()
{
//返回的对象 必须实现了IEnumerator接口
Unity1803IEnumerator ie = new Unity1803IEnumerator(students);
return ie;
//简便写法
//yield是C#为了简化遍历操作实现的语法糖,我们知道如果要要某个类型支持遍历就必须要实现系统接口IEnumerable,这个接口后续实现比较繁琐要写一大堆代码才能支持真正的遍历功能。
//for (int i = 0; i < students.Count; i++)
//{
// yield return students[i];
//}
}
public class Unity1803IEnumerator : IEnumerator
{
List<Student> students;
int index = -;
public Unity1803IEnumerator(List<Student> students)
{
this.students = students;
}
public object Current
{
get
{
return students[index];
}
}
//是否移出了集合的范围 返回true 表示当前的指针还在范围内 false则是在范围外
public bool MoveNext()
{
index++;
return index < students.Count;
}
public void Reset()
{
index = -;
}
}
}
Unity复习
UnityEngine.Object是System.Object的子类,Unity默认继承UnityEngine.Object,C#默认继承System.Object
组件挂载的要求
1、继承MonoBehaviour类
2、文件名与类名一致
3、挂载时,所有脚本代码没有编译错误
4、挂载的脚本不能是抽象类
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]//类和结构都需要被序列化后,才可以在检视面板显示
public class Enemy
{
public string name;
public int atk;
public int hp;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum EEnemyType
{
战士,
法师
}
public class NewBehaviourScript : MonoBehaviour
{
//以检视面板为准
public int intNum = ;
//私有变量不会在检视面板显示
//特性:[]标签的形式
//可以把私有的字段在检视面板中显示出来
[SerializeField]//序列化字段 Attribute 反射(程序集.exe .all)
private float floatNum = 0.0f;
[Multiline()]//让字符串多行显示
public string str = "";
[Header("战士的类型")]//说明文本
public EEnemyType enemyType = EEnemyType.战士;
[Header("XX的数量")]
public int[] nums;
[Header("XX的数量")]
public List<int> listArray;
public Student student;
public List<Enemy> enemyList;
public Enemy enemy = new Enemy();
public Unity1803 unity = new Unity1803();
private void Awake()
{
//Debug.LogFormat("Int :{0}", intNum);
//Debug.Log("Float :" + floatNum);
//Debug.Log("Str : " + str);
//Debug.Log("EnemyType :" + enemyType);
////Debug.Log("Awake");
////Debug.LogWarning("Awake");
////Debug.LogError("Awake");
//foreach (var item in nums)
//{
// Debug.Log("item :" + item);
//}
}
private void OnEnable()
{
Debug.Log("this is OnEnable");
}
// Use this for initialization
void Start()
{
Debug.Log("this is Start");//输出
// 挂载的条件
// 1. 继承 MonoBehaviour
// 2. 文件名与类名相同
// 3. 挂载时,所有的代码无编译错误
// 4. 挂载的脚本不能是抽象类
int num = Random.Range(,);
Debug.Log(num);
int[] nums = new int[] { , , , , , , };
List<int> list = new List<int>() {,,,,,, };
foreach (var item in nums)
{
Debug.Log("item:" + item);
}
foreach (var item in list)
{
Debug.Log("item:" + item);
}
//IEnumerable 枚举器:其实就是一种机制,具有可以逐个访问某个集合每个元素的功能 {a,b,c,d}
//IEnumerator 迭代器:实现了上面这种机制的具体的 (一个或多个)方法
Unity1803 unity = new Unity1803();
foreach (var item in unity)
{
Debug.Log("item:" + item);
}
}
// Update is called once per frame
void Update()
{
Debug.Log("this is Update");
}
private void FixedUpdate()
{
Debug.Log("this is FixedUpdate");
}
private void LateUpdate()
{
Debug.Log("this is LateUpdate");
}
private void OnDisable()
{
Debug.Log("this is OnDisable");
}
private void OnDestroy()
{
Debug.Log("this is OnDestroy");
}
}

OnPreCull: 在相机剔除场景之前调用此函数。相机可见的对象取决于剔除。OnPreCull 函数调用发生在剔除之前。
OnBecameVisible/OnBecameInvisible: 在对象对于相机可见/不可见时调用此函数。
OnWillRenderObject: 如果对象可见,则为每个相机调用一次此函数。
OnPreRender: 在相机开始渲染场景之前调用此函数。
OnRenderObject: 在完成所有常规场景渲染后调用此函数。此时,可使用 GL 类或 Graphics.DrawMeshNow 绘制自定义几何图形。
OnPostRender: 在相机完成场景渲染后调用此函数。
OnRenderImage(仅限专业版): 在完成场景渲染后调用此函数,以便对屏幕图像进行后处理。
OnGUI: 在每帧上多次调用此函数,以响应 GUI 事件。程序首先将处理 Layout 和 Repaint 事件,然后再处理每个输入事件的 Layout 和 keyboard/鼠标事件。
OnDrawGizmos: 用于在场景视图中绘制小图示 (Gizmos),以实现可视化目的。

Unity3D学习笔记(一):Unity简介、游戏物体、组件和生命周期函数的更多相关文章

  1. Unity3D学习笔记3——Unity Shader的初步使用

    目录 1. 概述 2. 详论 2.1. 创建材质 2.2. 着色器 2.2.1. 名称 2.2.2. 属性 2.2.3. SubShader 2.2.3.1. 标签(Tags) 2.2.3.2. 渲染 ...

  2. Unity3D学习笔记6——GPU实例化(1)

    目录 1. 概述 2. 详论 3. 参考 1. 概述 在之前的文章中说到,一种材质对应一次绘制调用的指令.即使是这种情况,两个三维物体使用同一种材质,但它们使用的材质参数不一样,那么最终仍然会造成两次 ...

  3. Unity3D学习笔记4——创建Mesh高级接口

    目录 1. 概述 2. 详论 3. 其他 4. 参考 1. 概述 在文章Unity3D学习笔记2--绘制一个带纹理的面中使用代码的方式创建了一个Mesh,不过这套接口在Unity中被称为简单接口.与其 ...

  4. Unity3D学习笔记12——渲染纹理

    目录 1. 概述 2. 详论 3. 问题 1. 概述 在文章<Unity3D学习笔记11--后处理>中论述了后处理是帧缓存(Framebuffer)技术实现之一:而另外一个帧缓存技术实现就 ...

  5. unity3d学习笔记(一) 第一人称视角实现和倒计时实现

    unity3d学习笔记(一) 第一人称视角实现和倒计时实现 1. 第一人称视角 (1)让mainCamera和player(视角对象)同步在一起 因为我们的player是生成的,所以不能把mainCa ...

  6. Unity3D学习笔记2——绘制一个带纹理的面

    目录 1. 概述 2. 详论 2.1. 网格(Mesh) 2.1.1. 顶点 2.1.2. 顶点索引 2.2. 材质(Material) 2.2.1. 创建材质 2.2.2. 使用材质 2.3. 光照 ...

  7. Unity3D学习笔记7——GPU实例化(2)

    目录 1. 概述 2. 详论 2.1. 实现 2.2. 解析 3. 参考 1. 概述 在上一篇文章<Unity3D学习笔记6--GPU实例化(1)>详细介绍了Unity3d中GPU实例化的 ...

  8. Unity3D学习笔记8——GPU实例化(3)

    目录 1. 概述 2. 详论 2.1. 自动实例化 2.2. MaterialPropertyBlock 3. 参考 1. 概述 在前两篇文章<Unity3D学习笔记6--GPU实例化(1)&g ...

  9. C#.NET学习笔记1---C#.NET简介

    C#.NET学习笔记1---C#.NET简介 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com -------------- ...

  10. Linux学习笔记-Linux系统简介

    Linux学习笔记-Linux系统简介 UNIX与Linux发展史 UNIX是父亲,Linux是儿子. UNIX发行版本 操作系统 公司 硬件平台 AIX IBM PowerPC HP-UX HP P ...

随机推荐

  1. python 使用set对列表去重,并保持列表原来顺序

    # python 使用set对列表去重,并保持列表原来顺序 list1 = ['cc', 'bbbb', 'afa', 'sss', 'bbbb', 'cc', 'shafa'] for item i ...

  2. 14 jmeter性能测试实战--数据库MySQL

    需求 测试用户表(对用户表select操作) 测试步骤 1.MySQL驱动下载并安装. 2.测试计划面板点击“浏览”按钮,将JDBC驱动(mysql-connector-java.jar)添加进来. ...

  3. vue-moment的使用

    1.安装:npm install moment --save 2.导入:import moment from 'moment'; 3.定义全局时间过滤器:  Vue.filter('converDat ...

  4. Ubuntu 下Apache安装和配置

    在Ubuntu上安装Apache,有两种方式:1 使用开发包的打包服务,例如使用apt-get命令:2 从源码构建Apache.本文章将详细描述这两种不同的安装方式. 方法一:使用开发包的打包服务—— ...

  5. [LeetCode] 190. Reverse Bits_Easy tag: Bit Manipulation

    Reverse bits of a given 32 bits unsigned integer. Example: Input: 43261596 Output: 964176192 Explana ...

  6. em和px比较

    1em=16px. em具有继承性. 如果定义了 body{font-size=12px;} #title{font-siez=2.6em;} 而id=title恰好在body里面,那么,id=tit ...

  7. [转载]C#深拷贝的方法

    首先了解下深拷贝和浅拷贝的定义: 浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用.      深拷贝(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对 ...

  8. Linux系统——Nginx反向代理与负载均衡

    集群集群是指一组(若干个)相互独立的计算机,利用高速通信网路组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运用各自服务的独立服务器.这些服务器之间可以彼此通信,协同向用户提供 ...

  9. workerman定时任务使用

      定时任务在有些场合很实用,像淘宝的自动确认收货就必须放在服务端进行,这时workeran的定时任务就派上用场了,它可以支持毫秒,crontab的粒度是一分钟 需要注意的是因为定时任务一直在执行,业 ...

  10. POST—常见的4种提交方式

    HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中,POST 一般用来向服务端提交数据,本文 ...