脚本代码如下
using UnityEngine;
using System.Collections;
//围绕某个物体 转动
public class RotateAroundBehavior : MonoBehaviour
{
private int numOrbiters;
//要围绕哪一个物体旋转
public GameObject sourceObject;
//围绕旋的物体
public GameObject[] orbiters;
//旋转的圆的轨道的大小X
public int orbitRadiusX = 3;
//旋转的圆的轨道的大小Y
public int orbitRadiusY = 3;
//旋转的圆的轨道的大小Z
public int orbitRadiusZ = 3;
//围绕哪一个轴转
public string shaft = "y";
//旋转的速度
public float RoutateSpped = 10;
// Use this for initialization
void Start()
{
numOrbiters = orbiters.Length;
Init();
}
// Update is called once per frame
void Update()
{
for (int i = 0; i < numOrbiters; i++)
{
if (i < orbiters.Length)
{
UpdateOrbiterPosition(i);
}
}
}
void Init()
{
//set initial positions of balls
//1 ball can be anywhere
//2 balls should be opposite
SetOrbiterPositions();
}
void AddOrbiter()
{
numOrbiters++;
SetOrbiterPositions();
}
void RemoveOrbiter()
{
if (numOrbiters > 0)
{
numOrbiters--;
}
SetOrbiterPositions();
}
void SetOrbiterPositions()
{
float angleDiv = 360f / (float)numOrbiters;
if (numOrbiters > orbiters.Length)
{
angleDiv = 360f / orbiters.Length;
}
Vector3 orbitPos = new Vector3(transform.position.x + orbitRadiusX, transform.position.y+ orbitRadiusY, transform.position.z+ orbitRadiusZ);
for (int i = 0; i < numOrbiters; i++)
{
if (i < orbiters.Length)
{
orbiters[i].GetComponent<Transform>().localPosition = orbitPos; //move to initial pos
if (shaft == "x")
{
orbiters[i].GetComponent<Transform>().RotateAround(sourceObject.transform.position, Vector3.left, angleDiv * i);//rotate
}
else if (shaft == "y")
{
orbiters[i].GetComponent<Transform>().RotateAround(sourceObject.transform.position, Vector3.up, angleDiv * i);//rotate
}
else if (shaft == "z")
{
orbiters[i].GetComponent<Transform>().RotateAround(sourceObject.transform.position, Vector3.forward, angleDiv * i);//rotate
}
}
}
}
void UpdateOrbiterPosition(int orbiter)
{
if (shaft == "x")
{
orbiters[orbiter].GetComponent<Transform>().RotateAround(sourceObject.transform.position, Vector3.left, RoutateSpped * Time.deltaTime);
}
else if (shaft == "y")
{
orbiters[orbiter].GetComponent<Transform>().RotateAround(sourceObject.transform.position, Vector3.up, RoutateSpped * Time.deltaTime);
}
else if (shaft == "z")
{
orbiters[orbiter].GetComponent<Transform>().RotateAround(sourceObject.transform.position, Vector3.forward, RoutateSpped * Time.deltaTime);
}
}
}
项目结构:
参数设置列表