前言:一段学习后,总会花时间来总结一下,为了尽快熟悉和学习unity知识,根据教程写了入门的第一个demo
教程地址:https://www.bilibili.com/video/av29751762?p=1
Unity版本:2018.3.0f2
demo下载地址:https://download.csdn.net/download/zzcliang/11996526
下面是用到的知识(都是网上找的)
Awake()会在Start()之前被调用
Awake函数
如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数不会执行;反之,如果游戏对象的初始状态为开启状态,那么Awake函数会执行
在不切换场景的前提下,原本处于关闭状态的游戏对象,当它被首次开启时,Awake函数会执行,并且是只在首次开启时才会执行;而已经开启(激活)的游戏对象(Awake函数已经执行过一次),将它关闭后再次开启,Awake函数不会再次执行
一般用来声明变量
所挂载的物体被激活时,才能被调用
无论该脚本组件是否激活,都会被调用
start函数
当Update函数第一次被调用前会调用Start函数;Start函数只在脚本实例被启用时才会执行;Start函数总是在Awake函数之后执行,
如果游戏对象被关闭,那么Start函数不会执行
Start函数的特点,只有在脚本实例被启用时它才会执行
一般用来给变量赋值
所挂载的物体被激活时,才能被调用
脚本在代码中被实例化时才开始调用
只有该脚本组件被激活时,才能被调用
(2)FixedUpdate () 和update()的区别
但是Update是在每次渲染新的一帧的时候才会调用,也就是说,这个函数的更新频率和设备的性能有关以及被渲染的物体(可以认为是三角形的数量)。在性能好的机器上可能fps 30,差的可能小些。这会导致同一个游戏在不同的机器上效果不一致,有的快有的慢。因为Update的执行间隔不一样了。而FixedUpdate,是在固定的时间间隔执行,不受游戏帧率的影响。有点想Tick。
处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)。正是因为FixedUpdate是以固定的时间间隔来被调用,所以人物运动起来比较平滑(运动起来不会有忽快忽慢的感觉,像是跳帧似的),这也就是为什么处理Rigidbody时要用FixedUpdate了(当然还有其他一些原因)。
FixedUpdate是以固定的时间间隔来被调用的,而这个固定的时间是可以修改的。FixedUpdate的时间间隔可以在项目设置中更改,Edit->Project Setting->time 找到Fixed timestep。就可以修改了
所以一些物理属性的更新操作应该放在FxiedUpdate中操作,比如Force,Collider等。外设的操作也是,比如说键盘或者鼠标的输入输出Input,因为这样GameObject的物理表现的更平滑,更接近现实。
(3)产生随机性重复比较小的数据(移动方向的随机)
世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符
//tank移动方向的随机
public int[] moveList = new int[] {0,1,1,2,2,2,3,3,3,4,4,4,4,4,4};
moveList = moveList.OrderBy(x=>System.Guid.NewGuid()).ToArray();
moveDirection = moveList[Random.Range(0,moveList.Length)];
TankMove(moveDirection);
(4)DoTween动画针
目的:游戏运行的时候,主界面从下面慢慢移动到屏幕中央
简介:DoTween作为一款动画插件
实现:(1)从官网http://dotween.demigiant.com/download.php下载
解压后,放到unity命名的plugins里面
(2)打开Tools-Demigiant-DoTweenUtilityPanel ,点击Setup DoTween
(3)新建一个脚本,直接写脚本通过坐标移动到中央,接着把脚本挂到要移动的物体上面
(4)单例模式
找到的别人写的
是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例
接来下我用代码说明:
我自己的理解就是单例模式一般应用于管理器类,或者是一些需要持久化存在的对象,在各个场景中都用到的,贯穿于整个游戏过程中的数据,比如我们demo用到的:玩家生命值、玩家积分、游戏是否结束、玩家是否死亡、消灭tank个数等等,这些数据都要用一个统一的单例模式来管理
demo中的应用
创建的单例脚本PlayerManager
其它脚本中的直接使用
后续会用框架完善该demo,主要数据放在本地数据库,增加道具、双人玩法等等