Unity-手臂旋转和翻转,身体翻转和射击的问题-2D射击游戏

提格列夫

我从一个小型射击游戏开始,但是我的角色有问题。手臂必须旋转360º,但身体只能向右或向左旋转(取决于鼠标在哪里旋转手臂)。

到目前为止,您能在下面的视频中看到,但是在教程的帮助下,我遇到了两个大问题。

  • 我能够旋转并翻转手臂,但不能旋转身体。

  • 另外,当它向右射击时,子弹会从我创建的火点正确退出,但是在武器向左翻转后,子弹(和武器射击)不再对齐。

我尝试过的这种方法对这个问题不是最好的吗?

我感谢您的帮助。

游戏链接:https : //vimeo.com/310853740

这是我的手臂旋转脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ArmRotation : MonoBehaviour
{
    SpriteRenderer spriteRend;

    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;
        }
        else
        {
            spriteRend.flipY = false;
        }
    }
}
肖恩·凯里(Sean Carey)

这是因为在翻转精灵时不会翻转火点。在此处输入图片说明我重新编写了脚本,以包含对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;
}

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章