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

时间:2016-05-04 03:28:16

标签: c# math unity3d 2d sprite

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

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

此外,我需要将脚本放在球上,以便当球停止移动时,可以从该位置再次射击。

以下是我认为的解决方案,但无法解决以下问题:

  

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

     

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

我还需要在点击时使用鼠标位置,就像我已经发生移动球并使其在点击时进行运动并锁定它以便你无法拉动它比指定的浮动金额还要多。

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

1 个答案:

答案 0 :(得分: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语句,这应该只涵盖一切。我希望这至少有点帮助。