统一养育和去养育游戏对象
本文关键字:游戏 对象 | 更新日期: 2023-09-27 17:49:17
我目前正在我的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");
}
}
然而,当我运行这个时,我的播放器不会立即退出。我做对了吗?
我也不知道如何开始我的另一个问题,即让玩家坚持他们连接的那部分墙。有人能帮我解决我的问题吗?
理想情况下,您可以使用tranform.SetParent
来获得额外的位置。
transform.SetParent(parentTransform, true);
transform.SetParent(null, true);
如果后一行被触发,据我所知,它应该从它的父行分离,SetParent上的第二个参数应该修复定位问题。
虽然你现有的代码应该至少改变层次结构,我怀疑问题是你的碰撞代码-如果你输入一个碰撞标签:墙,那么你将退出碰撞标签:墙,而不是标签:Null。
然而@limoragni是对的,编辑你的层次结构对你的角色的可能运动没有影响,除非你自己特别编码。你可以很容易地设置一个布尔值,并使用你的代码。
参考:http://docs.unity3d.com/ScriptReference/Transform.SetParent.html