场景跳转后,材质丢失
原因:因为没有光照,加入光照即可
无法调用系统的函数
(实际上写的时候发现不能调用这个api,原因是在于自己命名了一个Camera的脚本这样会覆盖系统自带的。)
一些经验总结
- 写完某段功能时要在旁边标上注释
- 不要在update里放那么多东西,封装成函数再放在update里调用,养成好习惯。
了
因为考研很长时间没碰unity再碰unity时的感受:
2022.1.21做gamejam的2d平台跑酷游戏中得到的经验教训:
-
简单的2d平台跑酷游戏好像看似很简单,但是我却眼高手低,以为这些很简单都很好实现。但是事实上是,虽然以前自己做过这些东西,但全都是按照教程去跟着一步一步照猫画虎去做的,做完之后自己并没有抛开教程去复刻一遍,于是导致了这样的情况:
-
每一行代码大概都能看懂在做什么,但是连起来,为什么这么做的逻辑,可能无法完全理解
-
有些东西你抛开教程自己去做然后会发现说,自己忘了一些细节。比如实现跳跃,需要有几个关键点:①不能让玩家在空中连续跳跃多次 ②要实现跳跃后,离地的判断。 ③普通跳跃与蓄力跳跃
两个脚本中的update和fixedupdate存在互相获取值变量时会出现的影响
A脚本中的变量如果是在fixedupdate函数中更新的,而在B脚本中,我们在update函数中去获取A脚本的这个update函数的变量的值,那么此时,两个函数的获取速度会有差异。:
这可能会造成意想不到的影响。
获取玩家输入使用update而不是fixedupdate
使用getkeydown的话,接受玩家的输入不能放在fixedupdate中,否则可能会丢失一瞬间的输入。
粗心的错误
声明某个变量,并在start函数中初始化时,不小心写成了这样的形式:
这样会导致最终无法成功初始化
对象引用对于非静态的字段,方法或属性是必须的
犯的错误如下:首先在类中声明了一个非静态变量
但是此处我却在静态成员函数中声明它:
这里就犯了一个很明显的错误,对于静态成员函数,是不能为非静态成员变量初始化的,也不能调用非静态成员方法。
因为静态成员函数属于整个类,在类实例化对象之前就已经分配空间了,而类的非静态成员必须在类实例化对象后才有内存空间,所以这个调用就会出错,
类里面的方法有兩种表現:一种是直接可以來用的,还有一种是必须实例化以后才能使用的。前者要求在方法生明的時候必須加上static关键字。
简单来说引发这个bug的原因就是调用类里面的非静态方法、成员变量所导致的。
物体跳跃时移动卡墙的问题
此处使用的是改变物体的速度,使其移动的。
一旦锁住其z的旋转,会导致其在移动时,会需要卡住z的旋转角度,从而导致卡墙。
解决方法:
给物体添加光滑的物理材质,给玩家也添加光滑的物理材质。
人物走路遇到很小的坡走不动
因为设置成刚体又锁住了旋转导致走不过去,可以将人物的立方体的碰撞箱改为胶囊体即可。
善用微软官方英文文档解决错误
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference
可以在上面搜索c#的文档
子类希望隐藏父类的变量需加new关键字
如图所示 父类中有一模一样的变量名,如果希望隐藏父类的关键名需加new关键字。
导入包时,物体的层级消失
如下所示
是因为自己做包的人自己设置了层级,但是导出包后再导入的人则会丢失该层级,此处就需要自己手动设置层级。
无法在人物静止时赋予agent速度
想通过直接设置agent的速度来模拟击退效果,结果发现当人物处于静止状态时,agent的速度赋值不上的问题。但是当人物处于移动状态时,却能正常赋值。
解决方法:禁用Auto Braking即可。