Я делаю прототип для своей 2D-игры. Он состоит из шара, который запускает ракеты, которые направлены на взрыв, когда пользователь нажимает. Взрыв ракеты высвобождает частицы, которые попадают в мяч и оказывают силу на мяч. Вот video.Unity - Tricky Collicles Collision
Я использовал стандартную систему частиц с активированным модулем столкновения. Затем прилагается этот сценарий к созданным системам частиц, каждый взрывам:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class particleInteraction : MonoBehaviour {
//PS Variables
ParticleSystem myPS;
public List<ParticleCollisionEvent> particleCollisions = new List<ParticleCollisionEvent>();
//Physics variables
public float effect;
// Use this for initialization
void Start() {
myPS = GetComponent<ParticleSystem>();
}
void OnParticleCollision (GameObject other)
{
//Checking if the hit object is indeed the ball
if (other.tag.Equals("Player"))
{
Rigidbody2D hitObject = other.GetComponent<Rigidbody2D>();
//Getting the number of particles hat hit the ball
int noOfCollisions = myPS.GetCollisionEvents(other, particleCollisions);
Vector3 particleDirection = new Vector2(0,0); //The overall velocity of all the particles that collided
//Iterating through all the collisions and adding their vectors
for (int i = 0; i < noOfCollisions; i++)
{
particleDirection += particleCollisions[i].velocity;
}
//Applying the resultant force
hitObject.AddForce(particleDirection.normalized * effect * noOfCollisions);
}
}
}
Это в основном работает, однако это вызывает проблемы. Ракета предназначена для взрыва, когда они тоже попадают в стены, поэтому, когда мяч находится на стене, я ожидаю, что ракета нацелена на стену, чтобы оттолкнуть мяч от нее. Однако мяч просто отрывается от стены в следующем кадре (можно увидеть на видео). Я считаю, что это происходит из-за коллайдеров на частицах, создающих внутри коллайдера мяча. Это заставляет физический движок немедленно отбросить мяч в следующей сцене. Итак, я попытался использовать OnParticleTrigger, однако я понял, что Unity не предоставляет информацию о игровом объекте, затронутом триггерами частиц, поэтому я не могу повлиять на мяч.
Может ли кто-нибудь помочь мне найти способ сделать эту работу? Я хочу избегать отрывистого движения, вызванного пересекающимися коллайдерами, или, может быть, использовать лучший метод, выражающий ракетные взрывы.