【发布时间】:2021-01-07 00:00:47
【问题描述】:
我正在做一个应该是相对简单的脚本练习,但我是 Unity 脚本的新手,并且已经坚持了太久。
基本上,我正在处理的参数如下:
- 在场景中的每一帧实例化一个立方体预制件。
- 立方体需要根据生成的顺序命名为“Cube1”、“Cube2”……。
- 立方体需要在距离原点 [0,0,0] 1 个单位内的随机位置生成。
- 每个立方体都应该有一个随机的颜色。
- 立方体大小 (localScale) 在每帧中缩小 10%。
- 当立方体的比例小于其原始比例的 10% 时,立方体被销毁。
我被困在第二部分。我可以创建任意数量的立方体对象,但我试图在列表中命名它们只会在每次创建新对象时显示为“立方体”。
另外,我不确定如何定位列表中的每个立方体,以便它们全部缩小然后消失。所以就目前而言,这只是在距离原点 1 个单位内生成随机大小和颜色的立方体,但这些立方体一旦被创建就不会做任何事情。
到目前为止我的代码:
using JetBrains.Annotations;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeCreator : MonoBehaviour
{
Vector3 origin;
private List<GameObject> cubeList;
public float targetScale = 0.1f;
public float shrinkSpeed = 0.1f;
// Start is called before the first frame update
private void Awake()
{
cubeList = new List<GameObject>();
}
void Start()
{
origin = new Vector3(0, 0, 0);
}
// Update is called once per frame
void Update()
{
AddNewCube();
// RemoveCube(cubeList[i]);
//i++;
}
private void SetRandCubeState(GameObject cube)
{
float randScale = Random.Range(0.8f, 1.0f);
Vector3 randomScaler = new Vector3(randScale, randScale, randScale);
cube.transform.localScale = randomScaler;
Vector3 randomPosition = new Vector3(Random.Range(origin.x - 1.0f, origin.x + 1.0f), Random.Range(origin.y - 1.0f, origin.y + 1.0f), Random.Range(-1.0f,1.0f));
cube.transform.localPosition = randomPosition;
Renderer render = cube.GetComponent<Renderer>();
render.material.SetColor("_Color", Random.ColorHSV());
}
private void AddNewCube()
{
GameObject newCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cubeList.Add(newCube);
SetRandCubeState(newCube);
for (int i = 0; i == cubeList.Count; i++)
{
cubeList[i].name = "cube" + i;
cubeList[i].transform.localScale = Vector3.Lerp(cubeList[i].transform.localScale, new Vector3(targetScale, targetScale, targetScale), Time.deltaTime * shrinkSpeed);
print("i is equal to " + i);
}
}
private void RemoveCube(GameObject oldCube)
{
Destroy(oldCube);
}
}
【问题讨论】:
标签: c# visual-studio unity3d scripting