c# - Unity爬墙2D

标签 c# unity-game-engine

我编写了一些用于检测攀爬的代码(附加到玩家对象的脚本):

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。
图片:

enter image description here

为什么不起作用?如果您知道另一种攀登方法,您能解释一下吗?

最佳答案

我认为你的条件陈述是错误的

    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/

相关文章:

c# - Request.IsAuthenticated 为 TRUE 但 Membership.GetUser() 为 NULL

unity-game-engine - 如何回收游戏对象的统一滚动列表?

c# - 抓取和放下物体

javascript - 如何使用 breezejs 保护添加或删除实体

c# - Caliburn.Micro + MEF + 现代用户界面 : IContent events

android - 统一安卓 : How can I ensure quality on splash image display?

iphone - Unity3d 和 iPhone Objective-c?

unity-game-engine - 生成和显示数千个多边形的最佳实践

c# - 从包含一系列基于文件名进行版本控制的文件的文件夹中查找文件

c# - Entity Framework 代码优先和数据库优先错误/冲突