**
# 为了实现这个梯子的功能花了两天的时间,在网上的参考资料几乎没有;//可能是因为太低端,大佬们都不发,小白的痛苦
**
## 花了两天终于搞明白怎么弄了。。。
先说一下设计的思路 :将梯子碰撞模式改为触发器,当主角进入其中 就关闭主角的重力模拟,这样就只方向键控制主角的上下位移了;//记得离开的时候给他恢复哦
**
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LadderClimb : MonoBehaviour
{
public float climbSpeed = 0.02f; //爬梯子的速度
public Collider2D jiaoca; //对象刚体
private void OnTriggerStay2D(Collider2D collision) //进入梯子时候
{
if (collision.gameObject .tag == "Player") //进入梯子主角的标签!!!
{
if(Input .GetKey (KeyCode.UpArrow)) //判断按键
{
collision.gameObject.GetComponent<Rigidbody2D>().velocity = new Vector2(0, climbSpeed); //主角触碰梯子后给与一个Y轴方向的力
collision.gameObject.GetComponent<Rigidbody2D>().gravityScale = 0; //主角触碰梯子后重力归零
Physics2D.IgnoreCollision(collision.GetComponent<Collider2D>(), jiaoca, true); //梯子接触的地板和主角的碰撞关闭
}
if (Input.GetKey(KeyCode.DownArrow))
{
collision.gameObject.GetComponent<Rigidbody2D>().velocity = new Vector2(0, -climbSpeed);
collision.gameObject.GetComponent<Rigidbody2D>().gravityScale = 0;
Physics2D.IgnoreCollision(collision.GetComponent<Collider2D>(), jiaoca,true);
}
else
{
collision.gameObject.GetComponent<Rigidbody2D>().velocity = new Vector2(0,0);
}
}
}
private void OnTriggerExit2D(Collider2D collision) //离开梯子时候
{
collision.gameObject.GetComponent<Rigidbody2D>().gravityScale = 1; ////梯子接触的地板和主角的碰撞关闭
Physics2D.IgnoreCollision(collision.GetComponent<Collider2D>(), jiaoca, false );//梯子接触的地板和主角的碰撞开启
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190410163822793.png
将代码拖进梯子,然后把和梯子
接触的地面
拉到 public框中**,这样就可以完成梯子的设置了。