Text做成预制件的话可能会产生无法调用的情况。此时可以声明一个私有的对象。然后通过该对象去找到(find)组件,然后就可以用该对象去调用函数。
代码管理尽量低耦合,高聚合,减少代码之间的依赖关系 提供一个接口,实现一对多,减少多个代码直接操作组件。
当有if判断的情况时,代码的先后
顺序就显得尤为重要。
分割线-//////////
对象池训练
当利用ai导航时,预制体的位置如果距离目的地太远会报错,导致setdestination函数报错,解决方法就是让预制体的初始位置与生成位置相同即可如图
该预制体的位置x为700,导致在创建敌人的时候生成导航点时就会报错,此时无论如何对预知体进行位置重置都无法解决。
解决时间,2024/7/1 3.33
思考🤔如何避免这种情况呢?
在生成物体的同时直接指定物体的位置。及直接给Instantiate函数传入位置。
当使用对象池类时,即将对象池封装在一个脚本中,此时如果对象池中的对象被全部取出。在脚本与脚本传递数据的过程中,会出现值丢失的现象,因为对象池数量不够时创建对象它的时间可能会大于另一个脚本调用的一帧的时间,所以会造成数据缺失。
如图,一开始创建了十个对象。但是敌人的数量大于十。就会导致数据丢失的现象。
🤔解决办法是一开始创建足够多的对象。或者使用携程锁来解决,也可以将计算数据放在对象池内,但是这样就破坏了对象池的封装性。
对象池三大部件,创建对象,返还对象,重置对象,重置一般由组件自行控制,而创建与返还由对象池控制。
如果游戏中需要唯一的使用脚本,那么将该脚本挂到一个组件上,再用其他的脚本引用只需将那个挂有使用脚本组件拉路其他的脚本之中即可。要保证该使用脚本脚本在全局中的唯一性。
再用射线检测的方法实现一些功能时,可能会因为点击按钮而造成误测,在此我们可以使用。Ispointerovergameobject()这个函数来判断是否有其他的程序在执行,如果有,那就跳过当前帧从而解决射线误测。
静态工具类
当想要一个函数返回两种数据时,可以使用元组这种数据类型。
2024,11,5
string inputText;//如果要在if作用域外使用变量应当在if外先定义
//只输入第一个输入框没反应?text应该是"",不能写null
if (RotateInput.text != "")
{
inputText = InputField.text + "," + RotateInput.text;
}
else
{
inputText = InputField.text;
}
//用户需要自己输入","
//inputText = InputField.text+RotateInput.text;