Unity2D:有多个对象围绕SAME中心旋转,但从偏移位置开始

时间:2019-02-21 11:37:24

标签: c# unity3d

我希望我的游戏中的三个浮动2D平台围绕SAME中心旋转。我是这样实现的:

public GameObject Object;

public float RotateSpeed;
public float Radius;

private Vector2 _centre;
private float _angle;

private void Start()
{
    _centre = transform.position;
}

private void Update()
{

    _angle += RotateSpeed * Time.deltaTime;

    var offset = new Vector2(Mathf.Sin(_angle), Mathf.Cos(_angle)) * Radius;
    Object.transform.position = _centre + offset;
}

它工作得很好,但是-仅适用于一个平台。如果我向混合中添加更多平台,它们要么全部从我们围绕中心的假想圆内的同一位置开始,要么,如果使它们偏移,它们都将以不同的中心旋转(如果偏移为x = 2,则中心也偏移2)。我如何说3个平台绕同一个中心绕圈,但从该圈的3个不同起点开始? (例如0°,180°,270°)左右? (当前,所有3个都从0开始)

谢谢

编辑:

这就是我希望ti旋转的方式。 4个矩形是平台。它们都围绕假想中心旋转。它们的速度相同,因此永不彼此接近。此外,他们都保持直立。蓝线和红线也是虚构的。中心没有任何物体。希望对您有帮助

enter image description here

2 个答案:

答案 0 :(得分:1)

将变量private float _angle;定义为公共变量:public float _angle;

此后,通过单击脚本附加到的对象,转到检查器,然后查找名为“ angle”的变量。针对每个平台将此变量更改为不同的角度。

答案 1 :(得分:0)

这是因为Vector2 _centre被实例化为对象的初始位置,请尝试获取轴的变换而不是获取对象本身的变换

public float RotateSpeed;
public float Radius;

public Transform _centre; // in the inspector input the pivot transform
public float _angle; // set it in the inspector
// private float _angle; use this with the code in the start method

private void Start()
{
    /*
    _angle = Mathf.asin((pivot.position.x - transform.position.x)/Radius);
    */
}

private void Update()
{

    _angle += RotateSpeed * Time.deltaTime;

    var offset = new Vector2(Mathf.Sin(_angle) * Radius, Mathf.Cos(_angle)) * Radius;
    transform.position = _centre + offset;
}

确保将平台围绕旋转枢轴放置在一致的位置。