我目前在我的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");
}
}
但是,当我运行时,我的播放器不会立即停止。我做得对吗?
对于如何开始让玩家坚持他们所连接的墙壁部分的另一个问题,我也毫无头绪。有人可以帮我解决我的问题吗?
答案 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