因此,我正在尝试制作一个程序,以使像这样的领域中的小行星相互吸引:https://www.youtube.com/watch?v=iAWZwTWJmhM
我有两个程序可以做到这一点,一个程序随机生成小行星,另一个程序对每个物体施加重力。问题在于,小行星越靠近它们就会越快,直到它们达到子弹速度,并且所施加的力导致它们相互射击并消失。有没有办法让他们消除接触力量。我尝试了Rigidbody.isKinematic,但是这使小行星保持静止,而不是像在太空中那样旋转。请在下面发布代码,但这是我正在使用的代码的两个项目。https://www.youtube.com/watch?v=Ouu3D_VHx9ohttps://www.youtube.com/watch?v=6rTfZ2ox2_g
小行星生成器的代码。我添加了随机比例尺生成器。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AsteroidFieldGenerator : MonoBehaviour { public Transform AsteroidPrefab; public int fieldRadius = 50; public int asteroidCount = 60; public float SizeMinPercent = 1; public float SizeMaxPercent = 100; // Start is called before the first frame update void Start() { for (int loop = 0; loop < asteroidCount; loop++) { Instantiate(AsteroidPrefab, Random.insideUnitSphere * fieldRadius, Quaternion.identity); AsteroidPrefab.transform.localScale = Vector3.one * (Random.Range(SizeMinPercent, SizeMaxPercent) / 100); } } // Update is called once per frame void Update() { } }
应用重力程序:
'''
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Attractor : MonoBehaviour { const float G = 667.4f; public static List<Attractor> Attractors; public Rigidbody rb; void FixedUpdate() { foreach (Attractor attractor in Attractors) { if (attractor != this) Attract(attractor); } } void OnEnable() { if (Attractors == null) Attractors = new List<Attractor>(); Attractors.Add(this); } void OnDisable() { Attractors.Remove(this); } void Attract(Attractor objToAttract) { Rigidbody rbToAttract = objToAttract.rb; Vector3 direction = rb.position - rbToAttract.position; float distance = direction.magnitude; if (distance == 0f) return; float forceMagnitude = G * (rb.mass * rbToAttract.mass) / Mathf.Pow(distance, 2); Vector3 force = direction.normalized * forceMagnitude; if (distance == 0) force = force * 0; rbToAttract.AddForce(force); } }
'''
所以我正在尝试制作一个程序,以使像这样的领域中的小行星相互吸引:https://www.youtube.com/watch?v=iAWZwTWJmhM我有两个程序可以做到这一点,一个随机...
您必须施加阻尼(阻力)力,类似于说大气阻力(空气阻力)。然后,系统的总能量将减少,这使粒子更有可能聚集在一起。因此,基本上,运动方程应该类似于