苹果给推特开后门!App Store 唯一的单字母应用“X”来了https://blog.csdn.net/csdnsevenn/article/details/132064765
【按照 App Store 的相关规定,应用名称至少需要由两个字符组成。】
难道是单个字符属性太强,所以抢眼?不得不联想允许单个字符命名后,应用市场的杂乱。
最后还是通过了,想到了电影肖申克的救赎里我很喜欢的一句台词:“Exception can be made”。
文章最后还讨论到了侵权问题,涉及知识产权的保护。
用到的一些关于Unity开发的插件
【GitHub Copilot】 编程开发插件挺好用
自定义扩展Unity内置类方法,同理推测
设置VSCODE代理:
Editor文件夹下脚本仅限Unity使用及测试。
using UnityEditor命名空间的脚本需要放在Editor文件夹中,即视为不打入安装包内。
编辑器窗口Inspector显示中文标签: 【两个脚本】
using UnityEditor;
using UnityEngine;
[CustomPropertyDrawer(typeof(ChineseLabel))]
public class ChineseLabelDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
var att = attribute as ChineseLabel;
EditorGUI.PropertyField(position, property, new GUIContent(att.header), true);
}
}
using UnityEngine;
public class ChineseLabel : HeaderAttribute
{
public ChineseLabel(string header) : base(header)
{
}
}
实现模拟操作 【键盘输入、鼠标点击.....】
C#本身带的类库没有模拟操作函数库,需要用到dll
user32.dll在C:\Windows\System32文件夹
using System.Runtime.InteropServices;
/// <summary>
/// 功能:虚拟按键输入
/// </summary>
public class VirtualKeyboard : MonoBehaviour
{
[DllImport("user32.dll",EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bvk , //虚拟按键
byte bScna , //0
int dwFlags , //0按下,1按住,2释放
int dwExtraInfo //0
);
}
UNiTask:
UniTask是一种用于异步编程的C#库,它扩展了.NET中的Task和await/async模式。与传统的Task和async/await模式相比,UniTask更加轻量级,不需要像Task一样创建和管理线程池。UniTask具有更高的性能,使用更少的内存和CPU资源。此外,UniTask还提供了更多的功能,如取消和超时等功能,这些功能在传统的Task中不容易实现。[2] UniTask还提供了一些方法,如UniTask.Create、UniTask.Defer、UniTask.Lazy、UniTask.Void和UniTask.Action/UnityAction,用于快速生成返回UniTask的异步方法或封装异步委托成Action或UnityAction。
协程和异步的区别:
协程和异步操作都可以用来处理耗时的操作,但是它们的实现方式不同。协程是一种轻量级的线程,可以在执行过程中暂停和恢复,可以用来模拟异步操作。而异步操作则是一种在执行过程中不会阻塞主线程的操作,可以用来处理耗时的操作,比如网络请求和文件读写等。在Unity中,协程通常用来处理一些需要等待一段时间才能执行的操作,比如延迟一段时间执行逻辑或者等待动画播放完成等。而异步操作则通常用来处理一些需要等待外部资源加载完成才能执行的操作,比如加载场景或者加载资源等。
UnityAction action【可简化委托调用。】
原来:
if(action != null)
{
action();
}
优化:
action?.Invoke();
Unity存储数据:
1、文件解析【TXT、XML】
2、PlayerPrefs【类似于字典,里面的存储元素按照键值对(key:value)形式存在】
3、JSON【序列化及反序列化】
4、SQLite【轻量级的、可跨平台跨语言使用的一种数据库,常用于本地存储】
Unity游戏开发之游戏存档方式https://blog.csdn.net/hfh1999/article/details/130006875
面向对象的封装:减少重复语句的出现
【设计模式】:
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、 代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
推荐书目:《大话设计模式》
数据结构:
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。数据结构往往同高效的检索算法和索引技术有关。
推荐:郝斌的数据结构(C语言) Siki学院(教程视频) 游戏蛮牛(技术论坛)
框架:
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。
推荐:MVC框架 PureMVC框架 StrangIOC框架
C# 和 C++ 的区别:
-
C#是一种面向对象的编程语言,而C++既可以面向对象编程,也可以面向过程编程。
-
C#是由微软开发的,主要用于Windows平台上的应用程序开发,而C++是一种跨平台的编程语言,可以用于开发各种类型的应用程序,包括桌面应用程序、嵌入式系统、游戏等。
-
C#是一种托管语言,它需要.NET Framework或.NET Core等运行时环境来运行,而C++是一种非托管语言,它可以直接编译成机器码运行。
-
C#具有自动垃圾回收机制,可以自动管理内存,而C++需要手动管理内存。
-
C#支持多重继承,但是只能通过接口实现,而C++支持多重继承。
-
C#的语法相对简单,易于学习和使用,而C++的语法相对复杂,需要更多的学习和实践。
[教程]Unity专业破坏效果插件RayFire for Unity入门(附插件资源链接)_Ouchdex的博客-CSDN博客RayFire 是一款可以在运行时对 3D 对象进行无限次拆除或切片的插件,还可在编辑模式下对其进行预粉碎。此外,RayFire 还可对模拟对象和拆除的片段提供高级动态模拟控制功能,比如在需要时将其激活。借助风力和旋风力,它可以实现射击、爆炸和侵袭,记录编辑器中的模拟并在运行时播放。........._rayfire for unityhttps://blog.csdn.net/Ouchdex/article/details/124499527?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169139251616800211580576%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169139251616800211580576&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-124499527-null-null.142%5Ev92%5EchatsearchT0_1&utm_term=Unity%20RayFire&spm=1018.2226.3001.4187RayFire:
RayFire 是一款可以在运行时对 3D 对象进行无限次拆除或切片的插件,还可在编辑模式下对其进行预粉碎。此外,RayFire 还可对模拟对象和拆除的片段提供高级动态模拟控制功能,比如在需要时将其激活。借助风力和旋风力,它可以实现射击、爆炸和侵袭,记录编辑器中的模拟并在运行时播放。
【功能1】切割物体(Rayfire Shatter)
Voronoi:规则形碎片
Splinters:尖锐形碎片
Slabs:地板形碎片
Rabial:放射形碎片
Custom:自定义碎片(不推荐)
Slices:切片形碎片
Bricks:砖块形碎片
Voxels:像素形碎片
Tets:不规则混乱形碎片
Decompose:解体形碎片
删除上一次生成的切割网格物体
控制切割后的物体缩放
切割后会隐藏初始模型物体的网格渲染器,新的切割物体位置与初始位置相同
切割并以预制体形式保存的流程:
1、添加Rayfire Shatter组件,并点击Fragment按钮进行切割
得到一个切割好的新物体
2、点击导出网格按钮,得到切割后的模型网格
3、将场景中的切割模型拖拽至Assets文件夹内,预制体自动对应刚刚导出的网格
【功能2】添加刚体及掉落(Rayfire Rigid)
【功能3】破碎再切割成残骸(Rayfire Debris)
【功能4】破碎后的沙尘效果(Rayfire Dust)
【功能5】刀片动态切割物体(Rayfire Blade)
【功能6】连接固定位置,类似于骨骼(Rayfire Connectivity)
【功能7】约束切割物体的运动(Rayfire Restriction)
【功能8】破碎激活器(Rayfire Activator)
【功能9】添加根节点刚体及掉落(Rayfire Rigid Root)
【功能10】爆炸破碎(Rayfire Bomb)
C#中存储值类型数据时推荐使用List。ArrayList存储的是引用类型数据,值类型数据需要通过装箱转换为引用类型存入。使用元素时又会进行拆箱操作,将引用类型的数据转换为值类型,过程中会产生垃圾需要GC回收。
继承、封装和多态(面向对象编程的三个基本特征):
- 继承:可以让子类继承父类的属性和方法,避免了重复编写代码,提高了代码的复用性和可维护性。
- 封装:可以将数据和方法封装在一个类中,对外部隐藏实现细节,提高了代码的安全性和可维护性。
- 多态:可以让不同的对象对同一消息做出不同的响应,提高了代码的灵活性和可扩展性。
untiy优化—脚本优化_utiy_CZandQZ的博客-CSDN博客这次我主要给大家讲一下使用unity中对脚本进行优化。 1 使用最快的方法或者组件 unity里面有几种不同的GetComponent()方法,unity中有3中重载GetComponent(string) , GetComponent() 以及 GetComponent(typeof(T))。最快的版本取决于我们允许的unity的版本。在unity4.0中,GetCompon_utiyhttps://blog.csdn.net/u012565990/article/details/50322765?spm=1001.2014.3001.55021、获取组件推荐使用:GetComponent<T>() 以及 GetComponent(typeof(T))
2、删除空的回调申明(Start、Update)
3、运行时应该避免Find和SendMessage方法
4、禁用未使用的脚本和对象(OnBecameVisible()、OnBecameInvisible())
5、避免对象检索字符串属性(Name和Tag,CompareTag()、Equals())
6、更新、协程和重复调用(ECS,建立依赖关系)
7、尽可能少的改变Transform 值(导致大量的未预料到的矩阵乘法运算)
8、快速的游戏对象空指针检索(!System.Object.ReferenceEquals(gameObject, null))
9、使用sqrMagnitude替代magnitude(避免了开方运算,处理器开销)
【C#电子书】:
C#消除了诸如宏、模板、多重继承和可视化基类的复杂
C#是模块化的(C#代码以程序块——类的方式编写,类包含成员方法)
C#程序在通用语言运行阶段环境(Common Language Runtime)CLR中运行 ,创建运行阶段环境程序的好处在于可移植性
编辑器:编写源代码
机器语言:计算机使用数字(二进制)指令,程序必须从源代码翻译为机器语言才能识别
编译器:生成中间语言(Intermediate Language)IL文件,需要继续编译
CLR:进行最终编译,将可以直的IL代码转换为机器语言
C#语言的组成部分:空白、关键字、字面值、标识符
空白(空格、制表符、换行符、回车)能够提高代码可读性
关键字:专用术语(都有特殊含义,不能命名为变量)
字面值:直观的编码硬值
标识符:关键字和字面值以外的其他单词
空白、关键字、字面值、标识符用于组成表达式和语句
表达式和语句组成程序
变量:计算机内存中被命名的数据存储单元,使用变量名称可以引用存储的信息
随机存储器(RAM):存储计算机信息,具有易失性,计算机开启才具有记忆功能
RAM以MB(兆字节)为单位,1MB = 1024KB(千字节),1KB = 1024Byte(字节)
C#中的引用数据类型:
类、字符串、接口、数组、代表(Delegate)
判断字符串为空不能使用null,要用" "
精确小数16位Decimal数据类型
查找对象,且完成对象之间的调用:
静态类、单例组件、分配引用到预先存在的对象、全局管理系统