Unity3D学习笔记(一):Unity简介、游戏物体、组件和生命周期函数
Project(工程、项目):工程是把游戏开发当前所需要的资源归类管理用的。
Console控制台:日志、报错、调试,右上角,消息过滤

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 = -;
}
}
}
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简介、游戏物体、组件和生命周期函数的更多相关文章
- 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. 渲染 ...
- Unity3D学习笔记6——GPU实例化(1)
目录 1. 概述 2. 详论 3. 参考 1. 概述 在之前的文章中说到,一种材质对应一次绘制调用的指令.即使是这种情况,两个三维物体使用同一种材质,但它们使用的材质参数不一样,那么最终仍然会造成两次 ...
- Unity3D学习笔记4——创建Mesh高级接口
目录 1. 概述 2. 详论 3. 其他 4. 参考 1. 概述 在文章Unity3D学习笔记2--绘制一个带纹理的面中使用代码的方式创建了一个Mesh,不过这套接口在Unity中被称为简单接口.与其 ...
- Unity3D学习笔记12——渲染纹理
目录 1. 概述 2. 详论 3. 问题 1. 概述 在文章<Unity3D学习笔记11--后处理>中论述了后处理是帧缓存(Framebuffer)技术实现之一:而另外一个帧缓存技术实现就 ...
- unity3d学习笔记(一) 第一人称视角实现和倒计时实现
unity3d学习笔记(一) 第一人称视角实现和倒计时实现 1. 第一人称视角 (1)让mainCamera和player(视角对象)同步在一起 因为我们的player是生成的,所以不能把mainCa ...
- Unity3D学习笔记2——绘制一个带纹理的面
目录 1. 概述 2. 详论 2.1. 网格(Mesh) 2.1.1. 顶点 2.1.2. 顶点索引 2.2. 材质(Material) 2.2.1. 创建材质 2.2.2. 使用材质 2.3. 光照 ...
- Unity3D学习笔记7——GPU实例化(2)
目录 1. 概述 2. 详论 2.1. 实现 2.2. 解析 3. 参考 1. 概述 在上一篇文章<Unity3D学习笔记6--GPU实例化(1)>详细介绍了Unity3d中GPU实例化的 ...
- Unity3D学习笔记8——GPU实例化(3)
目录 1. 概述 2. 详论 2.1. 自动实例化 2.2. MaterialPropertyBlock 3. 参考 1. 概述 在前两篇文章<Unity3D学习笔记6--GPU实例化(1)&g ...
- C#.NET学习笔记1---C#.NET简介
C#.NET学习笔记1---C#.NET简介 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com -------------- ...
- Linux学习笔记-Linux系统简介
Linux学习笔记-Linux系统简介 UNIX与Linux发展史 UNIX是父亲,Linux是儿子. UNIX发行版本 操作系统 公司 硬件平台 AIX IBM PowerPC HP-UX HP P ...
随机推荐
- LeetCode Top100 Liked Questions
1. TwoSum https://www.cnblogs.com/zhacai/p/10429120.html easy 2. Add Two Numbers https://www.cnblog ...
- win10环境下MySql(5.7.21版本)安装过程
windows10上安装mysql(详细步骤) 2016年09月06日 08:09:34 阅读数:60405 环境:windwos 10(1511) 64bit.mysql 5.7.14 时间:201 ...
- SpringMyBatisDay01
1.Spring简介 Spring是一个开源轻量级应用开发框架,其目的是用于简化企业级应用程序的开发,降低侵入性Spring提供IOC和AOP功能,可以将组件(就是类)之间的耦合度降至最低,解耦,便于 ...
- CSS中 Zoom属性
CSS中 Zoom属性 其实Zoom属性是IE浏览器的专有属性,Firefox等浏览器不支撑.它可以设置或检索对象的缩放比例.除此之外,它还有其他一些小感化,比如触发ie的hasLayout属性,清除 ...
- sencha touch调试时Please close other application using ADB: Monitor, DDMS, Eclipse
1.运行——cmd—— netstat -aon|findstr "5037" 2.打开任务管理器,查看所有进程 显示进程pid(文件-查看)--查找pid=7740的结束.
- Python: 用shell通配符匹配字符串,fnmatch/fnmatchcase
问题:想使用Unix Shell 中常用的通配符(比如*.py , Dat[0-9]*.csv 等) 去匹配文本字符串 解决方案: 1. fnmatch 模块提供了两个函数—— fnmatch() 和 ...
- python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名
python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名,如果在类中定义的就是类的私有成员. >>> dir(__builtin ...
- python 文件操作,os.path.walk()的回调函数打印文件名
#coding=utf-8 import osdef find_file(arg,dirname,files): #for i in arg: #print i for file ...
- Linux基础命令---shutdown
shutdown shutdown指令以安全的方式来关闭系统,所有已经登录的用户都会被告知系统将要关闭.并且在最后五分钟内,新的登录将被阻止.过了指定的time后,关机会向init(8)守护进程发送一 ...
- php ci 报错 Object not found! The requested URL was not found on this server. If you entered the URL manually please check
Object not found! The requested URL was not found on this server. The link on the referring page see ...