Unity2D:旋转对象并保持在前方

时间:2018-07-02 13:06:02

标签: unity3d rotation

我尝试将围绕移动物体的z轴旋转运动归档,但始终失败,始终保持“向前看”。所以它应该看起来像这样: enter image description here

与我最接近的是:

transform.RotateAround(targetPosition,Vector3.forward,moveSpeed);

但是它并没有一直保持在“前方”。

enter image description here

有人可以帮我吗?

谢谢。

最诚挚的问候。

3 个答案:

答案 0 :(得分:1)

首先存储当前旋转,然后围绕点旋转,最后应用上一个旋转。

var rot = transform.rotation;
transform.RotateAround(targetPosition, Vector3.forward, moveSpeed);
transform.rotation = rot;

答案 1 :(得分:1)

如果您的对象(“闪电”)没有世界旋转,即您的示例图片似乎暗示着与世界轴线对齐,那么最简单的方法就是将世界旋转设置为四元数标识:

    transform.rotation = Quaternion.identity;

请注意,如果图像的父对象旋转,则图像将不会旋转。它实际上将“广告牌”您的闪电对象。如果要使闪电与父对象对齐,请尝试执行以下操作:

    transform.rotation = transform.parent.rotation;

答案 2 :(得分:0)

一个简单的解决方案就是操纵实际坐标并忽略旋转^^如果一个对象移动并且您希望它围绕它旋转,只需将其设为子对象即可。

这是3D解决方案,我们围绕Y旋转:

  void Start() { angle = 0.0f }

  void Update() {
       angle += speed * Time.deltaTime; //Your starting angle that will be modified every frame
       CheckAngle(ref angle);

       float x = Mathf.Cos(angle * Mathf.Deg2Rad) * Radius;
       float z = Mathf.Sin(angle * Mathf.Deg2Rad) * Radius;
    }

    static void CheckAngle(ref float Angle) //It should probably return a value by it's name here tho not ref, not sure which is the correct way of doing this
    {
       if (Angle > 360) //You don't want your angle to go past the boundaries of an INT
           Angle = 0;
    }