Снаряд в Unity 2D

1

Я пытаюсь изучить 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;
    }
}

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

Изображение 174551

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

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

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

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

  • 0
    Вы передаете direction в метод Shoot , но затем не используете его. Это предназначено?
  • 0
    Да, прости. Это остаток предыдущего решения, которое не сработало.
Показать ещё 3 комментария
Теги:
unity3d
unityscript
unity3d-2dtools

2 ответа

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
    Пожалуйста, не используйте подписи или слоганы в своих сообщениях.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню