我正在尝试为用户提供将当前gameObject(立方体)更改为新形状(球体)的选项,但是,我不知道如何实现为该脚本编写的所有功能。立方体到球体上。
我设法破坏了旧的多维数据集并将其替换为球体,但是该球体似乎没有用于该多维数据集的任何按键控件。我有一个想法,就是将新的gameObject的方法设置为用于多维数据集的方法(即newSphere.transform.rotation()= this.transform.rotation();),但似乎不起作用。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cubeControls : MonoBehaviour
{
// Constants for object rotation
public float moveSpeed = 80.0F;
public float turnSpeed = 100.0F;
// Initial scale of the original cube
public static Vector3 initscale = Vector3.one;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
/* Changing the position of the object
*
*/
// Moving the object right
if (Input.GetKey(KeyCode.D))
{
transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);
}
// Moving the object left
if (Input.GetKey(KeyCode.A))
{
transform.Translate(Vector3.left * moveSpeed * Time.deltaTime);
}
/* Changing the rotation of the object
*
*/
// Rotating the cube to the right
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
}
// Rotating the cube to the left
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(Vector3.down, turnSpeed * Time.deltaTime);
}
// Saving the current rendered material
Renderer rend = GetComponent<Renderer>();
/* Changing the scale of the object
*
*/
// Double the size of the cube
if (Input.GetKeyDown(KeyCode.Alpha2))
{
transform.localScale += new Vector3(2F, 2F, 2F);
}
/* Changing the color via key presses
*
*/
if (Input.GetKeyDown(KeyCode.R))
{
rend.material.SetColor("_Color", Color.red);
}
// Changing to sphere
if (Input.GetKeyDown(KeyCode.X))
{
GameObject newSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
Destroy(this.gameObject);
}
}
}
答案 0 :(得分:0)
通常,在Unity中,我们不会实例化原语并手动添加组件,因此这样做并不是长期的最佳方法,因为非程序员很难更改功能。更糟糕的是,它需要更改代码才能更改任何工作方式! Unity的主要优点是它具有功能强大的功能强大的可视化编辑器,我们应该尽可能多地使用它,否则使用Unity到底有什么意义?
通常来说,您要做的是为这些实体(立方体和球体)中的每个实体创建一个预制件,并将脚本附加到这两个实体上。然后,您无需实例化原始球体并尝试在脚本中从头开始构建球体,只需调用GameObject.Instantiate()即可在那里创建新球体。
public class cubeControls : MonoBehaviour
{
// Constants for object rotation
public GAmeObject spherePrefab;
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.X))
{
Instantiate(spherePrefab, transform.position, transform.rotation);
}
}
}
这有一些优点,其中一个是,您对编辑器内部的球具有完全控制权,想将不同的组件附加到您的球上吗?您可以这样做,而无需更改任何代码!是否想要略有不同的参数?没问题。艺术家是否要为球体添加炫酷的足迹效果?他们可以在没有程序员帮助的情况下做到这一点。
如果您需要修改球体上的变量(例如,要传递诸如立方体的剩余命中点?),则可以在新实例化的球体预制件上调用GetComponent(),并根据需要调用函数/编辑变量。 / p>