unity游戏开发日记2——梯子的设计

**

# 为了实现这个梯子的功能花了两天的时间,在网上的参考资料几乎没有;//可能是因为太低端,大佬们都不发,小白的痛苦

**

## 花了两天终于搞明白怎么弄了。。。

先说一下设计的思路 :将梯子碰撞模式改为触发器,当主角进入其中 就关闭主角的重力模拟,这样就只方向键控制主角的上下位移了;//记得离开的时候给他恢复哦

**

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框中**,这样就可以完成梯子的设置了。

猜你喜欢

转载自blog.csdn.net/MaSet/article/details/89187413