Unity2D 人物爬楼梯

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模拟器使用终极指南icon-default.png?t=O83Ahttps://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);
    }

思想比较简单,就是如果人物在楼梯的触发器之内,按向上的箭头就可以往上爬楼梯,按向下的箭头就可以向上爬。

猜你喜欢

转载自blog.csdn.net/QA154/article/details/143222022