Unity 2D中的弹丸

时间:2014-12-12 22:11:54

标签: c# unity3d unityscript unity3d-2dtools

我正在尝试学习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答案网站上找到了一个解决方案{@ 1}},以防两个箱子碰撞器的结果相互矛盾,但它没有什么区别。

我确定我做的事情完全是愚蠢的,但我怎么能这样做呢?

非常感谢!

2 个答案:

答案 0 :(得分:2)

尝试使用Addforce()方法, 像这样的东西:

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

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

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

查看哪种组合以及哪些值符合您的要求并相应使用。希望它有所帮助

答案 1 :(得分:0)

正如@maZZZu所说,在你的角色前面实例化你的射弹精灵,这样你的角色和射弹就不会碰撞。

其次,clone.rigidbody2D.velocity = (clone.transform.forward * 1000);部分代码只允许射弹向前移动(x轴为二维,z轴为三维)。请尝试使用mMovement(如果您希望它也可以在其他方向移动)。例如clone.rigidbody2D.velocity = (mMovement * 1000);