Unity3d 统一-手臂旋转和翻转、身体翻转和射击问题-2d射手

Unity3d 统一-手臂旋转和翻转、身体翻转和射击问题-2d射手,unity3d,2d,flip,Unity3d,2d,Flip,我刚开始玩一个小的射击游戏,但是我的角色有问题。手臂必须旋转360°,但身体只能向右或向左旋转(取决于鼠标旋转手臂的位置) 到目前为止,我得到的是你在下面的视频中看到的,但我有两个大问题,在教程的帮助下 我可以旋转和翻转手臂,但不能转动身体 而且,当它向右发射时,子弹会正确地从我创建的火力点退出,但在手臂向左翻转后,子弹(和武器发射)不再对齐 我尝试过的方法是否不是解决此问题的最佳方法? 我感谢你的帮助 游戏链接: 下面是我的手臂旋转脚本: 使用系统集合; 使用System.Collecti

我刚开始玩一个小的射击游戏,但是我的角色有问题。手臂必须旋转360°,但身体只能向右或向左旋转(取决于鼠标旋转手臂的位置)

到目前为止,我得到的是你在下面的视频中看到的,但我有两个大问题,在教程的帮助下

  • 我可以旋转和翻转手臂,但不能转动身体

  • 而且,当它向右发射时,子弹会正确地从我创建的火力点退出,但在手臂向左翻转后,子弹(和武器发射)不再对齐

我尝试过的方法是否不是解决此问题的最佳方法?

我感谢你的帮助

游戏链接:

下面是我的手臂旋转脚本:

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类:单一行为
{
撒布者撒布者;
无效唤醒()
{
spriteRend=GetComponent();
}
无效更新()
{
AimArmAtMouse();
}
void airmatmouse()
{
Vector2 mousePosition=(Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 armToMouse=鼠标位置-(Vector2)transform.position;
浮点旋转z=矢量2.符号角度(transform.right,armToMouse);
变换。旋转(0f,0f,旋转Z);
翻转臂(Vector2.SignedAngle(transform.right,Vector2.right));
}
无效翻转臂(浮动旋转)
{
如果(旋转<-90f | |旋转>90f)
{
spriteRend.flipY=true;
}
其他的
{
spriteRend.flipY=false;
}
}
}

这是因为你在翻转精灵时没有翻转火点。我重新编写了脚本以包含对firepoint的引用。我还添加了一个“FlipFirePoint”函数,该函数由“FlipArm”函数调用。它应该可以解决对齐问题

using UnityEngine;

public class ArmRotation : MonoBehaviour
{
SpriteRenderer spriteRend;
public Transform firePoint;

void Awake()
{
    spriteRend = GetComponent<SpriteRenderer>();
}

void Update()
{
    AimArmAtMouse();
}

void AimArmAtMouse()
{
    Vector2 mousePosition = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
    Vector2 armToMouse = mousePosition - (Vector2)transform.position;
    float rotationZ = Vector2.SignedAngle(transform.right, armToMouse);
    transform.Rotate(0f, 0f, rotationZ);
    FlipArm(Vector2.SignedAngle(transform.right, Vector2.right));
}

void FlipArm(float rotation)
{
    if (rotation < -90f || rotation > 90f)
    {
        spriteRend.flipY = true;
        FlipFirePoint(true);
    }
    else
    {
        spriteRend.flipY = false;
        FlipFirePoint(false);
    }
}

void FlipFirePoint(bool flip)
{
    var pos = firePoint.localPosition;
    pos.x = Mathf.Abs(pos.x) * (flip ? -1 : 1);
    firePoint.localPosition = pos;
}

}
使用UnityEngine;
公共类:单一行为
{
撒布者撒布者;
公共转换点;
无效唤醒()
{
spriteRend=GetComponent();
}
无效更新()
{
AimArmAtMouse();
}
void airmatmouse()
{
Vector2 mousePosition=(Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 armToMouse=鼠标位置-(Vector2)transform.position;
浮点旋转z=矢量2.符号角度(transform.right,armToMouse);
变换。旋转(0f,0f,旋转Z);
翻转臂(Vector2.SignedAngle(transform.right,Vector2.right));
}
无效翻转臂(浮动旋转)
{
如果(旋转<-90f | |旋转>90f)
{
spriteRend.flipY=true;
FlipFirePoint(真);
}
其他的
{
spriteRend.flipY=false;
FlipFirePoint(错误);
}
}
无效翻转火力点(布尔翻转)
{
var pos=firePoint.localPosition;
位置x=数学绝对值(位置x)*(翻转?-1:1);
firePoint.localPosition=pos;
}
}

@Sean,我将主体与手臂分开,并制作了一个新的脚本,仅用于身体旋转,但现在发生在我身上的是:

守则:

void Update()
{
    Flip();
}

void Flip() 
{
    Vector3 theScale = transform.localScale;
    Vector3 pos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0);
    float WorldXPos = Camera.main.ScreenToWorldPoint(pos).x; 

    if (WorldXPos > gameObject.transform.position.x)
    {
        theScale.x = 1;
        transform.localScale = theScale;
    }
    else
    {
        theScale.x = -1;
        transform.localScale = theScale;
    }
}}

“快到了,但还没到,我需要谢谢,”肖恩。我应用了你修改过的代码,现在我得到了这个:。它在翻转,但不是在枪口附近。我遗漏了什么???@tigrev在FlipFirePoint函数中,替换
pos.x=Mathf.Abs(pos.x)*(flip?-1:1)
pos.y=Mathf.Abs(pos.y)*(翻转?-1:1)