2016-03-22 2 views
-2

Я новичок в Unity, поэтому я просто привык ко всем библиотекам и тому подобное. Я пытаюсь создать космическую шутерскую игру и теперь в процессе создания пуль. Теперь я могу породить пулю, теперь проблема заключается в том, что она не движется вперед в отношении корабля, который у меня есть. Любая помощь будет оценена. Спасибо.Объект игры Unity не движется вперед. (Space Shooter)

Вот код:

using UnityEngine; 

использованием System.Collections;

класс Снаряд общественности: MonoBehaviour {

public Rigidbody projectile; 
//GameObject prefab = Resources.Load ("sphere") as GameObject; 

public float speed = 20; 



/*// Use this for initialization 
void Start() { 

}*/ 

// Update is called once per frame 
void Update() { 

    if (Input.GetButtonDown("Fire1")) 
    { 
     Rigidbody instantiatedProjectile = Instantiate(projectile, 
      projectile.position, 
      projectile.rotation) 
      as Rigidbody; 

     instantiatedProjectile.velocity = transform.TransformDirection(new Vector3(0, 0,speed)); 

    } 
} 

}

ответ

1

Вместо преобразования направления, используйте transform.Forward() * Скорость; http://docs.unity3d.com/ScriptReference/Transform-forward.html

Кроме того, посмотрите на this link, как вы должны попытаться ApplyForces вместо изменения скорости непосредственно

+0

Не сделал трюк. Все, что он делает, это порождает пулю, а затем просто оставляет ее там на месте. –

+0

Убедитесь, что значение IsKinematic установлено на false. – Slubberdegullion

+0

Да, я пробовал это. Еще один результат. Возможно только начало всего –

0

Вы хотите применить силу для пуль Rigidbody с использованием Rigidbody.ApplyForce();

Кроме того, ваш код в настоящее время отображает плохую архитектуру OO, поэтому я также предлагаю создать новый скрипт либо на пустом gameObject, либо на космическом корабле, который будет управлять вводом проигрывателя. а затем просто имея снаряды, которые управляют самыми необходимыми вещами. Например:

// Attached to Either empty GO or spaceship GO 
public class PlayerInput : MonoBehaviour { 
    public GameObject spaceship; 
    public GameObject bulletPrefab; 
    public float projectileSpeed; 
    void Update() 
    { 
     if(Input.GetButtonDown("Fire1")) 
     { 
      GameObject newBullet = Instantiate(bulletPrefab, spaceship.transform.position, new Quaternion()) as GameObject; 
      newBullet.GetComponent<Rigidbody>().AddForce(spaceship.transform.forward * projectileSpeed); 
     } 
    } 
} 

// Attached to Either Projectile GO 
public class Projectile : MonoBehaviour { 

    void OnCollisionEnter() 
    { 
     Debug.Log("Boom"); 
    } 

} 

отметить также, что вам, возможно, придется подправить Rigidbody атрибуты для того, чтобы получить желаемый эффект, такие как, например, отключение гравитации.

+0

Я пробовал этот метод, и он все равно дал мне тот же результат. –