Я працював над аналогічним проектом, заснованим в Zero-G, в якому мені потрібні всі ігрові об'єкти, щоб генерувати та реагувати як на гравітаційну, так і на електромагнітну силу, виходячи з їх об'єму, щільності, маси, енергії та провідності. Я відносно новий в сценаріях, але я змінив сценарій вище, щоб він працював на мене в тривимірному просторі (що стосується гравітації ... майже ...):
using UnityEngine;
using System.Collections;
public class DynamicWeightAnalysis : MonoBehaviour {
//Declare Variables:
//BBB adding volume calculations
//NOPE
//BBB adding density (...does nothing yet...)
public float density;
//BBB NOPE!
//Strength of attraction from your game-object, ideally this will be derived from a calculation involving the objects volume and density, but for now it's entered from the inspector)
public float RelativeWeight;
//BBB Here, we name our target object (s)
GameObject blockALPHA;
//Initialise code:
void Start ()
{
//BBB here, we define our target object by searching for its tag (setup in editor)
blockALPHA = GameObject.FindGameObjectWithTag("Block ALPHA");
}
//Use FixedUpdate because we are controlling the orbit with physics
void FixedUpdate () {
//Declare Variables:
//magsqr will be the offset squared between the object and the planet
float magsqr;
//offset is the distance to the planet
Vector3 offset;
//get offset between each planet and the player
offset = blockALPHA.transform.position - transform.position;
//Offset Squared:
magsqr = offset.sqrMagnitude;
//Check distance is more than 1 to prevent division by 0 (because my blocks are all 1x1x1 so, any closer than 1 and they'd be intersecting)
if (magsqr > 1f)
{
//Create the gravity- make it realistic through division by the "magsqr" variable
GetComponent<Rigidbody>().AddForce((RelativeWeight * offset.normalized / magsqr) * GetComponent<Rigidbody>().mass);
}
}
}
Як бачите, я все ще працюю над цим, в основному всі мої доповнення до цього часу, позначені "BBB", ще не функціонують так, як я хотів би. Але на даний момент це дозволяє моїм об'єктам "блокувати ALPHA" гравітаційно взаємодіяти в 3d з іншими "блоковими ALPHA" об'єктами досить передбачувано. (хоча при розміщенні двох або більше блоків останній завжди є "аттрактором" і залишатиметься нерухомим, поки не станеться зіткнення. Я працюю над ... допомога буде оцінена :)) Сподіваюсь, це допоможе.