Unity进阶-数据持久化PlayerPrefs
概述1.数据持久化定义:数据持久化就是将内存中的数据模型和硬盘中的存储模型相互转换的过程;
2.PlayerPrefs是Unity的内置API;
基本知识点基本方法1.存储相关
//PlayerPrefs的数据存储 类似于键值对存储 一个键对应一个值
//提供了存储3种数据的方法 int float string
//键: string类型
//值:int float string 对应3种API
PlayerPrefs.SetInt("myAge", 18);
PlayerPrefs.SetFloat("myHeight", 177.5f);
PlayerPrefs.SetString("myName", "唐老狮");
//直接调用Set相关方法 只会把数据存到内存里
//当游戏结束时 Unity会自动把数据存到硬盘中
//如果游戏不是正常结束的 而是崩溃 数据是不会存到硬盘中的
//只要调用该方法 就 ...
计算机组成原理
计算机概论计算机软硬件概念1.软硬件概念:计算机系统由软件和硬件俩大部分组成,如下;
硬件:是计算机的实体部分;
软件:由各类特殊功能的程序组成,通常存放在计算机的主存或者辅存中,通常分为系统软件和应用软件;
计算机的基本组成1.冯·诺依曼计算机:1945年提出“存储程序”概念设计的计算机,是对图灵机(图灵机)概念模型的实现和升级,冯·诺依曼计算机是以运算器为中心的,现代的计算机已经转化为以存储器为中心,如下图;
2.计算机组成:以下五部分组成
输入设备:将程序和数据以机器所能识别和接受的信息形式输入到计算机内(键盘、鼠标、扫描仪、语音输入设备、手写笔、触摸屏、数码摄像设备等);
输出设备:将计算机处理的结果以人们所能接受的信息形式或其它系统所要求的信息形式输出(显示器、打印机、绘图仪 、音箱);
存储器:用于存放程序和数据。存储器是计算机存储信息的核心,一般分为如下主存和外存。
主存储器(主存,内存):CPU能直接访问,主存分为若干个存储单元,每个单元都有唯一的地址编码,通常是按字节或字节的整数倍编码。存储器总是按地址访问的;
辅助存储器(外存,辅存):CPU不能直接访问,辅 ...
Unity进阶-UGUI
六大基础组件1.Canvas对象上依附的:Canvas:画布组件,主要用于渲染UI控件Canvas Scaler:画布分辨率自适应组件,主要用于分辨率自适应Graphic Raycaster:射线事件交互组件,主要用于控制射线响应相关RectTransform:UI对象位置锚点控制组件,主要用于控制位置和对其方式
2.EventSystem对象上依附的:EventSystem和Standalone Input Module:玩家输入事件响应系统和独立输入模块组件,主要用于监听玩家操作
Canvas画布组件1.Screen Space - Overlay:屏幕空间,覆盖模式,UI始终在前;
Pixel Perfect:是否开启无锯齿精确渲染(性能换效果)
SortOrder:排序层编号(用于控制多个Canvas时的渲染先后顺序)
TargetDisplay:目标设备(在哪个显示设备上显示)
Additional Shader Channels:其他着色器通道,决定着色器可以读取哪些数据
2.Screen Space - Camera(不推荐设置成主摄像机 ...
链表相关-环形链表
环形链表1.LeetCode原题地址
141. 环形链表 - 力扣(LeetCode)
2.解法思路一:采用快慢指针的方式,这道题之前和老师交流过,所以很快就解出来了,具体思路如如下
首先还是要判空一下,小于俩个节点直接返回false
定义快指针节点prev,慢指针节点cur,这里需要注意的是,快指针初始定义并不是head,因为在后续结束条件判断中,如果prev == cur == head 节点,那么循环直接结束了
快指针prev走俩步,慢指针走一步,如果存在循环,那么prev在某一时刻必定会和cur重合,结束循环
需要注意的是,需要加上一个判空条件来保证退出循环
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) {
* val = x;
* next = null;
* }
* }
...
链表相关-反转链表
反转链表1.LeetCode原题地址
206. 反转链表 - 力扣(LeetCode)
2.解法思路一:采用迭代的方式,采用双指针进行遍历,prev先行,cur后行,最后返回cur节点,思路如下
head节前进一步,保留原next的引用
prev节点next指向cur节点,此处cur节点初始状态时清空引用,无需判空,博主写代码有这种习惯,但后面导致逻辑错误
cur节点前进一步
prev节点前进一步,赋值head节点的引用
遍历直到prev节点跑完整个流程
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val=0, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
public class Solu ...
4种解法-最大子数组和
最大子数组和1.LeetCode原题地址
53. 最大子数组和 - 力扣(LeetCode)
2.解法思路一:暴力求解,这个是很简单的,内嵌遍历循环就可以了
public class Solution {
public int MaxSubArray(int[] nums) {
int max = int.MinValue;
for(int i = 0 ;i<nums.Length;i++){
int temp = 0;
for(int j = i ; j < nums.Length; j++){
temp += nums[j];
if(temp>=max)
max = temp;
}
}
return max;
}
}
3.解法思路二:动态规划,通过枚举迭代的方式,自底向上,所以必然会得到最优解,但是在迭代或者递 ...
链表相关-相交链表
相交链表1.LeetCode原题地址
160. 相交链表 - 力扣(LeetCode)
2.解法思路一:暴力求解,这个是很简单的,内嵌遍历循环就可以了,最开始想到的就这这种办法,由于for循环自带空值判定,所以不需要判断也可以
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode GetIntersectionNode(ListNode headA, ListNode headB) {
for(;headA!=null;headA = headA.next)
{
ListNode temp = headB;
for(;temp!=nu ...
Unity核心
2D相关图片导入设置Unity支持的图片格式BMP:是Windows操作系统的标准图像文件格式,特点是几乎不进行压缩,占磁盘空间大;
TIF:基本不损失图片信息的图片格式,缺点是体积大;
JPG:一般指JPEG格式,属于有损压缩格式,能够让图像压缩在很小的存储空间,一定程度上会损失图片数据,无透明通道;
PNG:无损压缩算法的位图格式,压缩比高,生成文件小,有透明通道;
TGA:支持压缩,使用不失真的压缩算法,还支持编码压缩。体积小,效果清晰,兼备BMP的图像质量和JPG的体积优势,有透明通道;
PSD:是PhotoShop(PS)图形处理软件专用的格式,通过一些第三方工具或自制工具可以直接将PSD界面转为UI界面;
其它:还支持,EXR、GIF、HDR、IFF、PICT等等,其中Unity最常用的图片格式是JPG、PNG、TGA三种格式;
纹理类型设置(Texture Type)1.Default-默认纹理,大部分导入的模型贴图都是该类型
sRGB(Color Texture):启用可以将纹理存储在伽马空间(见下图一)中(对每一个像素做一次幂函数运算)
Alpha Source: ...
Unity基础
3D数学数学计算Mathf公共类Math:是C#中封装好的用于数学计算的工具)类) —— 位于System命名空间中;Mathf:是Unity中封装好的用于数学计算的工具)结构体) —— 位于UnityEngine命名空间中,Mathf 是Unity专门封装的,不仅包含Math中的方法,还多了一些适用于游戏开发的方法,使用Mathf中的方法用于Unity游戏开发中的数学计算即可;
API
知识点三 Mathf中的常用方法——一般计算一次
//1.π - PI
print(Mathf.PI);
//2.取绝对值 - Abs
print(Mathf.Abs(-10));
print(Mathf.Abs(-20));
print(Mathf.Abs(1));
//3.向上取整 - CeilToInt
float f = 1.3f;
int i = (int)f;
print(i);
print(Mathf.CeilToInt(f));
print(Mathf.CeilToInt(1.00001f));
//4.向下取整 - FloorToInt
print(Mathf.FloorToIn ...
Unity入门
将之前的笔记整理下来
Unity概叙 Unity是一个游戏开发的集成工具,降低了游戏开发的门槛,提高了开发效率。
工程文件夹Assets:工程资源文件夹(美术资源脚本)Library:库文件夹Logs:日志文件夹obj:编译中间文件Packages:包配置信息ProjectSettings:工程设置信息
Unity界面基础Inspector检查窗口:用于设置游戏对象具体信息Console控制台窗口:用于显示调试信息,报错、警告、打印信息等Scene场景窗口:所有游戏对象所在地Hierarchy层级窗口:所有游戏的对象名单Game游戏窗口:玩家看到的游戏画面Project工程窗口:所有游戏资源和脚本内容
Scence场景和Hierarchy层级窗口Hierarchy 我们可以在Hierarchy窗口中创建或拖入各种游戏对象。Hierarchy层级窗口快捷键:F2:对象改名Ctrl+C:复制Ctrl+V:粘贴Ctrl+D:克隆一个Delete:删除
Scence 我们可以在Scene窗口中查看所有游戏对象设置所有游戏对象。窗口上方工具条内容:1.渲染模式2.2D、3D视图切换3.光源 ...
C#进阶
CLR中简单数据结构类命名空间:System.Collections;
ArrayList语法:new ArrayList();建议:本质是一个自动扩容的object数值,存在装箱拆箱,尽量少用;C# 动态数组(ArrayList) |菜鸟教程 (runoob.com)
Stack(栈)语法:new Stack();建议:存在装箱拆箱;C# 堆栈(Stack) | 菜鸟教程 (runoob.com)
Queue(队列)语法:new Queue();建议:存在装箱拆箱;C# 队列(队列) |菜鸟教程 (runoob.com)
Hashtable(哈希表)定义:又叫散列表,是基于键的哈希代码组织起来的键值对,主要用来提高数据查询效率;语法:new Hashtable();迭代器遍历法:
IDictionaryEnumerator me=哈希表对象名.GetEnumerator();
while(me.MoveNext()){
}
建议:存在装箱拆箱;C# 哈希表(Hashtable) |菜鸟教程 (runoob.com)
CLR中的泛形命名空间:System.Collections.Gen ...
C#核心
面向对象基本概念其他编程方式:面向过程编程;三大特征:封装+继承+多态;七大原则:1.单一原则:一个类只处理自己应该处理的。应该各司其职,例如把每个移动技能都尽量写出一个类,方便修改。2.开闭原则:新功能尽量是加处理而不是改代码。继承就是最明显的开闭原则,不要修改模板的内容,例如定义属性要用方法定义, getset,方便修改,修改类时或者改别人的方法,不清楚逻辑的就再写一个类。3.依赖倒置原则:不依赖于具体实现,要依赖抽象(接口)。要依赖于抽象,不要依赖于具体实现,可以先了解需求,再画图,最后变成代码。4.接口隔离原则:一个接口一个行为。接口里的单一原则,需要分的事件要分清楚。5.里氏替换原则:用父类容器装载子类,任何地方子类都能替换父类。不要修改别人的代码,可以继承他的代码去重写(注:多态:父类的指针指向子类,而调用子类的方法)6.合成复用原则:尽量用组合复用的形式。继承关系中,父类要可以解决子类共同的问题,子类时解决特与的问题,能用现有的类,就别再自己创建类。7.迪米特法则:一个类尽量减少对别的类引用。又叫最少知识原则,减少耦合性,类自己能解决的,尽量不要牵扯别的类,比如A类引用B ...