1

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

そして、これはそれがしていることです:

奇妙な

インスタンス化されたオブジェクトに力が加えられておらず、スプライトの両側が飛び出していますが、これはまったく理解できません。

IgnoreCollider2 つのボックス コライダーの結果が競合する場合に備えて、Unity の回答サイトで解決策を見つけましたが、違いはありませんでした。

私は完全に愚かなことをしていると確信していますが、どうすればこれを行うことができますか?

どうもありがとう!

4

2 に答える 2

2

次のような Addforce() メソッドを使用してみてください。

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

また

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

また

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

どの組み合わせとどの値が要件に一致するかを確認し、それに応じて使用してください。それが役に立てば幸い

于 2016-08-03T06:38:34.243 に答える