unity3d 当编译这个脚本在统一产卵的敌人随机在一个十产卵它给了我一个错误信息

92vpleto  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(112)

我的想法是一个2D游戏,玩家在中心有一个基地,敌人在10个产卵点中的一个产卵,然后向中间移动。我写了这个代码,但有一个错误。有人能帮忙吗?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemySpawn : MonoBehaviour
{
    private float spawnRate = 2f;
    private float timer = 0f;

    public GameObject enemy;
    public int spawnerNumber;
    public GameObject[] spawner;

    void Update()
    {
        timer += Time.deltaTime;

        if(timer > spawnRate)
        {
            timer = 0f;
            Spawn();
            if(spawnRate > 0.1f)
            {
                spawnRate -= 0.01f;
            }

        }
    }

    void Spawn()
    {
        spawnerNumber = Random.Range(0, 10);
        Instantiate(enemy, new Vector3(spawner[spawnerNumber].transform.position), Quaternion.identity);
    }
}

它给我的错误是:vector 3不包含接受1个参数的构造函数

iqjalb3h

iqjalb3h1#

错误是告诉你不能执行new Vector3(spawner[spawnerNumber].transform.position)
new Vector3()是一个构造函数。它可以为空,默认为[0,0,0],也可以接受3个参数来表示x,y和z分量,例如new Vector3(1, 5, 3)
没有只接受一个参数的构造函数版本。您试图将Vector3作为单个对象传递给它,这是不允许的。spawner[spawnerNumber].transform.position是Vector3。
解决方案:严格地说,你根本不应该在这里创建一个新的Vector3。你的行应该是:

// Best way to solve your problem
Instantiate(enemy, spawner[spawnerNumber].transform.position, Quaternion.identity);

无论如何,Monobehavior对象上的transform.position总是Vector3。
如果你绝对需要创建一个新的向量,其中x,y和z有不同的组成部分,你需要做一些更像这样的事情:

// Example of how to use a constructor, do not do this in your case
Instantiate(enemy, new Vector3(spawner[spawnerNumber].transform.position.x, spawner[spawnerNumber].transform.position.y, spawner[spawnerNumber].transform.position.z), Quaternion.identity);

但不要在你的情况下这样做。

相关问题