Я устал ... Я пытался сделать простой 2-й планетарный шутер и начал с создания моей собственной физики c с законом всемирного тяготения Ньютона (что-то подобное), но мой код не работает - тела движутся друг от друга, в то время как коллайдеры сталкиваются, и я не знаю почему. (даже по инерции). Итак, я попытался скопировать и вставить код из другого StackOverflow, но он тоже не работает. Просьба о помощи! https://imgur.com/qvnLxSk
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CircleCollider2D), typeof(CircleCollider2D))]
public class MassEffect : MonoBehaviour
{
//public GameObject player;
private float gRadius = 5f;
public float rotSpeed = 0.5f;
public float gravitation = 50f;
private HashSet<Rigidbody2D> affectedBodies = new HashSet<Rigidbody2D>();
private Rigidbody2D componentRigidbody;
private CircleCollider2D gTrigger;
private void Start()
{
componentRigidbody = GetComponent<Rigidbody2D>();
gTrigger = GetComponents<CircleCollider2D>()[1];
gTrigger.isTrigger = true;
gTrigger.radius = gRadius / transform.localScale.x;
}
private void OnTriggerEnter2D(Collider2D other)
{
var rbInRadius = other.GetComponent<Rigidbody2D>();
if (rbInRadius != null)
{
affectedBodies.Add(rbInRadius);
}
}
private void OnTriggerExit2D(Collider2D other)
{
var rbInRadius = other.GetComponent<Rigidbody2D>();
if (rbInRadius != null)
{
affectedBodies.Remove(rbInRadius);
}
}
private void FixedUpdate()
{
transform.Rotate(Vector3.forward * rotSpeed);
foreach (var objectInVicinity in affectedBodies)
{
if (objectInVicinity == null)
{
affectedBodies.Remove(objectInVicinity);
break;
}
float dist = Vector2.Distance(transform.position, objectInVicinity.transform.position);
float gravitationFactor = 1 - dist / gRadius;
Vector2 force = (transform.position - objectInVicinity.transform.position).normalized * gravitation * gravitationFactor;
objectInVicinity.AddForce(force);
}
}
void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, gRadius);
}
}