2D游戏物体使用Instantiate带来的旋转问题

解决由2D游戏物体使用Instantiate生成的子弹prefabs的方向与玩家指向不一致的问题。
首先说一句。在这里,没有父节点!!!!所以不是父节点导致的,与其他文章并不同。
其次,我的左右方向键并不是控制物体移动的,仅仅是用来旋转坦克的。
另外玩家(坦克)和子弹的旋转角度是一模一样的,但是方向始终不一样
在这里插入图片描述
在这里插入图片描述
如上两图,Bullet(子弹)和Player(坦克)的Rotation是一样的,但是朝向是完全不一样的,看下图。(下图是一直按左键,旋转了坦克的指向,再进行发射子弹)
在这里插入图片描述
如上图,可以发现,坦克的炮台朝向是左上方的,可是由鼠标左键发射出来的子弹确实朝向左下角移动的。一开始我使用的是下面这个代码。
Instantiate(Bullet,this.transform.position, this.transform.rotation)

后来尝试了很多种方法
1.Vector3 BulletVector = transform.rotation.eulerAngles //先将坦克的rotation转换成一个向量
Instantiate(Bullet,this.transform.position, Quaternion.Euler(BulletVector))//再使用Quaternion.Euler将这个向量转换成四元数,并把这个四元数作为参数放进去。
2.生成子弹的时候先不进行方向的旋转,生成了之后再将它进行旋转。
Instantiate(Bullet,this.transform.position, Quaternion.identity)//这里生成没有旋转方向
a.transform.localEulerAngles = BulletVector; //在这里才将坦克的rotation转换成的向量赋值给子弹
3.也想过不在控制坦克发射子弹的脚本A处生成子弹,而是另起一个脚本B,通过按下鼠标左键再调用脚本B的某个函数来生成子弹。但发现这样更加不行,生成物体的位置、旋转更加难以赋值。

后来,我仔细的发现到了他们的Rotation是一样的,但是子弹的旋转度数却是坦克的两倍。即坦克选择45°,子弹旋转了90°

于是我将初始化子弹的旋转方向/2。使得子弹的Rotation是坦克的一半
BulletVector.z = BulletVector.z / 2; //
再调用生成子弹的函数
Instantiate(Bullet,this.transform.position,Quaternion.Euler(BulletVector),GetBullet);
在这里插入图片描述
如上图,问题就解决了。此时在观察坦克和子弹的Rotation
在这里插入图片描述
在这里插入图片描述
这是笔者遇到这个问题后,解决的方法,希望能帮助到大家
同时笔者认为这个解决方法并不算是从原理上解决,非常希望有大佬能说说为什么会产生这个BUG或者是提出不同的解决方案
感谢大家!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值