C# 不跟随父母的子女

C# 不跟随父母的子女,c#,unity3d,2d,C#,Unity3d,2d,我正在制作一个口袋妖怪克隆。 这是一个自上而下的基于分片的rpg 所以我在播放器上添加了4个游戏对象。向上、向下、向左、向右呼叫。 我把它们放在球员周围。我使用这个设置来检查游戏对象是否正常运行。他站在水上。如果这是真的,那么玩家就不能上去了。这是我为碰撞而做的工作。然而,我的孩子们不想跟随我的父母。我所做的只是将4个for gameobjects拖到播放器上,并添加了以下c#脚本: 使用UnityEngine; 使用系统集合; 公共类玩家控制器:单行为 { 公共层屏蔽底层; 矢量2起始点; 向

我正在制作一个口袋妖怪克隆。 这是一个自上而下的基于分片的rpg

所以我在播放器上添加了4个游戏对象。向上、向下、向左、向右呼叫。 我把它们放在球员周围。我使用这个设置来检查游戏对象是否正常运行。他站在水上。如果这是真的,那么玩家就不能上去了。这是我为碰撞而做的工作。然而,我的孩子们不想跟随我的父母。我所做的只是将4个for gameobjects拖到播放器上,并添加了以下c#脚本:

使用UnityEngine;
使用系统集合;
公共类玩家控制器:单行为
{
公共层屏蔽底层;
矢量2起始点;
向量2端点;
私人浮动增量;
布尔·伊斯莫温;
公众浮标速度;
公共tk2dTileMap tilemap;
公开游戏对象;
公开游戏对象关闭;
公共游戏对象左;
公共游戏客体权利;
void Start()
{
startPoint=transform.position;
端点=transform.position;
}
无效更新()
{

如果(增量您正在脚本中创建与您在编辑器中创建的对象无关的新
游戏对象(
向上
向下
,等等)。有两种解决方案:

1) 您需要将
向上
向下
等分配给在编辑器中创建的
游戏对象
。您可以通过编辑
开始
方法来完成此操作,方法包括:

up = GameObject.Find( "up" );
down = GameObject.Find( "down" );
// etc.
“up”
替换为编辑器中命名的
up
游戏对象


2) 将
向上
向下
等作为子对象分配给父对象
游戏对象

up.transform.parent   = parentGameObject.transform;
down.transform.parent = parentGameObject.transform;
// etc.
请注意,如果按此路线执行,则将不会使用在编辑器中创建的
向上
向下
等对象。您还需要翻译新对象(在设置其父对象后),否则它们将仅位于相对于父对象的
(0,0,0)

根据评论进行编辑

如果我对问题的理解正确,那么在编辑器中将
向上
向下
等对象作为子对象添加时,您似乎犯了一个错误。只需将它们全部拖动到同一级别的父对象上即可:

然后,每当
TestParent
对象移动时,其他对象都会停留在与父对象相同的相对位置,因此也会移动。如果将
GameObjects
添加到脚本中,如下所示:

您可以单独移动对象(同时仍然相对于父对象)每秒一个单位。
向下
对象也会以每秒额外一个单位的速度向上移动。这会导致
父测试
向上
保持队形,每秒向上移动一个单位,而
向下
则以每秒两个单位的速度移动并缓慢地经过它们

using UnityEngine;
using System.Collections;

public class DeleteMe : MonoBehaviour 
{
    public GameObject Up;
    public GameObject Down;
    public GameObject Left;
    public GameObject Right;

    void Start( ) 
    {

    }

    // Update is called once per frame
    void Update( ) 
    {
        Move( gameObject );
        Move( Down );
    }

    private void Move( GameObject obj )
    {
        Vector3 position = obj.transform.position;
        position.y += UnityEngine.Time.deltaTime;
        obj.transform.position = position;
    }
}
开始时的屏幕截图:

过了一段时间后的另一次:

最后请注意,您不需要在脚本中包含
public
GameObject
s,然后将它们拖放到脚本上即可访问子脚本。通过将脚本修改为:

    private GameObject Up;
    private GameObject Down;
    private GameObject Left;
    private GameObject Right;

    void Start( ) 
    {
        Up    = transform.Find( "Up" ).gameObject;
        Down  = transform.Find( "Down" ).gameObject;
        Left  = transform.Find( "Left" ).gameObject;
        Right = transform.Find( "Right" ).gameObject;
    }
这避免了必须拖放到脚本本身的繁琐性质,还允许您访问可能会动态添加到父级的子级,因此无法拖放


希望这有帮助!

通过公开它们,我可以在编辑器中将游戏对象拖到脚本中。而且我还将游戏对象拖到了玩家身上,这样他们就应该是孩子了?我没有机会准确地测试该方法,但当我有机会这样做时会更新。谢谢你的努力。谢谢你。非常感谢。你所做的一切都是为了一个公共属性,您将看到添加脚本的新字段。只需将游戏对象从层次结构拖到空字段中即可。关于父子关系,只需将一个游戏对象拖到另一个上即可。@NullReference如果新信息有任何帮助,请告诉我
    private GameObject Up;
    private GameObject Down;
    private GameObject Left;
    private GameObject Right;

    void Start( ) 
    {
        Up    = transform.Find( "Up" ).gameObject;
        Down  = transform.Find( "Down" ).gameObject;
        Left  = transform.Find( "Left" ).gameObject;
        Right = transform.Find( "Right" ).gameObject;
    }