c# - 在将组件添加到所有对象之前,如何设置刚体组件设置?
问题描述
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>();
我想首先在开始时使用公共变量设置刚体值设置,如质量拖动使用重力和其他刚体的东西,然后将具有我所做设置的刚体添加到每个对象。
不,如果我将刚体添加到每个对象,它将使用默认刚体设置,我想在添加刚体之前控制此设置。
解决方案
我想在添加刚体之前控制这个设置。
你不能,因为你不能,因为你不能将现有组件添加到游戏对象。该AddComponent
函数将组件的新实例添加到游戏对象。
请注意,该AddComponent
函数添加组件然后返回它刚刚添加到游戏对象的实例。您可以修改它返回的实例组件,这就是您应该做的。
保存默认设置的刚体:
public Rigidbody deafultSettings;
将刚体组件添加到您的楼梯游戏对象,然后返回添加的组件:
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;
}
组件在添加之后而不是在添加之前进行修改。这应该不是问题,但如果您不喜欢这样,请使用预制件。事实上,这就是预制件的用途,以便您可以使用默认设置创建游戏对象,然后重新使用它们。创建一个Rigidbody
已经连接到楼梯的预制件,然后使用该Instantiate
功能来安装预制件。您可以在实例化之前在编辑器或脚本中修改预制件。
推荐阅读
- scala - Spark Scala GroupBy
- javascript - 如何将项目放置在javascript中的指定位置
- swift - 当我在真实设备上运行我的应用程序时,它崩溃并抛出错误“dyld:未加载库:@rpath/libswiftCore.dylib”
- google-chrome-extension - 在侦听器中使用等待时如何避免“收到响应之前消息端口已关闭”错误
- angular - 在另一个组件上加载组件时面临问题
- java - 如何在我的代码中修复“线程中的异常”AWT-EventQueue-0“java.lang.NullPointerException”?
- angular - 如何在单元格编辑文本框中对 p 表应用验证?
- node.js - 如何在 selenium+nodejs 中运行多个功能文件?
- python - Pandas - 展平作为字典列表的列
- deployment - 如果在 Kubernetes 中将 MaxUnavailable 设置为 0,则不会替换 Pod