子弹用AddForce射击错误的方式

时间:2015-02-03 00:01:49

标签: unity3d gameobject rigid-bodies

我是团结的初学者所以现在我正在像蠕虫游戏这样的回合制游戏中工作。但由于某种原因,我的攻击脚本仅适用于左侧单元,而不适用于右侧单元。具体来说,我实例化的子弹在为右侧的子弹射击时会走错路,但它们的工作方式与左侧的那些完全一致。我有单独的字符按钮脚本,但我使用相同的脚本脚本。

子弹脚本

public float speed;
public float posX, posY;

// Use this for initialization
void Start () {
    rigidbody2D.AddForce (new Vector2 (posX, posY), ForceMode2D.Impulse);
}


// Update is called once per frame
void Update () {
    //transform.Translate (speed * Time.deltaTime, 0, 0);
}

void OnCollisionEnter2D(Collision2D c){
    if (c.gameObject.tag == "Base") {
        Destroy(gameObject);
        Destroy(c.gameObject);
    }
    else if(c.gameObject.tag == "Player2"){
        Destroy(gameObject);
        Destroy(c.gameObject);
    }
}

void OnBecameInvisible () {
    Destroy(gameObject);
}   

字符脚本

gameObject go是子弹的预制件

public GameObject go;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
        if(gameObject.tag == "Player2"){
            if(Input.GetKeyUp(KeyCode.Backspace)){
                Instantiate(go,transform.position,transform.rotation);
            }
        }

}

}

1 个答案:

答案 0 :(得分:0)

你正在对你的所有子弹施加相同的力posX, posY),所以它们都是正确的(左侧是正确的方向,右侧是相反的方向)。

你需要做的是使用一个变量来跟踪每个游戏对象的方向,这些游戏对象会发射子弹并将这个方向用于你的子弹AddForce()。或者,如果游戏对象不移动/传递到另一半,则需要区分左右游戏对象并使用相应的力矢量。