Невозможно неявно преобразовать тип float в int. Существует явное преобразование (вам не хватает приведения?) - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь создать зомба ie в случайной точке появления из множества точек появления. Используя игровой движок Unity, он говорит: «не может неявно преобразовать тип с плавающей точкой в ​​int. Существует явное преобразование (вы пропустили приведение типа?)»

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

public class sown : MonoBehaviour
{
    System.Random rnd = new System.Random();
    public GameObject[] zomz = new GameObject[1];
    public Transform[] spawns = new Transform[9];
    public GameObject regzom;
    int unonumero = 0;

    void Start()
    {
        foreach (GameObject x in zomz)
        {
            zomz[unonumero] = Instantiate(regzom, spawns[Mathf.Round(Random.Range(0f, 10f))]);
            unonumero++;
        }
    }

    void Update()
    {
    }
}

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Вы почти закончили, ошибка пытается сказать, что вы используете float вместо int.

Индекс массива может быть только целым числом в вашей строке:

zomz[unonumero] = Instantiate(regzom, spawns[Mathf.Round(Random.Range(0f, 10f))]);

Вы используете Mathf.Round(Random.Range(0f, 10f)), чтобы получить случайное число, а затем округлить его, и это мудрый выбор, поэтому у вас есть случайное число с плавающей точкой, например, 2.4f, округленное до 2.0f, проблема в том, что это все еще число с плавающей точкой, а не целое число.

У Matfh есть классный метод Round, который дает вам целое число, вы можете использовать это Mathf.RoundToInt(), например:

zomz[unonumero] = Instantiate(regzom, spawns[Mathf.RoundToInt(Random.Range(0f, 10f))]);

Надеюсь, это ясно:)

1 голос
/ 10 апреля 2020

Mathf.Found возвращает число с плавающей запятой, доказательство . Затем этот float используется в качестве индекса для spawns []. Для индексирования допускаются только целые числа.

void Start()
{
    foreach (GameObject x in zomz)
    {
        zomz[unonumero] = Instantiate(regzom, spawns[(int)Mathf.Round(Random.Range(0f, 10f))]);
        unonumero++;
    }
}

Редактировать: ответ Марко Элизондо лучше. Вместо этого используйте Mathf.RoundToInt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...