Создайте примитив и переместите его сразу после - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть скрипт, который удаляет кубический примитив, а затем создает новый сферический примитив. Как мне тогда переместить эту сферу примитив?

void OnCollisionEnter(Collision collision)
{
    if (collision.collider.gameObject.tag != "Destroy") 
    {
        GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        sphere.transform.SetPositionAndRotation(gameObject.transform.position, gameObject.transform.rotation);
        Destroy (gameObject);
    }
}

1 Ответ

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

Вот как я бы это сделал.

enter image description here

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»

Надеюсь, это поможет!

...