Снаряд в 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