Я работал над аналогичным проектом, основанным на 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», еще не функционируют так, как мне бы хотелось. Но как бы то ни было, он позволяет моим «блочным АЛЬФА» объектам гравитационно взаимодействовать в 3d с другими «блочными АЛЬФА» объектами довольно предсказуемым образом. (хотя при размещении двух или более блоков последний всегда является «аттрактором» и будет оставаться неподвижным до тех пор, пока не произойдет столкновение. Над этим я работаю ... помощь будет принята с благодарностью :)) Надеюсь, это поможет ..