2016-04-18 8 views
0

Я пытаюсь создать экземпляр объекта в позиции GameObject в другом GameObject. Я хочу, чтобы пуля стреляла из GameObject, называемого bulletStart, в моем игровом объекте GameObject. Я могу получить его экземпляр с позиции bulletStart геймобжекты, но когда я хочу, чтобы переместить объект bulletStart на новую позицию на основе анимации игрока, который играет, пуля не экземпляр вообще:GameObject Position Within Another GameObject Issues

void Fire() 
    { 

     if(anim.GetCurrentAnimatorStateInfo(0).IsName("Player_Shoot_Side")) 
     { 
      bulletStartX = bulletStart.transform.position.x; 
      bulletStartY = bulletStart.transform.position.y; 

      if (transform.localScale.x > 0) 
      { 
       bullet.GetComponent<BulletBehaviour>().bulletSpeed = 50; 
       Instantiate(bullet, new Vector3(bulletStartX, bulletStartY, 0f), transform.rotation); 
      } 
      else if (transform.localScale.x < 0) 
      { 
       bullet.GetComponent<BulletBehaviour>().bulletSpeed = -50; 
       Instantiate(bullet, new Vector3(bulletStartX, bulletStartY, 0f), transform.rotation); 
      } 

     } 

    } 

Но это будет экземпляр со следующим кодом:

void Fire() 
    { 
     bulletStartX = bulletStart.transform.position.x; 
     bulletStartY = bulletStart.transform.position.y; 

     if (transform.localScale.x > 0) 
     { 
      bullet.GetComponent<BulletBehaviour>().bulletSpeed = 50; 
      Instantiate(bullet, new Vector3(bulletStartX, bulletStartY, 0f), transform.rotation); 
     } 
     else if (transform.localScale.x < 0) 
     { 
      bullet.GetComponent<BulletBehaviour>().bulletSpeed = -50; 
      Instantiate(bullet, new Vector3(bulletStartX, bulletStartY, 0f), transform.rotation); 
     } 
    } 

анимация игрока для съемки со стороны называется Player_Shoot_Side в редакторе анимации

+0

Ну, единственная переменная между вашими двумя примерами - 'anim.GetCurrentAnimatorStateInfo (0) .IsName (" Player_Shoot_Side ")', которые возвращают 'false', я думаю. Вы пытались войти в отладчик или добавить «Debug.Log» – Ceros

+0

. Я добавил строку Debug.Log, чтобы увидеть, не воспроизводится ли анимация, используя if (! Anim.GetCurrentAnimatorStateInfo (0) .IsName («Player_Shoot_Side»)), и он показывает сообщение отладки, которое я установил. Что странно, потому что анимация играет –

+0

Из этого http://docs.unity3d.com/ScriptReference/AnimatorStateInfo.IsName.html 'Имя должно быть в форме Layer.Name, например« Base.Idle ».' – Ceros

ответ

0

1). Скорее всего, ваша анимация находится на базовом слое, поэтому вы должны проверить «Base Layer.Player_Shoot_Side" вместо« Player_Shoot_Side ». 2). Убедитесь, что "Player_Shoot_Side" - это имя состояния, а не имя анимации. (Нажмите на состояние, в котором есть анимация в мультипликатора и использовать это имя)

Вы должны иметь что-то вроде

anim.GetCurrentAnimatorStateInfo(0).IsName("Base Layer.State name") 

http://docs.unity3d.com/Manual/AnimationLayers.html

http://docs.unity3d.com/Manual/class-State.html

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