Делаю в Unity магнит - через PhysicsOverlap находим, ищем rigidbody и притягиваем к себе. Код
public float radiusdal;
public float forcedal;
void FixedUpdate() {
Collider[] coldal = Physics.OverlapSphere(transform.position, radiusdal);
foreach (var col1 in coldal)
{
if (col1.GetComponent<Rigidbody>())
{
var ux = Vector3.Distance(transform.position, col1.transform.position);
var aux = 0.5f / (ux);
col1.GetComponent<Rigidbody>().AddForce((transform.position - col1.transform.position)* aux* forcedal, ForceMode.Acceleration);
}}}}
Проблема - в коде много GetComponent, и когда на карте больше одного rigidbody - он безбожно тормозит. Как нибудь можно этого избежать? Думается, можно найти все объекты на сцене, вычленить из них те, которые rigidbody, засунуть их в массив. Ну а что дальше? Нам же нужны столкновения, вернее пересечения границы Overlap, а что сделаешь с массивом?
Или пойти другим каким нибудь путем?
У каждого collider есть ссылка на rigidbody к которому он привязан Collider.attachedRigidbody. Так что нет нужды получать ссылку через GetComponent
В приведенном коде можно уменьшить количество вызовов GetComponent<> как минимум в 2 раза.
foreach (var col1 in coldal)
{
Rigidbody colRB = col1.GetComponent<Rigidbody>();
if (colRB != null)
{
var ux = Vector3.Distance(transform.position, col1.transform.position);
var aux = 0.5f / (ux);
colRB.AddForce((transform.position - col1.transform.position)* aux* forcedal, ForceMode.Acceleration);
}
}
Если не ошибаюсь, то обращение к transform через точку, это тот-же GetComponent. Тогда и больше можно ускорить, просто закешировав и все трансформы тоже.
Если элементов много, а магнит один(мало), то пусть объекты проверяются сами на столкновение. И только те у которых есть rigidbody(проверяй это при создании объекта) А начинают притяжение только при срабатывании события столкновения с коллайдером магнита. Причем магниту вообще не надо знать кто к нему притягивается, а вот объектам нужно знать только позицию магнита и силу притяжения.
Код (там три этапа притяжения - чем ближе тем сильнее притягивает)
зачем три этапа? Почему просто не вычислить силу притяжения из расстояния
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В форме у меня есть следующий код
Делаю что-то вроде анкеты, в которой необходимо заполнить все поляКак сделать, чтобы по нажатию кнопки, если не заполнено какое либо поле,...
Как сделать так, чтобы в richtextbox соблюдались все абзацы, пробелы? А не просто сплошной текст(во 2 картинке текст был отформатирован через GUI Visual...
Хочу текст файлов реестра перенести в код в переменные stringИмпортировать уже из переменных