随机数生成

在几秒内连续生成随机数的情况

1
2
3
4
5
6
7
  Random.InitState((int)Time.time); //使用时间作为每次生成的种子,
float randomKey = Random.Range(-5f, 5f); //会生成随机的数字


float randomKey = Random.Range(-5f, 5f); //只会返回一个固定的值

float randomKey = Random.value * 10f - 5f; //只会返回一固定的值

资源释放

对于实现了IDisposable的类来讲,其实例对象都可以通过 using var 来进行对象的获取,这样在超出该对象的作用域后,会默认调用实现的Dispose方法

1
2
3
4
5
6
7
8
       
using var evt = PlayerRegisterEvent.Get(); //使用using在超出作用域后自动调用Dispose()方法

public void Dispose()
{

GameEventPool<T>.Push((T)this);
}

事件系统

如果在项目中使用了自制的事件系统,记得任何被注册event都应该有取消注册的步骤。

具体使用场景,使用场景加载这功能,在异步加载的情况下,会在场景中加载两个场景后删除一个,没有显示的的场景也会运行场景中游戏对象的Awake函数,如果在这里存在事件的注册,之后的运行中,虽然该场景被销毁,但是注册的事件仍然存在,会报错。

该游戏对象被销毁但是仍然试图访问。

进一步延伸,有 回调 方法参与的都要有注册有取消。

++、–和get set函数

应当使用以下操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 int temp = CurrentIndex;
--CurrentIndex;
SwitchGridPage(temp, CurrentIndex); // 使用局部变量的值

public int CurrentIndex {
get {
return this.currentIndex;

}
set
{

if (value <= 0) currentIndex = 1;
else if(value> maxPage) currentIndex = maxPage;
else currentIndex = value;


//刷新文字
RefreshTextContent(currentIndex);
}
}

下面这种用作函数参数的处理方式,第二个参数的样式只能触发set ,不能触发get

1
SwitchGridPage(CurrentIndex,--CurrentIndex); // 使用局部变量的值

英文路径

Unity项目的路径不建议使用中文,在2023.3.20版本中,根目录的上级目录为中文的情况下,导入Cinemachine会在控制台疯狂报错、

复合碰撞体Composite Collider 2D

使用的时候需要有一个父游戏对象,并且将需要进行碰撞体合并的游戏对象作为游戏对象的子对象。

image-20241126205315233

使用的时候会自动在相同游戏对象上生一个RigidBody2D,不过需要手动将rig的类型改为 Static

子游戏对象身上需要有碰撞体组件,在2023的版本中,将 use by Composite改成了红框中的内容

选择为merge就可以实现基本的内容

image-20241126205436786