笔记
// Awake用于在游戏开始之前初始化变量或游戏状态,不管SetActive多少次,它只会调用一次
void Awake()
{
print("1");
GetTextFromFIle(textFile);
isReadingFin = true;
}
C#字符数组
char[] c = new char[] { 'a','b','c','d'};
TextAsset经Split后怎么会多个空?
设str是"abc "
string str1 = str.Substring(0, str.Length - 2);
print(str1);
abc
string str1 = str.Substring(0, str.Length - 1);
print(str1);
abc
这是因为
我们忘了调用
str.Trim(char);
str.Trim(char[]);
str.Trim();
它的功能
返回一个新字符串,它相当于从当前字符串中删除了一组指定字符的所有前导匹配项和尾随匹配项。
调用str.Trim()的话相当于是,删除str中所有前导空白字符和后导空白字符
C#找子串
string.IndexOf(string,int,int)
报告指定 Unicode 字符或字符串在此实例中的第一个匹配项的从零开始的索引。 如果未在此实例中找到该字符或字符串,则此方法返回 -1。
C#字符串转数字
Convert.ToInt32(string s)
这个方法的返回值是int类型,要用int类型的变量接收
如:
string strNum=Console.ReadLine();
int age=Convert.ToInt32(strNum);
或者:int age=Convert.ToInt32(“18”);
若输入的不是整形数字,则四舍五入
int age=Convert.ToInt32(“18.8”);//这里age=19
Unity yield break
Unity在协程里面的yield break相当于普通函数里面的return,即立即终止函数
void fun()
{
return;
}
IEnumerator tet()
{
yield break;
}
Unity 使用ScriptableObject实现存档读档
定义存档对象
[CreateAssetMenu(fineName = "FileName"),nemyName = "MenuName/FileName"]
public class myClass : ScriptableObject
{
public string Name;
public int data;
}
我们也可以在脚本中动态创建一个ScriptableObject:
ScriptableObject.CreateInstance<T> ();
创建存档路径
//路径是否存在
//不存在就创建
Directory.CreateDirector(Application.persistentDataPath+ "/game_SaveData");
把存档对象A写入本地文件B
-
创建文件
-
FileStream 文件B= File.Create("文件B的Path");
-
-
json序列化(json可以是ScriptableObject可读写)
-
var json = JsonUtility.ToJson(对象A);
-
-
二进制转化
-
BinaryFormatter fomatter = new BinaryFormatter();
fomatter.Serialize(文件B,json);
-
注意:你直接fomatter.SErialize(文件B,对象A),不经过json话,是会报错 的.
从本地文件B读取数据写入存档对象A
-
打开文件
-
FileStream 文件B = File.Open(文件B的路径,FileMode.Open);
-
-
二进制转化
-
BinaryFormatter = bf =new xxx;
-
-
反序列化
-
JsonUtlity.FromJsonOverwrite((string)bf.Deserialize(file),对象A)
-
-
关闭
-
文件B.close();
-
草,File.Exsits和Directory.Exists不一样,我居然用Directory去判断FIle
C# 正则
using System.Text.RegularExpressions;
Regex regex = new Regex(@"表达式");
其它常见C#正则表达式类:
Regex 类表示不可变(只读)的正则表达式。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。
Match 类表示正则表达式匹配操作的结果。Match 类的 Match.Success 匹配是否成功。Match.Index 返回第一个匹配的位置。
MatchCollection 类表示成功的【非重叠】匹配项的序列。MatchCollection 的实例是由 Regex.Matches 方法返回的。
GroupCollection 类表示被捕获的组的集合,并在单个匹配项中返回该捕获组的集合。GroupCollection 的实例在 Match.Groups 属性返回的集合中返回。
CaptureCollection 类表示捕获的子字符串的序列,并返回由单个捕获组所执行的捕获集。由于限定符,捕获组可以在单个匹配中捕获多个字符串。Captures 属性(CaptureCollection 类的对象)作为 Match 和 Group 类的成员提供,目的是便于对捕获的子字符串的集合进行访问。
Group 类表示来自单个捕获组的结果。因为 Group 可以在单个匹配中捕获零个、一个或更多的字符串(使用限定符),所以它包含 Capture 对象的集合。因为 Group 继承自 Capture,所以可以直接访问最后捕获的子字符串(Group 实例本身等价于 Captures 属性返回的集合的最后一项)。
Capture 类包含来自单个子表达式捕获的结果。
注意+,*,?的使用
一个悲伤的故事:
[^!]+忘了加+
@"^!(\w)+!(\w)+$"
@"^![^!]+![^!]+$"
实现匹配:
以!开头--非!的字符--中间有个!--非!的字符--结束
!cmd!ARGUMENTS
为什么使用-45°摄像机而不是3D正交场景
因为角色在y轴方向移动时,前者效果上是向前后移动;而后者是竖直方向上移动,要改的话,还得用z轴(坎公骑冠剑?)
UI 笔记
手机宽高比一般为16:9、18:9
Reference Resolution一般设为开发电脑的尺寸
横屏游戏,选择与高适配;竖屏游戏(或者4:3情况下),选择与宽适配
???实践之后发现并不一定啊
Unity预处理
//VS会在编写代码时就自动判断出将会执行哪个代码块,并把不会执行的置灰。(VS牛批!!!)
//当游戏处于编辑器阶段即还未发布时(可以在VS中改变调试的模式为Release)
#if DEBUG
Debug.Log("当前是编辑器模式");
#else
Debug.Log("当前不是编辑器模式");
#endif
NND跟我玩阴滴是吧,居然置灰
Unity Sprite Renderer
Mask Interaction需要创建2D Object->Sprite Mask才能生效
渲染顺序
先按Sorting Layer 排布,新的排在旧的前面
再按Layer中的Order排布,Order越大越在前面
最后按在simple模式下,Unity 按照精灵相对于摄像机的距离(沿着摄像机视图的方向)的顺序渲染精灵,里摄像机越近越靠前
标签:匹配,一篇,int,捕获,笔记,只是,str,字符串,string From: https://www.cnblogs.com/bkbbrokenboy/p/17036772.html