如何拉回来拍摄2D精灵? (C#+ Unity)

问题描述 投票:-1回答:1

我在制作如何在我的2D圆形精灵上进行简单的回退拍摄脚本时遇到了一些麻烦,我知道它背后的想法,但我无法准确地计算出代码。

我已经使用Unity的2D包装资产中的愤怒的小鸟克隆脚本工作了一半,但是它依赖于另一个物体并且与弹簧接头相连,它在某种程度上起作用,但是如果我尝试慢慢地拍摄它角度,它将向后射击,而不是它想要的方式。

此外,我需要脚本只是在球上,这样当球停止移动时,它可以从该位置再次射击。

这是我正在考虑的解决方案,但无法确定以下的确切代码:

Mathf.Atan2(ballStartY - ballCurrentY,ballStartX - ballCurrentX)。然后可能通过以某种方式添加180来翻转它?

然后使用角度将其分解为x和y分量(xSpeed = cos(角度)* force)和(ySpeed = sin(angle)* force)或许?

我还需要在点击时使用鼠标位置,就像我已经发生移动球并在点击它时使其运动并锁定它以便你不能将其拉回到指定的浮动量之外。

我非常感谢你能给予的任何帮助!感谢大家!

c# math unity3d 2d sprite
1个回答
0
投票

如果我理解正确你有三个问题使对象移动,让对象在停止时被重新抛出,以及如何拉动对象来启动它。

所以对于第一个,如果你旋转球,使局部绳索的x轴在你想要射击的方向,那么你可以使用这个代码使球向前飞行,以向量3指示的某个幅度。力模式是冲动,因为你想要瞬时力。

gameObject.GetComponent<Rigidbody>().AddRelativeForce(9,0,0, ForceMode.Impulse);

通过查看功能,旋转应该很简单。这样的文档是here然后你用四元数函数旋转180。你使用mouse position得到这样的东西:

rotation = Quaternion.Euler(180, 0, 0) * Input.mousePosition;
transform.LookAt(Rotation);

然后只需使用if查找是否单击以激活它。如果你想显示它被拉回使用Vector3.Distance和if语句,如:

if(Vector3.Distance(thisGameobeject, someParentObjectThatWontMoveWhenPulledBack)<50)
{pull further back}

至于检查你是否被停止,你可以使用带有Rigidbody.velocity的if语句,这应该只涵盖所有内容。我希望这至少有点帮助。

© www.soinside.com 2019 - 2024. All rights reserved.