C# 在子对象上引用多个ridigbodies和碰撞器

C# 在子对象上引用多个ridigbodies和碰撞器,c#,unity3d,C#,Unity3d,我有一个角色,在我想引用的子对象上有多个刚体和碰撞器。最好是在个人层面上,这样我就可以确定立方体角色的哪一侧发生碰撞。您可以在下面的gif中看到我的层次结构 我有一些代码在工作,但我只有在每个子游戏对象上都有脚本的情况下才能让它工作。最后,我希望在父对象上有一个脚本,创建刚体和碰撞器的列表/数组,并将它们分组为“边” &这是到目前为止我的错误代码。请有人看一下,给我指一下正确的方向。我应该在Children中使用GetComponents吗 using UnityEngine; using Sy

我有一个角色,在我想引用的子对象上有多个刚体和碰撞器。最好是在个人层面上,这样我就可以确定立方体角色的哪一侧发生碰撞。您可以在下面的gif中看到我的层次结构

我有一些代码在工作,但我只有在每个子游戏对象上都有脚本的情况下才能让它工作。最后,我希望在父对象上有一个脚本,创建刚体和碰撞器的列表/数组,并将它们分组为“边”

&这是到目前为止我的错误代码。请有人看一下,给我指一下正确的方向。我应该在Children中使用GetComponents吗

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

}
使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
使用UnityStandardAssets.CrossPlatformInput;
公共类玩家:单一行为
{
[SerializeField]private float m_JumpPower=1;//果冻跳跃时添加到果冻上的力。
私人跳远;
刚体阵列;
私有void开始()
{
//启动功能
GameObject[]objs=GameObject.FindGameObjectsWithTag(“RigObject”);
列表=新列表();
for(int i=0;i
您应该使用。这可以通过
刚体
对象指定,并获取父对象的子对象中的所有刚体。然后,您可以使用刚体附着到的游戏对象的
标记来识别刚体。例如,使用
LEFT_SIDE
标记子对象以获得左侧刚体

要向所有刚体添加力,请执行以下操作:

public Rigidbody[] Rigidbodies;
...
Rigidbodies = GetComponentsInChildren<Rigidbody>();
...
foreach(Rididbody rb in Rigidbodies){
     rb.AddForce(Vector3.up * m_JumpPower, ForceMode.Impulse);
}
公共刚体[]刚体;
...
Rigidbodies=GetComponentsInChildren();
...
foreach(刚体中的Rididbody rb){
rb.AddForce(矢量3.up*m_跳线功率、力模式、脉冲);
}
您应该使用。这可以通过
刚体
对象指定,并获取父对象的子对象中的所有刚体。然后,您可以使用刚体附着到的游戏对象的
标记来识别刚体。例如,使用
LEFT_SIDE
标记子对象以获得左侧刚体

要向所有刚体添加力,请执行以下操作:

public Rigidbody[] Rigidbodies;
...
Rigidbodies = GetComponentsInChildren<Rigidbody>();
...
foreach(Rididbody rb in Rigidbodies){
     rb.AddForce(Vector3.up * m_JumpPower, ForceMode.Impulse);
}
公共刚体[]刚体;
...
Rigidbodies=GetComponentsInChildren();
...
foreach(刚体中的Rididbody rb){
rb.AddForce(矢量3.up*m_跳线功率、力模式、脉冲);
}

我想我明白你的意思,但我有一个错误,我不知道为什么。Assets/Scripts/Player.cs(24,25):错误CS1061:Type
UnityEngine.Component[]”不包含
AddForce“的定义,并且找不到类型为
UnityEngine.Component[]”的扩展方法
AddForce“。是否缺少程序集引用?您正在尝试向组件数组添加力。与其将其设置为组件阵列,不如将其设置为刚体阵列,并使用
foreach
循环来添加力可靠,它可以工作!非常感谢。碰撞器会以同样的方式工作吗?看起来OnCollisionCenter消息不会在我的父对象上触发,只有具有刚体的子对象。碰撞由碰撞器位置决定,而不是刚体位置。你们的对撞机在哪里?我想我明白你们的意思,但我得到了一个错误,我不知道为什么。Assets/Scripts/Player.cs(24,25):错误CS1061:Type
UnityEngine.Component[]”不包含
AddForce“的定义,并且找不到类型为
UnityEngine.Component[]”的扩展方法
AddForce“。是否缺少程序集引用?您正在尝试向组件数组添加力。与其将其设置为组件阵列,不如将其设置为刚体阵列,并使用
foreach
循环来添加力可靠,它可以工作!非常感谢。碰撞器会以同样的方式工作吗?看起来OnCollisionCenter消息不会在我的父对象上触发,只有具有刚体的子对象。碰撞由碰撞器位置决定,而不是刚体位置。你们的对撞机在哪里?