Unity育儿和疏离游戏对象

时间:2014-03-10 21:56:24

标签: c# unity3d

我目前在我的2D游戏中实施了一个爬墙系统,而我却陷入了一些棘手的部分。

我的想法是,当它与附加的2D对撞机发生碰撞时,我会让我的玩家父对墙对象。当玩家与墙壁碰撞时,玩家成为该墙壁的孩子并且仅限于在墙壁上上下移动。当玩家跳跃或到达顶部时,他们不再是墙上的孩子。但是玩家有能力将任何一点跳到他们着陆的墙上并保持在那一点上。

现在我已经使用以下代码制作了育儿部分(此代码附加到播放器):

void OnCollisionEnter2D(Collision2D collision)
{
    if(collision.gameObject.tag == "Wall")
    {
        this.transform.parent = collision.transform;
        Debug.Log("hit a wall");
    }
}

我正在努力解决的两个方面是让我的球员从墙上养育,让球员仍然站在他们着陆的墙上。

第一部分(去父母)我相信我需要使用以下代码:

void OnCollisionExit2D(Collision2D collision)
{

    if(collision.gameObject.tag == null)
    {
         this.transform.parent = null;
        Debug.Log("not hitting anythin");
    }
}

但是,当我运行时,我的播放器不会立即停止。我做得对吗?

对于如何开始让玩家坚持他们所连接的墙壁部分的另一个问题,我也毫无头绪。有人可以帮我解决我的问题吗?

1 个答案:

答案 0 :(得分:0)

理想情况下,你可以使用tranform.SetParent获得额外的位置。

transform.SetParent(parentTransform, true);
transform.SetParent(null, true);

如果后一行被触发,它应该从我的理解中脱离它的父,并且SetParent上的第二个参数应该解决定位问题。

虽然你现有的代码至少应该改变层次结构,但我怀疑你的碰撞代码存在问题 - 如果你输入与Tag:Wall的碰撞,那么你将要退出与Tag的碰撞:Wall not Tag:Null

然而@limoragni是对的,编辑你的层次结构对你角色的可能移动没有任何影响,除非你自己特意编码。您可以轻松设置布尔值并使用您的代码。

价: http://docs.unity3d.com/ScriptReference/Transform.SetParent.html