Вот как я бы это сделал.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Main : MonoBehaviour
{
public GameObject sphere;
private bool spawnSphere = false;
private GameObject sphereThatIWantToMove;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (spawnSphere)
{
sphereThatIWantToMove = Instantiate(sphere, new Vector3(0, 0, 0), Quaternion.identity);
spawnSphere = false;
}
//Code that moves the sphere
}
}
В своем коде я добавил Publi c GameObject, так что я мог загрузить сферу, готовую к этому. Затем вы создаете экземпляр этого префаба, но сохраняете экземпляр в другой переменной GameObject, затем вы можете просто использовать GameObject.Transform.Position для его перемещения.
Еще несколько подробностей о реальном перемещении сферы:
float x = sphereThatIWantToMove.transform.position.x;
float y = sphereThatIWantToMove.transform.position.y;
float z = sphereThatIWantToMove.transform.position.z;
if (Input.GetKeyDown(KeyCode.UpArrow))
{
y--;
}
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
x--;
}
if (Input.GetKeyDown(KeyCode.DownArrow))
{
y++;
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
x++;
}
if (Input.GetKeyDown(KeyCode.PageUp))
{
z--;
}
if (Input.GetKeyDown(KeyCode.PageDown))
{
z++;
}
sphereThatIWantToMove.transform.position = new Vector3(x, y, z);
Координаты GameObject хранятся в виде вектора 3 в Transform.Position. Вы не можете редактировать это значение напрямую, вместо этого вы должны разбить значения (они плавающие), используя GameObject.Transform.Position.x, GameObject.Transform.Position.y и GameObject.Transform.Position.z. Затем вы меняете эти значения и загружаете их обратно с помощью «нового Vector3»
Надеюсь, это поможет!