Unity3d Unity 2D射手-手臂旋转

Unity3d Unity 2D射手-手臂旋转,unity3d,transform,unityscript,unity3d-2dtools,Unity3d,Transform,Unityscript,Unity3d 2dtools,我正在制作一个2D平板游戏,玩家的手臂指向鼠标光标。该装置用于瞄准玩家的武器。但是,我在旋转手臂时遇到一些小故障 我知道产生这些错误的原因:层次结构中的手臂是播放器的子对象,我对播放器所做的是,每当它沿指定方向移动时,翻转其transform.localScale.x值,以便播放器精灵沿给定方向查看。因为手臂是玩家的孩子,它自己的变换也被翻转,使它看起来和玩家的方向相同,这就是我想要的。但是,这会导致手臂旋转出现一些错误。因为手臂的transform.localScale.x值被翻转了,所以旋转

我正在制作一个2D平板游戏,玩家的手臂指向鼠标光标。该装置用于瞄准玩家的武器。但是,我在旋转手臂时遇到一些小故障

我知道产生这些错误的原因:层次结构中的手臂是播放器的子对象,我对播放器所做的是,每当它沿指定方向移动时,翻转其transform.localScale.x值,以便播放器精灵沿给定方向查看。因为手臂是玩家的孩子,它自己的变换也被翻转,使它看起来和玩家的方向相同,这就是我想要的。但是,这会导致手臂旋转出现一些错误。因为手臂的transform.localScale.x值被翻转了,所以旋转都搞砸了,我不知道如何解决它

下面是一些移动播放器和手臂的示例脚本。它们被简化了,以便你能更好地阅读

//每帧调用一次更新 无效更新{ var input=input.GetAxisHorizontal; 如果输入>0{ 如果!向右{ ChangeOrientionNameObject,新矢量3-1,1,1; facingRight=!facingRight; } } i输入<0{ 不一致{ ChangeOrientionNameObject,新矢量3-1,1,1; facingRight=!facingRight; } } rbody.velocity=新矢量2speed*输入,rbody.velocity.y; } 公共静态void ChangeOrientation游戏对象g,矢量3 changeBy{ var newTransform=g.transform.localScale; newTransform.x*=changeBy.x; newTransform.y*=changeBy.y; newTransform.z*=changeBy.x; g、 transform.localScale=newTransform; } 还有我的手臂旋转脚本:

无效更新{ //轮换 Vector3鼠标位置=Input.mousePosition; mousePos.z=0; Vector3 objectPos=Camera.main.WorldToScreenPoint transform.position; mousePos.x=mousePos.x-objectPos.x; mousePos.y=mousePos.y-objectPos.y; 浮动角度=Mathf.Atan2mousePos.y,mousePos.x*Mathf.Rad2Deg; transform.rotation=四元数.Eulernew矢量30,0, playerUnmovementController.facingRight?角度:角度; }
感谢您提供的帮助。

添加您用于Unity3D的组件,以便我们能更好地帮助您。我们不知道您是在使用精灵组件,还是在使用单个对象来构建游戏玩家。提示:不要让控件计算每次按下更新键。您有一个静态方法。改变方向,它被称为每帧。通常情况下,这很好,但每次创建多个对象都会对性能造成严重影响。正在创建和分配新的转换。如果你进入一个大项目。这可能是一场噩梦。不,不是。它不是每帧都创建的。当然不是,只有在水平方向上按住一个关键点时,它才会每帧创建一次。