Unity 3d, сфера превращается в куб, когда я нажимаю на экран - PullRequest
0 голосов
/ 27 января 2020

Я пытался создать простой скрипт для тренировки с Unity 3D, но у меня есть эта проблема. При void start я создаю простую 3d-сферу, и когда я нажимаю на экран, сфера должна трансформироваться в другой объект (например, в куб). Я пытался создать Пустой игровой объект и создать этот скрипт для изменения объекта, но с пустым объектом я не могу использовать Rigidbody для порожденных 3d-объектов. Как я могу решить эту проблему?

Я бы хотел, чтобы сфера переключалась в куб, когда я нажимал на экран.

Может быть, мне следует добавить твердое тело в этот скрипт?

это мой сценарий:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class creatorscriptFunzionante : MonoBehaviour
{
    public int counter; //contatore per le forme da spawnare

    //forme da spawnare
    public GameObject sphereBase; //sfera iniziale
    public GameObject sphere;
    public GameObject cube;
    public GameObject capsule;

    private void Awake()
    {

    }

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

        if (Input.GetMouseButtonDown(0))
        {


            counter++;
            Debug.Log(counter);
            if (counter == 1)
            {

                Destroy(sphereBase);
                Destroy(capsule);
                sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                sphere.GetComponent<Renderer>().material.color = new Color(255, 0, 0); //color
            }

            if (counter == 2)
            {
                Destroy(sphere);
                cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
                cube.GetComponent<Renderer>().material.color = new Color(0, 255, 0);
            }

            if (counter == 3)
            {
                Destroy(cube);
                capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule);
                capsule.GetComponent<Renderer>().material.color = new Color(0, 25, 230);
                counter = 0;
            }
        }

    }
}

1 Ответ

0 голосов
/ 27 января 2020

Самое простое решение - инициализировать объекты в методе Start () следующим образом и установить их неактивными следующим образом:

Start() {
     sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
     sphere.GetComponent<Renderer>().material.color = new Color(255, 0, 0); //color
     cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
     cube.GetComponent<Renderer>().material.color = new Color(0, 255, 0);
     capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule);
     capsule.GetComponent<Renderer>().material.color = new Color(0, 25, 230);

     capsule.transform.SetParent(gameObject.transform);
     capsule.SetActive(false);
     cube.transform.SetParent(gameObject.transform);
     cube.SetActive(false);
     sphere.transform.SetParent(gameObject.transform);
}

И просто активировать нужный объект в методе Update () следующим образом

Update() {
     if (Input.GetMouseButtonDown(0)) {
       counter++;
       Debug.Log(counter);

       switch(counter) {
         case 1:
           sphere.SetActive(true);
           cube.SetActive(false);
           capsule.SetActive(false);
           break;
          case 2:
           sphere.SetActive(false);
           cube.SetActive(true);
           capsule.SetActive(false);
           break;
          case 3:
           sphere.SetActive(false);
           cube.SetActive(false);
           capsule.SetActive(true);
           counter=0;
           break;
       }
    }
}

Присоедините этот скрипт к пустому GameObject, и он должен работать

Для использования твердого тела добавьте Start ()

capsule.AddComponent<Rigidbody>();
sphere.AddComponent<Rigidbody>();
cube.AddComponent<Rigidbody>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...