Unity_触摸屏_围绕某个物体做行星轨道转动

脚本代码如下

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);
		}

	}
}

 项目结构:

 参数设置列表

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值