如何提高敌人在其他静止不动的同时静止的敌人的瞄准能力?

时间:2019-02-23 15:53:30

标签: c# unity3d game-physics

我正在使用无限亚军引擎制作无限亚军游戏,该引擎的工作原理是使玩家/奔跑者保持在相同的位置,而背景元素,平台和敌人出现在玩家身上。

这很好,直到我介绍了射击敌人的位置,然后敌人找到并射击了玩家。我正在使用EnemyBullet预制件上的以下脚本:

void Start()
    {


        shooter = GameObject.FindObjectOfType<Player>();
        shooterPosition = shooter.transform.position;
        direction = (shooterPosition - transform.position).normalized;
    }

    // Update is called once per frame
    void Update()
    {
        transform.position += direction * speed * Time.deltaTime;
    }

这行得通,但问题是它过于精确,就像玩家跳动子弹一样,预制件往往会猜测其位置并直接向玩家射击。

我知道这是因为玩家实际上并没有移动,这使得玩家的瞄准变得非常容易。

有什么办法可以改善这个状况?还是以某种方式使其更自然?

谢谢

1 个答案:

答案 0 :(得分:1)

问题在于代码中

shooter = GameObject.FindObjectOfType<Player>();
shooterPosition = shooter.transform.position;
direction = (shooterPosition - transform.position).normalized;

由于shooter.transform.position是玩家的位置,transform.position是子弹的位置,因此shooterPosition - transform.position为您提供了一个直接从子弹的位置指向玩家位置的向量。

听起来您想做的就是在子弹中添加一些不准确之处(如果我错了,请纠正我)。您可以使用类似的方法进行操作(我假设这是2D吗?)

shooter = GameObject.FindObjectOfType<Player>();
shooterPosition = shooter.transform.position;
direction = (shooterPosition - transform.position).normalized;

// Choose a random angle between 0 and maxJitter and rotate the vector that points 
// from the bullet to the player around the z-axis by that amount.  That will add
// a random amount of inaccuracy to the bullet, within limits given by maxJitter
var rotation = Quaternion.Euler(0, 0, Random.Range(-maxJitter, maxJitter));
direction = (rotation * direction).normalized;