我有一个要引用的子对象上具有多个刚体和对撞机的角色。最好是在个人层面上,这样我才能确定我的立方体角色发生碰撞的那一侧。您可以在下面的gif中看到我的层次结构。
我有一些代码可以工作,但是只有在每个子游戏对象上都有脚本时,我才能使其工作。最终,我希望在父对象上创建一个脚本,以创建刚体和对撞机的列表/数组,并将它们分组为“边”。
Here are my project files,这是我到目前为止损坏的代码。请有人看看并指出正确的方向。我应该使用GetComponentsInChildren吗?
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityStandardAssets.CrossPlatformInput;
public class Player : MonoBehaviour
{
[SerializeField] private float m_JumpPower = 1; // The force added to the jelly when it jumps.
private bool jump;
Rigidbody rigArray;
private void Start ()
{
// Start function
GameObject[] objs = GameObject.FindGameObjectsWithTag("RigObject");
List<Rigidbody> list = new List<Rigidbody>();
for (int i = 0; i < objs.Length; i++)
{
Rigidbody rig = objs[i].GetComponent<Rigidbody>();
rigList.Add(rig);
}
rigArray = list.ToArray();
}
private void Update ()
{
jump = CrossPlatformInputManager.GetButton("Jump");
if (jump)
{
Debug.Log("Jumping");
rigArray.AddForce(Vector3.up * m_JumpPower, ForceMode.Impulse);
}
}
}
答案 0 :(得分:2)
您应该使用Component.GetComponentsInChildren。可以使用Rigidbody
对象来指定,并在父级的子级中获得所有刚体。然后,可以使用附加了刚体的GameObject的tags
来识别刚体。例如,用LEFT_SIDE
标记子对象以获得左侧刚体。
向所有刚体添加力:
public Rigidbody[] Rigidbodies;
...
Rigidbodies = GetComponentsInChildren<Rigidbody>();
...
foreach(Rididbody rb in Rigidbodies){
rb.AddForce(Vector3.up * m_JumpPower, ForceMode.Impulse);
}