using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GenerateStairs : MonoBehaviour
{
public GameObject stairsPrefab;
public float delay = 3;
public int stairsNumber = 5;
public Vector3 stairsStartPosition;
public Vector3 stairSize;
public Vector3 stairsSize;
public float stepWidthFactor = 1f;
public MoveObjects moveobjects;
public bool addRigidbody = false;
private Vector3 stairsPosition;
private GameObject stairsParent;
// Use this for initialization
void Start()
{
stairsParent = GameObject.Find("Stairs");
StartCoroutine(BuildStairs());
}
// Update is called once per frame
void Update()
{
}
private IEnumerator BuildStairs()
{
for (int i = 1; i <= stairsNumber; i++)
{
stairsPosition = new Vector3(
stairsStartPosition.x,
stairsStartPosition.y + (i * stairsSize.y),
stairsStartPosition.z + (i * stairsSize.y) * stepWidthFactor);
GameObject stairs = Instantiate(
stairsPrefab,
stairsPosition,
Quaternion.identity);
if(addRigidbody)
{
stairs.AddComponent<Rigidbody>();
}
stairs.tag = "Stair";
stairs.transform.parent = stairsParent.transform;
stairs.transform.localScale = stairSize;
yield return new WaitForSeconds(delay);
}
moveobjects.Init();
}
}
在此处将刚体添加到每个楼梯之前:
stairs.AddComponent<Rigidbody>();
我希望首先在“开始”中使用质量变量等公共变量使用重力和其他刚体来设置刚体值设置,然后使用已经进行的设置向每个对象添加刚体。
否,如果我要向每个对象添加刚体,它将具有默认的刚体设置,我想在添加刚体之前控制此设置。
答案 0 :(得分:1)
我要在添加刚体之前控制此设置。
不能,因为不能,不能将现有组件添加到GameObject。 AddComponent
函数将组件的新实例添加到GameObject。
请注意,AddComponent
函数会添加组件,然后返回它刚刚添加到GameObject的实例。您可以修改返回的实例组件,这就是您应该做的。
具有默认设置的刚体:
public Rigidbody deafultSettings;
将Rigidbody组件添加到楼梯GameObject,然后返回添加的组件:
Rigidbody stairRb = stairs.AddComponent<Rigidbody>();
您现在可以修改返回的组件或创建一个函数来简化您的操作:
CopyRigidBodySettings(deafultSettings, stairRb);
CopyRigidBodySettings
函数:
void CopyRigidBodySettings(Rigidbody destination, Rigidbody source)
{
destination.useGravity = source.useGravity;
destination.mass = source.mass;
destination.drag = source.drag;
destination.angularDrag = source.angularDrag;
}
在添加组件后对其进行修改,而不是在添加之前进行修改。那应该不成问题,但如果您不喜欢那样,请使用预制件。实际上,这就是预制件的用途,因此您可以创建具有默认设置的GameObject,然后重新使用它们。用已经连接了Rigidbody
的楼梯创建预制件,然后使用Instantiate
函数将预制件恢复原状。在实例化预制件之前,可以在编辑器或脚本中对其进行修改。