unity3d 中 实现 2d角色爬梯子功能。_哔哩哔哩_bilibiliunity3d 中 实现 2d角色爬梯子功能。, 视频播放量 2598、弹幕量 3、点赞数 28、投硬币枚数 18、收藏人数 83、转发人数 19, 视频作者 Fss1975, 作者简介 ,相关视频:寻路算法 在unity3d 中的演示,Unity3D mini游戏制作之 躲障碍,Unity3D 实现 FC版马里奥医生,unity3d 太空侵略者(space invader)制作(上),GBA游戏开发套件VHAM的大致介绍,利用python的xlwings和wxpython库来可视化操作excel文件,蛇蛇大战方块 Unity3D实现,最新PS3模拟器安装、设置、游戏下载安装以及部分游戏展示25/9/19,unity3d 太空侵略者(space invader)制作(预览),PS3模拟器使用终极指南https://www.bilibili.com/video/BV12t411R7CL/?spm_id_from=333.1007.top_right_bar_window_history.content.click根据这个视频学习了2d怎么写人物爬行楼梯,但是会有点小问题,如果爬到中间停下来,就没办法去继续爬楼梯了。但是视频中没有这个问题。
挂载到楼梯上的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 控制玩家是否到达了楼梯的位置
/// </summary>
public class ClimbController : MonoBehaviour
{
public float climbSpeed = 2f;
public Collider2D target; //与楼梯相接触的地面的碰撞体
private void OnTriggerStay2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
if (Input.GetKey(KeyCode.UpArrow))
{
collision.GetComponent<Rigidbody2D>().gravityScale = 0;
collision.GetComponent<Rigidbody2D>().velocity = new Vector2(0, climbSpeed);
// 发送消息给玩家,让PlayerControl脚本控制动画
collision.SendMessage("SetIsCanClimb", true);
Physics2D.IgnoreCollision(collision.GetComponent<Collider2D>(), target); //忽略碰撞
}
else if (Input.GetKey(KeyCode.DownArrow))
{
collision.GetComponent<Rigidbody2D>().gravityScale = 0;
collision.GetComponent<Rigidbody2D>().velocity = new Vector2(0, -climbSpeed);
// 发送消息给玩家,让PlayerControl脚本控制动画
collision.SendMessage("SetIsCanClimb", true);
Physics2D.IgnoreCollision(collision.GetComponent<Collider2D>(), target); //忽略碰撞,避免无法爬下梯子
}
else
{
collision.GetComponent<Rigidbody2D>().velocity = new Vector2(0, 0);
}
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
collision.SendMessage("SetIsCanClimb", false);
collision.GetComponent<Rigidbody2D>().gravityScale = 3;
//恢复对地面的碰撞
Physics2D.IgnoreCollision(collision.GetComponent<Collider2D>(), target, false);
}
}
}
挂载到人物上的代码:
/// <summary>
/// 设置能不能爬楼梯
/// </summary>
/// <param name="value"></param>
public void SetIsCanClimb(bool value)
{
isCanClimb = value;
animator.SetBool("Climb", isCanClimb);
}
思想比较简单,就是如果人物在楼梯的触发器之内,按向上的箭头就可以往上爬楼梯,按向下的箭头就可以向上爬。