2017-02-02 2 views
-2

У меня есть следующий # скрипт C для управления некоторой физикой системы частиц в Unity:Глобальных переменный не признается в цикле

//PS Variables 
ParticleSystem myPS; 
public List<ParticleCollisionEvent> collisisonEvents; 

//Physics variables 
public float effect;  


// Use this for initialization 
void Start() { 
    myPS = GetComponent<ParticleSystem>(); 
    collisisonEvents = new List<ParticleCollisionEvent>(); 
} 


void OnParticleCollision (GameObject other) 
{ 
    //Checking if the hit object is indeed the ball 
    bool isBall = other.tag.Equals("Player"); 
    if (isBall) 
    { 
     Rigidbody2D hitObject = other.GetComponent<Rigidbody2D>(); 

     //Getting the number of collisions that have occured this frame 
     int numOfCollisions = myPS.GetCollisionEvents(other, collisisonEvents); 
     Vector3 particleDirection = new Vector2(0,0); 

     //Iterating through all the events 
     for (int i = 0; i < numOfCollisions; i++) 
     { 
      //Calculating a resultant direction 
      particleDirection += collisionEvents[i].velocity; 
     } 

     //Applying the resultant force 
     hitObject.AddForce(particleDirection.normalized * effect * numOfCollisions); 
    } 
} 

Там, кажется, проблема с объемом collisionsEvents списка, хотя, как Я не могу использовать его в цикле for в совместной программе OnParticleCollision. Я продолжаю получать ошибку, что «collisionsEvents не существует в этом текущем контексте». Однако переменная myPS не имеет этой проблемы, и она была объявлена ​​в том же месте, что и collisionsEvents.

Может ли кто-нибудь помочь мне здесь?

+2

collisionEvents = collisisonEvents! – Gusman

ответ

3

у вас есть ошибка с именем переменной. В декларации вы используете collisisonEvents и в методе collisionEvents. Проблема не в объеме. Если вы объявите его на уровне класса, компилятор будет жаловаться только на несуществующий, если вы создадите опечатку.

Хотя я должен признать, что такие вещи иногда трудно, как ад, чтобы обнаружить;)

Смежные вопросы