无法将float类型隐式转换为int。存在显式转换(您是否缺少演员表?)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法将float类型隐式转换为int。存在显式转换(您是否缺少演员表?)相关的知识,希望对你有一定的参考价值。

我正在尝试从一系列生成点中随机生成一个僵尸生成点。使用统一游戏引擎它说:“无法将类型float隐式转换为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()
    {
    }
}
答案

您差不多完成了,错误是想说您正在使用浮点数而不是整数。

行中的数组索引只能是整数:

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))]);

我希望清楚:)

另一答案

Mathf.Found返回浮点数proof。然后将该浮点数用作spawns []的索引。仅允许将整数用于索引。

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

编辑:Marco Elizondo的答案更好。请改用Mathf.RoundToInt。

以上是关于无法将float类型隐式转换为int。存在显式转换(您是否缺少演员表?)的主要内容,如果未能解决你的问题,请参考以下文章

c#中怎么将string转换成int型

解决Html.CheckBoxFor中”无法将类型 bool 隐式转换为 bool。存在一个显式转换..."的方法

无法隐式转换类型“System.DateTime?”到“系统。日期时间”。存在显式转换

C# 隐式运算符 MyType(int value) 自动“支持”从浮点数转换

将 int型变量n转换成float型变量的方法是

不能隐式转换类型“int?”到'int'。