在Unity 2D上双向射击

时间:2015-03-06 14:00:10

标签: unity3d

我正在尝试制作一个2D平台游戏,但是我的播放器并没有在两边开火我不知道我的剧本有什么问题。

using UnityEngine;
using System.Collections;

public class Bullet : MonoBehaviour 
{
	public float bulletSpeed;
	public GameObject bullet;
	public Transform bulletX;
	GameObject clone;


	void Update () 
	{
		if (Input.GetKeyUp ("space")) 
		{
			clone = Instantiate(bullet,new Vector3(bulletX.position.x,bulletX.position.y+0.1f,0f),Quaternion.identity) as GameObject;

			if (GameObject.Find ("Player").GetComponent<Player> ().left == true)
				bulletSpeed = -30f;
			else
				bulletSpeed = 30f;

		}

		bullet.rigidbody2D.velocity = new Vector2(bulletSpeed * 0.5f, 0f);
		Destroy (clone, 1f);

	}
}

我试图在if条件下增加速度,但是子弹的移动速度超过了我的需要。

2 个答案:

答案 0 :(得分:0)

我认为您的问题很难理解您想要完成的任务,但我可以在您的代码中看到一些错误,这些错误会导致&#34;克隆&#34;你在创造,没用。

更新循环正在持续执行,您已将破坏放置在&#34;按空格&#34;代码块。 Unity试图在每一帧都摧毁它。把它放在空间里。

我觉得它看起来应该更像这样:

    if (Input.GetKeyUp ("space")) 
    {
        clone = Instantiate(bullet,new Vector3(bulletX.position.x,bulletX.position.y+0.1f,0f),Quaternion.identity) as GameObject;

        if (GameObject.Find ("Player").GetComponent<Player> ().left == true)
            bulletSpeed = -30f;
        else
            bulletSpeed = 30f;
            bullet.rigidbody2D.velocity = new Vector2(bulletSpeed * 0.5f, 0f);
            Destroy (clone, 1f);
    }

这可能无法解答您的问题,但是您可以指定更多您的行为吗?这个脚本运行的对象是什么? (它被称为Bullet,其中一个字段依据另一个bullet?)

答案 1 :(得分:0)

Debug.Log你的bulletSpeed * 0.5f

如果我是对的。即使你的玩家正在寻找另一种方式。它正在回归 ABS编号含义(bulletSpeed = -30f&amp; 0.f是!= -44954,但是== 44954)。

或者,您可以使用AddForce而不是Velocity。它更容易控制。

问题。为什么不使用Instantiate Vector2?