【Unity】Unity开发中的坑

前言

开个坑记录一下开发以来遇到的一些坑,给大伙避避。本文持续更新!

1. 复用对象时,Trail Renderer会产生诡异拖尾的情况

在本次项目中,我的子弹对象使用了对象池复用bullet对象,这样考虑到bullet有tail renderer的缘故,每次复用,若正常先显示对象后改变坐标,则会在场景中出现很明显的拖尾效果,这明显不是我们想要的,下图对比正常我们需要的效果,以及出现问题的效果
错误效果
异常效果
正确效果
正常效果
这种错误情况出现的原因主要是,Trail Renderer只要对象坐标进行了移动就会产生拖尾效果,此时应该在修改完坐标后,手动去Clear一下Trail Renderer的轨迹,伪代码如下

Bullet bullet = Pool.Get(); // 从对象池取出对象
bullet.transform.position = muzzle.transform.position; // 修改对象坐标

bullet.GetComponent<TrailRenderer>().Clear(); // 手动清除一下修改坐标后TrailRenderer的遗留轨迹 **这里就是需要新增的地方**

2. 修改Rigidbody2D的Velocity不生效的情况

同样是上面对象池的情况,在取出来一个对象后,需要给对象的Rigidbody赋予一个初速度的情况,由于我本人习惯在初始化完成后,才会将对象的active设为true,所以才会碰上这个bug,我的伪代码如下

Bullet bullet = Pool.Get(); // 从对象池取出对象

bullet.GetComponent<Rigidbody2D>().Velocity = TargetVelocity; // 设置刚体速度
bullet.gameobject.SetActive(true);

这种情况,在对象还未设置active为true之前就将刚体速度设置好,导致的结果就是velocity设置后,刚体的sleep state依旧是asleep,由此velocity就无法成功设置上,就会出现一个奇怪的现象,明明对象activetrue的,但刚体却是asleep状态,相反对象activefalse的时候刚体反而是awake,解决方法就是先将gameobject的active设为true后再对其刚体进行赋值。

Bullet bullet = Pool.Get(); // 从对象池取出对象

bullet.gameobject.SetActive(true);
bullet.GetComponent<Rigidbody2D>().Velocity = TargetVelocity; // 设置速度

未完待续

后续不定期更新文章

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值