在子对象上引用多个ridigbody和colliders

时间:2018-07-06 16:33:00

标签: c# unity3d

我有一个要引用的子对象上具有多个刚体和对撞机的角色。最好是在个人层面上,这样我才能确定我的立方体角色发生碰撞的那一侧。您可以在下面的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);
        }
    }

}

You can see my hierarchy in the gif below.

1 个答案:

答案 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);
}