私はUnityを使用していませんが、この問題はUnity / c#固有のものではないと思います。
あなたが配置したいすべての惑星が親から「依存」していることを考慮してそれを実装することができます、どういうわけか、太陽は除外され、原点に配置されます。
つまり、太陽は(0,0,0)にあり、Planet1は太陽に属し、特定の半径距離にあるため、独自の半径と回転角(常に親に関連)があります。惑星2は親として太陽を持っているかもしれないので、それは「惑星」、または惑星1からその月になります。等々...
この単純なスキームでは、クラスとして簡単に実装できる4つのことを常に管理する必要があります。つまり(テストされていません。コンパイラなしでここに記述しました。構文エラーの可能性を確認してください)。
public class Planet
{
public Planet Parent; //if null, I'm the first in chain
public float OrbitRadius; //From my parent
public float OrbitAngle; //0-360 around my parent
public float Radius; //Planet size
//EDIT:
public Vector3 Position;
public void CalculatePosition()
{
if(Parent == null) this.Position = new Vector(0, 0, 0);
this.Position = Parent.Position + OrbitRadius + Math.Sin(OrbitAngle * Math.PI / 180.0f); //Check if it has to be done for each vector component
}
}
さらに、太陽、惑星、衛星、衛星の衛星を簡単に実装できます:-)
惑星を作成するたびに、その親を割り当て、OrbitRadius >> Radiusのみを考慮してクラス値をランダム化します(>>「大きい」だけでなく、本当に「大きい」という意味です)
これはまた、おそらく再帰関数を扱うための最強の「惑星チェーン」を提供するはずです。
最後のステップとして、すべてのチェーンを歩いて位置を「レンダリング」し、PlanetXの位置を親の位置に段階的に追加して、OrbitAngleのみを処理することができます。ここではSin/Cosの計算が必要ですが、スケールファクターで失うことはありません。
お役に立てれば
編集:ある種のCalculatePositionを追加しましたが、現在は確認できません。概念を明確にするためだけにあり、確実に改善できます。