Answer the question
In order to leave comments, you need to log in
Error in unit "error CS1022: Type or namespace definition, or end-of-file expected"?
What is the problem ?
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
public class GameController : MonoBehaviour
{
struct CubePos(0, 1, 0);
public float cubeChangePlaceSpeed = 0.5f;
public Transform cubeToPlace
}
private List<Vector3> allCubesPosition = new List<Vector3>
{
new Vector3(0, 0, 0),
new Vector3(1, 0, 0),
new Vector3(-1, 0, 0),
new Vector3(0, 1, 0),
new Vector3(0, 0, 0),
new Vector3(-1, 0, -1),
new Vector3(1, 0, 1),
new Vector3(0, 0, -1),
new Vector3(1, 0, -1),
}
private void Start()
{
StartCoroutine(ShowCubePlace());
}
IEnumerator ShowCubePlace()
{
while(true)
{
SpawnPosition();
yield return new WaitForSeconds(cubeChangePlaceSpwwd)
}
}
private void SpawnPosition()
{
List<Vector3> position = new List<Vector3>();
if (IsPositionEmpty(new Vector3(nowCube.x + 1, nowCube.y, nowCube.z)))
position.Add(new Vector3(nowCube.x + 1, nowCube.y, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x - 1, nowCube.y, nowCube.z)))
position.Add(new Vector3(nowCube.x - 1, nowCube.y, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y + 1, nowCube.z)))
position.Add(new Vector3(nowCube.x, nowCube.y + 1, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y - 1, nowCube.z)))
position.Add(new Vector3(nowCube.x, nowCube.y - 1, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y, nowCube.z + 1)))
position.Add(new Vector3(nowCube.x, nowCube.y, nowCube.z + 1));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y, nowCube.z - 1)))
position.Add(new Vector3(nowCube.x, nowCube.y, nowCube.z - 1));
cubeToPlace.position = position[UnityEngineRandom.Range(0, positions.Count)]
}
private bool IsPositionEmpty(Vector3 targetPos)
{
if (targetPos.y == 0)
return false;
foreach(Vector3 pos in allCubesPositions)
{
if (pos.x == targetPos.x && pos.y == targetPos.y && pos.z == targetPos.z)
return false;
}
return true;
}
public int x, y, z;
{
public CubePos(int x, int z, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
public Vector3 getVector()
{
return new Vector3(x, y, z);
}
public void setVector(Vector3 pos)
{
x = Convert.ToInt32(pos.x);
y = Convert.ToInt32(pos.y);
z = Convert.ToInt32(pos.z);
}
}
Answer the question
In order to leave comments, you need to log in
The error is that you crookedly copied the code, and the structure declaration was struct CubePos
separated from the definition.
Here's what I tried to fix:
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
public class GameController: MonoBehaviour {
public float cubeChangePlaceSpeed = 0.5f;
public Transform cubeToPlace;
private List<Vector3> allCubesPosition = new List {
new Vector3(0, 0, 0),
new Vector3(1, 0, 0),
new Vector3(-1, 0, 0),
new Vector3(0, 1, 0),
new Vector3(0, 0, 0),
new Vector3(-1, 0, -1),
new Vector3(1, 0, 1),
new Vector3(0, 0, -1),
new Vector3(1, 0, -1),
}
private void Start() {
StartCoroutine(ShowCubePlace());
}
IEnumerator ShowCubePlace() {
while (true) {
SpawnPosition();
yield return new WaitForSeconds(cubeChangePlaceSpwwd)
}
}
private void SpawnPosition() {
List position = new List();
if (IsPositionEmpty(new Vector3(nowCube.x + 1, nowCube.y, nowCube.z))) position.Add(new Vector3(nowCube.x + 1, nowCube.y, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x - 1, nowCube.y, nowCube.z))) position.Add(new Vector3(nowCube.x - 1, nowCube.y, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y + 1, nowCube.z))) position.Add(new Vector3(nowCube.x, nowCube.y + 1, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y - 1, nowCube.z))) position.Add(new Vector3(nowCube.x, nowCube.y - 1, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y, nowCube.z + 1))) position.Add(new Vector3(nowCube.x, nowCube.y, nowCube.z + 1));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y, nowCube.z - 1))) position.Add(new Vector3(nowCube.x, nowCube.y, nowCube.z - 1));
cubeToPlace.position = position[UnityEngineRandom.Range(0, positions.Count)]
}
private bool IsPositionEmpty(Vector3 targetPos) {
if (targetPos.y == 0) return false;
foreach(Vector3 pos in allCubesPositions) {
if (pos.x == targetPos.x && pos.y == targetPos.y && pos.z == targetPos.z) return false;
}
return true;
}
}
// CubePos удалил, тк он не используется, и смысла в нём нет
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question