小细节:
大家好!我在工作时没有电脑在我面前。我实际上是在看回家后要做的事情的视频,所以我会尽我所能提取代码。
当谈到在平台角色上创建跳跃时,在大多数情况下,我看到的是一个附着在角色底部的物体,然后会创建一个地面检查以查看该物体是否撞到了什么东西。
我正在关注的教程可以检查许多不同的组件。( https://youtu.be/05TCTrpGB-4?t=6m54s )| 代码的确切时刻。
实际问题:
所以我一直试图想出我自己的方法,看起来更简单,但我被卡住了。所以我想,我想说的是,如果这个玩家身上的对撞机接触到任何其他对撞机,Grounded 是真的。
//Variable:
private bool Grounded;
//movement handle
void HandleMovement(){
if (Input.GetKeyDown(KeyCode.Space) && grounded)){
Ninjabody.AddForce(transform.up * jumpspeed ForcemMode.Impulse);
}
}
然后我按照参考指南:https ://docs.unity3d.com/ScriptReference/Collider2D.IsTouching.html
所以,要应用这个,它说使用public bool IsTouching(Collider2D collider);
我不知道 Collider 是否是它正在撞击的对撞机的名称,如果是这样,我将它命名为平台并放置它。一旦我测试它,我得到了一个错误。
我试图为你们搜索错误,但它本质上说 Ninja1.IsTouching 需要有一个主体,因为它没有被标记为某物。
据我了解,这意味着需要调用 IsTouching。我无法让它工作,所以我改用 Laymasks 尝试使用 ContactFilter ( https://docs.unity3d.com/ScriptReference/ContactFilter2D-layerMask.html )
private LasyerMask Platforms;
然后尝试在它自己的函数中调用它,但我不知道如何设置它。参考指南(https://docs.unity3d.com/ScriptReference/Collider2D.IsTouching.html)仅提供有关它作为变量的信息:
public bool IsTouching(Collider2D platform, ContactFilter2D Platforms);
如果我创建一个方法并在 handlemovement 内部调用该方法,它会中断得更多。我试过查找它,但我找不到使用 IsTouching 的引用,并且统一的引用让我循环创建一个变量,但我不知道如何应用该变量。
我将永远感激理解为什么这不起作用,以及我错过了什么。我知道这篇文章有点冗长,但我最好添加更多细节,而不是在有问题的帮助下留下。像往常一样提前谢谢大家。