2014-12-12 6 views
0

Я пытаюсь изучить Unity (так, пожалуйста, простите мою новичку). Я создал свой проект как 2d, получил спрайт, и я пытаюсь запустить стрельбу из снаряда (я ценю, что есть МНОГО ТАК, о таких, но я просто не могу заставить его работать, после многих попыток растворы). Я полный ореол, когда дело доходит до физики!Снаряд в Unity 2D

Вот мой очень простой сценарий:

using UnityEngine; 
using System.Collections; 

public class PlayerScript : MonoBehaviour { 
    public Transform mObject; 
    public Transform mProjectile; 
    public Vector2 mProjectileSpeed = new Vector2 (10f, 10f); 
    public Vector2 mSpeed = new Vector2(15, 15); 
    private Vector2 mMovement; 

    // Use this for initialization 
    void Start() { 

    } 

    // Update is called once per frame 
    void Update() { 
     float inputX = Input.GetAxis("X"); 
     float inputY = Input.GetAxis("Y"); 

     mMovement = new Vector2 (mSpeed.x * inputX, mSpeed.y * inputY); 

     if (Input.GetButton ("Fire1")) 
      Shoot(); 
    } 

    void Shoot(){ 
     GameObject clone = (GameObject)Instantiate (mProjectile, rigidbody2D.transform.position, Quaternion.identity); 
     clone.rigidbody2D.velocity = (clone.transform.forward * 1000); 
    } 

    void FixedUpdate(){ 
     rigidbody2D.velocity = mMovement; 
    } 
} 

И это то, что он делает:

Oddity

Нет силы добавляется к реализованным объекта и стреляет с обеих сторон моего спрайта, которого я просто не понимаю.

Я нашел решение на сайте ответов Unity, в котором говорится, что IgnoreCollider на всякий случай, если два коллайдера поля имеют противоречивые результаты, но это не повлияло.

Я уверен, что я делаю что-то совершенно глупое, но как я могу это сделать?

Большое спасибо!

+0

Вы передаете 'направление' в свой метод' Shoot', но тогда вы его не используете. Это предназначено? –

+0

Да, извините. Это остатки предыдущего решения, которое не сработало. – LokiSinclair

+0

Вы пытались создать экземпляр снарядов перед спрайтом? Это можно сделать, установив позицию экземпляра со смещением: 'rigidbody2D.transform.position + clone.transform.forward * 10.0f'. Кажется, что спрайт и снаряды сталкиваются. – maZZZu

ответ

2

Попробуйте использовать метод Addforce(), что-то вроде этого:

gameObj.rigidbody2D.AddForce(Vector3.up * 10 * Time.deltaTime); 

или

gameObj.rigidbody2D.AddForce(transform.forward * 100); 

или

gameObj.rigidbody2D.AddForce(Vector3.up * 1000); 

Смотрите, какая комбинация и какие значения соответствует вашим требованиям и использовать соответственно. Надеюсь, это поможет

0

Как @maZZZu сказал, Мгновьте свои спрайты с оружием перед вашим персонажем, чтобы ваш персонаж и снаряды не столкнулись.

Во-вторых, clone.rigidbody2D.velocity = (clone.transform.forward * 1000); часть вашего кода позволит только снаряду двигаться в прямом направлении (ось x в случае 2D и оси z в 3D). Вместо этого попробуйте использовать mMovement (если вы хотите, чтобы он также перемещался в других направлениях). например clone.rigidbody2D.velocity = (mMovement * 1000);

+0

Пожалуйста, не используйте подписи или метки в своих сообщениях. – meagar

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

  • Нет связанных вопросов^_^