弹丸卡在角色的位置(Unity2d)

时间:2017-12-18 23:17:42

标签: c# unity3d

我有一个射击水平射弹的敌人精灵。我唯一的问题是,在敌人射击他们的射弹后,它会一直向上移动,直到我的角色目前所在的位置。

让我们说我的敌人在我上方的一个平台上,我站在x轴上-100f远离敌人。敌人射击他们的射弹,它沿着x行进-100f然后被卡住(“悬停”)直接在我的角色精灵头上方。

我的射弹代码如下(为了简单起见,我省略了不影响射弹运动的外来变量):

[SerializeField] GameObject player;  // Gets player's current position

private Transform transform;
private Vector2 projectilePosition;

void Update(){
     projectilePosition = transform.position;

     if (player.transform.position.x < transform.position.x) // if my player sprite is standing to the left of my projectile generator
     {
         projectilePosition += new Vector2(10f, 0);  // projectile flies from left to right
         transform.position = projectilePosition;
     }

    else if (player.transform.position.x > transform.position.x) // if my player sprite is standing to the right of my projectile generator
     {
         projectilePosition -= new Vector2(10f, 0);  // projectile flies from right to left
         transform.position = projectilePosition;
     }

}

1 个答案:

答案 0 :(得分:0)

而不是使用player.transform.position.x确定纵坐标,你希望射弹向前移动,当创建射弹时,在创建它时将player.transform.position.x < transform.position.x存储在射弹的局部变量中,所以如果玩家最初是在产卵的左边,它将继续向右移动,反之亦然

实施例

在你的射弹类中,你需要一个布尔值来存储方向,例如: movingLeft=False

当你实例化射弹时,你需要设置它是向左还是向右移动,所以使用

movingLeft=player.transform.position.x < transform.position.x;

然后在你的代码中替换

带有player.transform.position.x < transform.position.x

movingLeft

并将else if (player.transform.position.x > transform.position.x)替换为else