UE4 2D射击游戏Sprite朝向鼠标往复摆动问题求助
嘿,我来帮你解决这个UE4 2D Sprite旋转朝向鼠标的问题!从你的描述和蓝图来看,核心问题大概率出在坐标系理解偏差和旋转轴/角度计算的细节上,咱们一步步捋清楚:
1. 先纠正一个关键误区:2D旋转的轴选错了!
你提到要让Sprite绕Y轴旋转,但在UE4的2D游戏里,平面内的360度圆周旋转应该是绕Z轴进行的!绕Y轴旋转会让Sprite前后翻转,这绝对不是你要的效果——这可能是导致旋转异常摆动的核心原因之一。
2. 用ATAN2而不是ATAN,获取完整的360度角度
ATAN函数只能返回-90°到90°的角度,当鼠标移动到Sprite的左侧时,它会通过反转角度来“凑”结果,这就会导致Sprite往复摆动。而ATAN2可以根据X和Y的正负值,返回0°到360°(或-180°到180°)的完整角度,完美解决摆动问题。
3. 正确转换鼠标坐标:屏幕空间→世界空间
你的蓝图里直接用了鼠标的屏幕坐标来计算方向,但屏幕坐标和Sprite的世界坐标不在同一空间,必须先把鼠标位置转成世界空间坐标:
- 用
Get Mouse Position on Viewport获取屏幕坐标 - 接着用
Deproject Screen to World把屏幕坐标转成世界空间位置(注意要把Z值设置成和Sprite所在的Z轴高度一致,避免Z轴方向的干扰)
4. 修正初始朝向的角度偏移
你说Sprite默认状态下圆形部分朝上,而UE4中Sprite的默认Forward方向(X轴)是向右的。所以当你计算出鼠标的方向角度后,需要减去90°(或者加上270°)来修正这个偏移,让圆形部分准确朝向鼠标。
给你一套完整的蓝图实现步骤
按这个来绝对能解决问题:
- 获取Sprite的世界位置:
Get Actor Location - 获取鼠标的世界位置:先
Get Mouse Position on Viewport,再Deproject Screen to World,取返回的Location(记得把Z值改成和Sprite的Z一致) - 计算方向向量:
鼠标世界位置 - Sprite世界位置,得到一个Vector - 用
ATAN2节点,输入方向向量的Y值作为第一个参数,X值作为第二个参数(UE4的2D坐标系里,Y是向上,X是向右,顺序别搞反!) - 把弧度转成度数:
Radians to Degrees节点 - 调整角度偏移:用
-节点,把得到的度数减去90°(因为Sprite默认朝上,对应UE4坐标系的90°方向) - 设置Sprite的旋转:用
Make Rotator节点,把Z轴值设为调整后的度数,然后用Set Actor Rotation(选择世界空间)
最后验证一下
如果按上面的步骤做,你会发现Sprite能360°跟随鼠标旋转,而且圆形部分准确朝向鼠标。之前的往复摆动是因为用了错误的旋转轴或者ATAN函数,角度差90°则是因为Sprite初始朝向和UE4默认坐标系的差异。
内容的提问来源于stack exchange,提问作者Karl Arthur Smink
相关产品推荐
相关产品推荐

