2017-02-21 2 views
0

2D 게임을위한 프로토 타입을 만들고 있습니다. 그것은 사용자가 클릭하는 곳에서 폭발하는 것을 목표로하는 미사일을 발사하는 공으로 구성됩니다. 미사일의 폭발로 인해 공을 치고 공에 힘을 가하는 입자가 방출된다. 다음은 video입니다.Unity - 까다로운 입자 충돌

충돌 모듈이 활성화 된 표준 파티클 시스템을 사용했습니다. 이 대부분 작동

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

충돌 탭 아래의 반지름 눈금을 줄입니다. 모듈 내부에서 확인 된 시각화를 사용하여 시각적으로 디버깅 할 수 있습니다.

관련 문제