Снаряд в Unity 2D

Опитвам се да науча Unity (така че моля да ме извините за начинаещия ми). Настроих проекта си като 2d, имам спрайт, който се движи и се опитвам да получа изстрелване на снаряд (оценявам, че има МНОГО ТОЛКОВА q за такива, но просто не мога да го накарам да работи, след като опитах много решения). Аз съм пълен глупак, когато става въпрос за физика!

Ето моят много прост скрипт:

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;
    }
}

И ето какво прави:

Странност

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

Намерих решение на сайта за отговори на Unity, което казваше на IgnoreCollider само в случай, че двата кутийни колайдера са противоречиви резултати, но това не направи разлика.

Сигурен съм, че правя нещо напълно глупаво, но как мога да направя това?

Много благодаря!


person fantasitcalbeastly    schedule 12.12.2014    source източник
comment
Подавате direction във вашия Shoot метод, но след това не го използвате. Това предназначено ли е?   -  person Chris Sinclair    schedule 13.12.2014
comment
Да съжалявам. Това е остатък от предишно решение, което не работи.   -  person fantasitcalbeastly    schedule 13.12.2014
comment
Опитвали ли сте да създавате екземпляри на снаряди пред спрайта? Това може да се направи чрез задаване на моментната позиция с отместване: rigidbody2D.transform.position + clone.transform.forward * 10.0f. Изглежда, че спрайтът и снарядите се сблъскват.   -  person maZZZu    schedule 14.12.2014
comment
Благодаря за помощта, но за съжаление нямаше голяма разлика :(   -  person fantasitcalbeastly    schedule 14.12.2014
comment
За да откриете проблема, деактивирайте всички колайдери във вашата сцена, особено колайдерите на играчите и сглобяемите снаряди. След това ги активирайте в различни комбинации. Само тогава ще можем да ви помогнем.   -  person Maxim Kamalov    schedule 09.01.2015


Отговори (2)


Опитайте да използвате метода Addforce(), нещо подобно:

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

or

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

or

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

Вижте коя комбинация и какви стойности отговарят на вашите изисквания и използвайте съответно. Дано помогне

person Vmanani    schedule 03.08.2016

Както каза @maZZZu, инстанцирайте своите спрайтове на снаряди пред вашия герой, така че вашият герой и снаряди да не се сблъскат.

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

person Anas iqbal    schedule 19.06.2015
comment
Моля, не използвайте подписи или надписи в публикациите си. - person meagar; 19.06.2015