我希望我的游戏中的三个浮动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个矩形是平台。它们都围绕假想中心旋转。它们的速度相同,因此永不彼此接近。此外,他们都保持直立。蓝线和红线也是虚构的。中心没有任何物体。希望对您有帮助
答案 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;
}
确保将平台围绕旋转枢轴放置在一致的位置。