【问题标题】:Unity 3d, sphere transform into cube when I tap on screenUnity 3d,当我点击屏幕时,球体变成立方体
【发布时间】:2020-01-27 11:48:54
【问题描述】:

我尝试创建一个简单的脚本来使用 unity 3d 进行锻炼,但我遇到了这个问题。 在 void start 我创建了一个简单的 3d 球体,当我点击屏幕时,球体 应该在另一个对象(例如立方体)中变换。我尝试创建一个 Empty Game Object 并创建此脚本来更改对象,但是对于空对象,我无法将刚体用于生成的 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;
            }
        }

    }
}

【问题讨论】:

  • 你的意思是你想让你的球体变成一个立方体吗?这不是一个简单的项目,如果你只是想交换它,当然.. 你的问题似乎与标题不相关,请检查你的问题并更清楚你的要求
  • 执行该项目时会发生什么?还要通过设置它们的 transform.position 来确保新创建的图元处于正确的位置
  • @AlexGeorg 当我执行项目时,代码创建了一个球体,当我点击屏幕时,我的计数器增加,球体被破坏,立方体被创建。但是我需要为这些对象使用刚体,如果我在 EmptyGameObject 中设置刚体,则代码创建的 3dobject 没有刚体...
  • @BugFinder 对不起我的英语不好...是的,我想把球体变成一个立方体。
  • 担心您还必须在脚本中添加刚体组件,因为图元没有刚体。还要确保你知道 BugFinder 所说的变形指的是什么:他的意思是使球体逐渐变成立方体的形状。

标签: c# android unity3d


【解决方案1】:

最简单的解决方案是像这样在 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;
       }
    }
}

将此脚本附加到一个空的游戏对象,它应该可以工作

要使用刚体,请在 Start() 中添加

capsule.AddComponent<Rigidbody>();
sphere.AddComponent<Rigidbody>();
cube.AddComponent<Rigidbody>();

【讨论】:

  • 在 Start() 方法中,您还可以将刚体附加到对象上,也可以将其留空并直接在编辑器中创建此层次结构
  • 我有一个问题,是否可以为所有游戏对象使用相同的 RigidBody?因为,这样,当我点击屏幕时,每个对象都有他的RB。例如,如果球体从平面上掉下来,我在屏幕上单击,立方体将在球体的旧位置生成。
  • 是的。只需使用 gameobject.AddComponent();在开始()。然后 Rigidbody 组件位于您的空游戏对象上。我这样做删除了其他 AddComponent() 调用。
  • 你也应该像这样调用 setParents:capsule.transform.SetParent(gameObject.transform, false);所以对象会在你的空游戏对象的位置产生,而不是在 (0, 0, 0)
  • 感谢您的解释。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
相关资源
最近更新 更多