【问题标题】:Projectile Rotation弹丸旋转
【发布时间】:2019-12-06 11:49:03
【问题描述】:

我想知道如何使用函数 Lookat 来实例化指向对手方向的子弹?因为按照我编程的方式,弹丸只是直线前进。

我正在使用这个功能来射击弹丸:

public void TeslaShooting() //Tesla's shooting method
{
    for (int i = 0; i < Personagens.Length; i++) {
        if (Personagens[i].tag == "Tesla" && Input.GetMouseButtonDown(1) && Personagens[i].GetComponent < Jogador > () && Personagens[i].GetComponent < Jogador > ().PodeAtacar == false && Personagens[i].GetComponent < Jogador > ().isPlayer) {
            //raycast checks and returns an object, if it's a tile, the unit shoots
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit)) {
                if (hit.transform.tag == "Monster" || hit.transform.tag == "Orc" || hit.transform.tag == "Vampire") {
                    //instantiates the bullet
                    GameObject tiro = Instantiate(projetil, SpawBala.transform.position, SpawBala.transform.rotation);
                    Rigidbody BalaRigid = tiro.GetComponent < Rigidbody > ();

                    BalaRigid.velocity = SpawBala.transform.forward * ProjetilVeloc * Time.deltaTime;
                    gameManager.PontoAcaop1--;
                    Personagens[i].GetComponent < Jogador > ().PodeAtacar = true;
                    interfaceManager.ActionPointDown();
                }
            }
        }
    }
}

如果对手在我身边或在对角线位置,我无法击中他。

我该如何解决?

【问题讨论】:

  • 在你实例化你的游戏对象之后,你可以引用它的变换然后调用它的 LookAt 方法。示例:tiro.transform.LookAt(targetPosition)
  • @lassedev 我试过这个:tiro.transform.LookAt(hit.transform.position),但没用。播放器也不旋转。

标签: c# unity3d


【解决方案1】:

您需要做的是在控制弹丸运动的脚本中添加 LookAt,您必须有一行代码覆盖您的tiro.transform.LookAt(hit.transform.position)。我不确定的另一件事是您是在更新函数中使用前一行代码(因此它会永久查看目标)还是仅在拍摄函数中使用(因此它会在第一帧查看目标)?

PS:虽然这不是最终答案,但它可能会对你有所帮助,我会在评论部分写出来,但我没有足够的权利。

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    相关资源
    最近更新 更多