2017-02-21 48 views
0

Я делаю прототип для своей 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 не предоставляет информацию о игровом объекте, затронутом триггерами частиц, поэтому я не могу повлиять на мяч.

Может ли кто-нибудь помочь мне найти способ сделать эту работу? Я хочу избегать отрывистого движения, вызванного пересекающимися коллайдерами, или, может быть, использовать лучший метод, выражающий ракетные взрывы.

ответ

0

Уменьшить масштаб радиуса под вкладкой «Столкновение». вы можете визуально отлаживать это, используя визуализацию Bounds, проверенные внутри модуля.