Unity教程-游戏对象不会破坏

时间:2020-02-16 21:06:48

标签: c# unity3d

我正在跟踪Unity中的Udemy 2D教程,以创建2D像素游戏。语言是C#。 在我的玩家脚本中,我具有攻击功能,例如,当我按Enter键时,剑就从玩家身上发出,并朝着玩家所看的方向前进(就像在旧的塞尔达游戏中一样)。为了使玩家在攻击时停滞一会儿,同时又限制了剑的射程,我使用了另一个名为Sword的脚本,问题是我认为根本没有调用该脚本(我尝试过甚至可以在无效的开始中进行一些调试,但是什么也没有。

以下是代码:

-这是我的攻击代码:

void attack()
{
    canMove = false;
    GameObject newSword = Instantiate(sword, transform.position, sword.transform.rotation);
    #region //SwordRotation
    int swordDir = anim.GetInteger("dir");
    if (swordDir == 0)
    {
        newSword.transform.Rotate(0, 0, 0);
        newSword.GetComponent<Rigidbody2D>().AddForce(Vector2.up * thrustPower);
    }
    else if (swordDir == 1)
    {
        newSword.transform.Rotate(0, 0, 180);
        newSword.GetComponent<Rigidbody2D>().AddForce(Vector2.down * thrustPower);
    }
    else if (swordDir == 2)
    {
        newSword.transform.Rotate(0, 0, 90);
        newSword.GetComponent<Rigidbody2D>().AddForce(Vector2.left * thrustPower);
    }

    else if (swordDir == 3)
    {
        newSword.transform.Rotate(0, 0, -90);
        newSword.GetComponent<Rigidbody2D>().AddForce(Vector2.right * thrustPower);
    }
    #endregion

 }

这是我的Sword代码:我主要是使用它的,因为在进行攻击时canMove设置为false,因此我必须在很短的时间后将其重置为true才能再次移动。

PS:我注意到的是,剑脚本是直接在scripts文件夹的unity界面中创建的,乍一看与任何游戏对象都不相关。

  {
public float timer;
// Start is called before the first frame update
void Start()
{
}

// Update is called once per frame
void Update()
{
    timer -= Time.deltaTime;
    if (timer <= 0)
    {
        GameObject.FindGameObjectWithTag("Player").GetComponent<Player>().canMove = true;
        Destroy(gameObject);          

    }

}

}

1 个答案:

答案 0 :(得分:0)

您的预制件在实例化时是否附加了脚本?如果没有,您仍然需要在其上添加AddComponent ()。确保它位于拥有重要对象(例如对撞机和网格物体)的父对象上,而不是一些较小的子对象上,以免所有对象被破坏。

看起来您没有给计时器提供值(浮动计时器;浮动计时器的整数= 10f;)。因此,当您实例化您的剑时,它将立即被销毁。也许这就是为什么您看不到它的原因?

关闭主题-我建议不要在Update()中这样做:

    GameObject.FindGameObjectWithTag("Player").GetComponent<Player>().canMove = true;

,而是考虑给玩家一个单身人士,或者至少在Start()处获得一次引用。您正在搜索带有该标签的所有游戏对象,试图每秒发现游戏中每把剑的玩家60次,并获取组件。如果您有充分的理由这样做,请确认,如果没有,请考虑进行更改。如果您只是尝试并玩得开心,这并不是什么大问题,但也许在某些时候仍然需要考虑。