Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Юнити. 4 Ошибки CS1503

Иван Программист Ученик (162), на голосовании 2 недели назад
--- Ошибки:
Assets\Scenes\GameWorld.cs(21,69): error CS1503: Argument 1: cannot convert from 'float' to 'int'
Assets\Scenes\GameWorld.cs(21,75): error CS1503: Argument 2: cannot convert from 'float' to 'int'
Assets\Scenes\GameWorld.cs(24,69): error CS1503: Argument 1: cannot convert from 'float' to 'int'
Assets\Scenes\GameWorld.cs(24,78): error CS1503: Argument 3: cannot convert from 'float' to 'int'

--- код:

GameWorld:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameWorld : MonoBehaviour
{
public Dictionary<Vector2Int, ChunkData> ChunkDatas = new Dictionary<Vector2Int, ChunkData>();
public ChunkRenderer ChunkPrefab;

void Start()
{
for (int x = 0; x < 10; x++)
{
for (int y = 0; y < 10; y++)
{
float xPos = x * ChunkRenderer.ChunkWidth * ChunkRenderer.BlockScale;
float zPos = y * ChunkRenderer.ChunkWidth * ChunkRenderer.BlockScale;

ChunkData chunkData = new ChunkData();

chunkData.Blocks = TerrainGenerator.GenerateTerrain(xPos, zPos);
ChunkDatas.Add(new Vector2Int(x,y), chunkData);

var chunk = Instantiate(ChunkPrefab, new Vector3Int(xPos, 0, zPos), Quaternion.identity, transform);
chunk.ChunkData = chunkData;
chunk.ParentWorld = this;
}
}
}
}

--- Комментарий:
Вы уж помогите, сам я чего то не понимаю как исправить эти четыре ошибки.
Голосование за лучший ответ
whTpu1se__ Профи (700) 1 месяц назад
Иван ПрограммистУченик (162) 1 месяц назад
Спасибо, мне не нужна нейросеть
Иван ПрограммистУченик (162) 1 месяц назад
Вообщем, я тут подумал. Я переписал полностью TerrainGenerator и получил -2 ошибки.
Также в этой строчке:
var chunk = Instantiate(ChunkPrefab, new Vector3Int(xPos, 0, zPos), Quaternion.identity, transform);
Надо Vector3Int поменять на Vector3 и будет 0 ошибок.
Соса Тель Ученик (145) 1 месяц назад
У тебя там 2 типа данных разных
Иван ПрограммистУченик (162) 1 месяц назад
Где именно, скажи пожалуйста. Я не вижу
Иван ПрограммистУченик (162) 1 месяц назад
Вообщем, я тут подумал. Я переписал полностью TerrainGenerator и получил -2 ошибки.
Также в этой строчке:
var chunk = Instantiate(ChunkPrefab, new Vector3Int(xPos, 0, zPos), Quaternion.identity, transform);
Надо Vector3Int поменять на Vector3 и будет 0 ошибок.
S.H.I. Оракул (73213) 1 месяц назад
Ошибки указывают на то, что вы передаете значения типа float, в то время как методы и конструкторы ожидают значения типа int.

Например, метод TerrainGenerator.GenerateTerrain ожидает аргументы типа int, а не float, и конструктор Vector3Int принимает три параметра типа int. В вашем коде переменные xPos и zPos имеют тип float, поэтому необходимо привести их к типу int.

Можно использовать явное приведение, если вы уверены, что потеря дробной части допустима:
 int xPosInt = (int)xPos; 
int zPosInt = (int)zPos;
chunkData.Blocks = TerrainGenerator.GenerateTerrain(xPosInt, zPosInt);
var chunk = Instantiate(ChunkPrefab, new Vector3Int(xPosInt, 0, zPosInt), Quaternion.identity, transform);
Или можно делать приведение непосредственно при передаче параметров:
 chunkData.Blocks = TerrainGenerator.GenerateTerrain((int)xPos, (int)zPos); 
var chunk = Instantiate(ChunkPrefab, new Vector3Int((int)xPos, 0, (int)zPos), Quaternion.identity, transform);

Если расчет позиций может быть выполнен с целочисленными значениями, вы можете сразу использовать int вместо float. Например, если значения ChunkRenderer.ChunkWidth и ChunkRenderer.BlockScale являются целыми числами, то можно изменить тип переменной:
 int xPos = x * ChunkRenderer.ChunkWidth * ChunkRenderer.BlockScale; 
int zPos = y * ChunkRenderer.ChunkWidth * ChunkRenderer.BlockScale;
Но если хотя бы один из множителей имеет тип float, то результат будет float и потребует приведения.
Иван ПрограммистУченик (162) 1 месяц назад
А если мне не нужно отбрасывать плавающую запятую, а передать её?
Иван ПрограммистУченик (162) 1 месяц назад
Вообщем, я тут подумал. Я переписал полностью TerrainGenerator и получил -2 ошибки.
Также в этой строчке:
var chunk = Instantiate(ChunkPrefab, new Vector3Int(xPos, 0, zPos), Quaternion.identity, transform);
Надо Vector3Int поменять на Vector3 и будет 0 ошибок.
Похожие вопросы