Unity3d 统一-手臂旋转和翻转、身体翻转和射击问题-2d射手
我刚开始玩一个小的射击游戏,但是我的角色有问题。手臂必须旋转360°,但身体只能向右或向左旋转(取决于鼠标旋转手臂的位置) 到目前为止,我得到的是你在下面的视频中看到的,但我有两个大问题,在教程的帮助下Unity3d 统一-手臂旋转和翻转、身体翻转和射击问题-2d射手,unity3d,2d,flip,Unity3d,2d,Flip,我刚开始玩一个小的射击游戏,但是我的角色有问题。手臂必须旋转360°,但身体只能向右或向左旋转(取决于鼠标旋转手臂的位置) 到目前为止,我得到的是你在下面的视频中看到的,但我有两个大问题,在教程的帮助下 我可以旋转和翻转手臂,但不能转动身体 而且,当它向右发射时,子弹会正确地从我创建的火力点退出,但在手臂向左翻转后,子弹(和武器发射)不再对齐 我尝试过的方法是否不是解决此问题的最佳方法? 我感谢你的帮助 游戏链接: 下面是我的手臂旋转脚本: 使用系统集合; 使用System.Collecti
- 我可以旋转和翻转手臂,但不能转动身体
- 而且,当它向右发射时,子弹会正确地从我创建的火力点退出,但在手臂向左翻转后,子弹(和武器发射)不再对齐
使用系统集合;
使用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)是的,肖恩。就这样!现在它工作得很好。:)再次感谢你!你认为当手臂翻转时,我可以使用同样的方法使主体翻转到另一侧,而不指向和旋转鼠标吗?@tigrev我很高兴它能工作:)如果手臂是主体的子对象,那么你可以访问其父对象的精灵组件并翻转其y值。让我知道这是否有效,如果有效,请单击“接受”:@Sean…现在我让身体旋转并翻转,而不是只在手臂转向另一侧时翻转。也许主体不能是arm的父对象,不能有单独的代码?请参见此处:void FlipMainBody(bool flip){var pos=mainBody.localPosition;pos.y=Mathf.Abs(pos.y)*(flip?-1:1);mainBody.localPosition=pos;}}问题已解决!!我调整了玩家和手臂精灵的原点,使它们合适,现在两者都可以正常工作了。:)