我编写了一些用于检测攀爬的代码(附加到玩家对象的脚本):
private float PlayerColHeight;
private float PlayerColWidth;
private bool Climb = false;
void Start () {
PlayerCol = GetComponent<CapsuleCollider2D> ();
PlayerColHeight = PlayerCol.bounds.size.y;
PlayerColWidth = PlayerCol.bounds.size.x;
}
private void OnCollisionStay2D(Collision2D col){
if (!IsGrounded() && (col.gameObject.tag == "Wall")) {
Vector2 position = transform.position;
Vector2 wallPos = col.transform.position;
float wallColHeight = col.gameObject.GetComponent<BoxCollider2D> ().bounds.size.y;
if ((position.y+PlayerColHeight/2)==(wallPos.y + wallColHeight/2)){
Climb = true;
}
Debug.Log (Climb);
}
}
这意味着当玩家在空中并与墙壁碰撞时,我需要检查玩家顶点 Y 是否 = 墙壁顶点 Y 并了解它是否有效。
但这不起作用...控制台仅返回 False。
图片:
为什么不起作用?如果您知道另一种攀登方法,您能解释一下吗?
最佳答案
我认为你的条件陈述是错误的
if ((position.y+PlayerColHeight/2)==(wallPos.y + wallColHeight/2)){
Climb = true;
}
应该是
if ((position.y+PlayerColHeight/2) <= (wallPos.y + wallColHeight/2)){
Climb = true;
}
仅当两个值相等时,“攀爬”才为真,但当玩家位置小于墙壁时,您对攀爬感兴趣,对吗?
在任何情况下,您都应该在调试游戏时检查您的值,或者仅使用值position.y+PlayerColHeight/2 和 wallPos.y + wallColHeight/2 写入日志,以了解发生了什么。
编辑:当你接近离开“攀爬区”时,你的玩家可能会被卡住,因为他会得到 Climb = false,理想的情况应该是当你在墙上时启用攀爬,你不会不在乎再次跳跃是否会让玩家离开墙上方,更重要的是你可能会对在相同情况下到达墙顶感兴趣
关于c# - Unity爬墙2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49444988/