unity3d - 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;
}
}
}
解决方案
这是因为您在翻转精灵时没有翻转火点。我重新编写了您的脚本以包含对火点的引用。我还添加了一个由您的“FlipArm”函数调用的“FlipFirePoint”函数。它应该可以解决您的对齐问题。
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;
}
}
推荐阅读
- flutter - 如何设置桌面应用程序窗口的初始大小和位置?
- sql - SQL Server 中这两个 AND 运算符有什么区别?
- java - 了解 Java 迭代器示例
- reactjs - 将数组传递给组件
- java - 带有 Maven 的 Oracle JDBC 项目:在 IDE 中运行良好,但在命令行中运行 ClassNotFoundException
- android - Align Alignment.bottomCenter 在 Row 中没有帮助
- arduino - arduino,使用 SD 配置文件中的数据设置以太网和网络
- python - 如何使用 matplotlib ArtistAnimation 绘制直方图或条形动画?
- haskell - haskell中类型的函数应用程序操作数($)?
- matlab - 在 MATLAB 上使用持久变量