Unity 2D人物移动实现

2023-11-18

Unity 2D人物移动实现

效果展示:
在这里插入图片描述
代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ParentnewController00 : MonoBehaviour
{
    private Rigidbody2D rg;
    private Collider2D coll;
    private Animator anim;

    public GameObject lift;//托举物品
    public float dis = 0;

    //托举
    public float hight = 3;
    public Transform kid_transform;
    public Transform box_transform;

    public float moveSpeed, jumpForce;

    public Transform groundcheck;
    public LayerMask ground;

    public bool isGround, isJump;

    public bool jumpPressed;
    int jumpCount;

    float h = 0;

    bool walk = true;

    float speed = 0;

    bool ispulling = false;
    void Start()
    {
        rg = GetComponent<Rigidbody2D>();
        coll = GetComponent<Collider2D>();
        anim = GetComponent<Animator>();
        lift.SetActive(false);
        speed = moveSpeed;
    }

    // Update is called once per frame
    void Update()
    {
        // Debug.Log(rg.velocity.y);

        if (Input.GetKeyDown(KeyCode.W) && jumpCount > 0)
        {
            Debug.Log("按下了跳跃键");
            jumpPressed = true;
        }
        if (Input.GetKeyUp(KeyCode.W) && jumpCount > 0)
        {
            Debug.Log("松开跳跃键");
            jumpPressed = false;
        }

        if (Input.GetKey(KeyCode.S))
        {
            anim.SetBool("down", true);
            walk = false;
            if (kid_transform.position.y - box_transform.position.y > hight)
                lift.SetActive(true);
        }
        else
        {
            anim.SetBool("down", false);
            walk = true;
            lift.SetActive(false);
        }


    }

    private void FixedUpdate()
    {

        isGround = coll.IsTouchingLayers(ground);
        groundMovement();
        Jump();
        switchJump();
    }

    void groundMovement()
    {

        if (walk)
        {
            if (Input.GetButton("A"))
            {
                h = -1;
                anim.SetBool("running", true);
                //if (Input.GetKey(KeyCode.LeftShift))
                //{
                //    moveSpeed = 4;
                //}
                //else
                //{
                //    moveSpeed = speed;
                //}

            }
            else if (Input.GetButton("D"))
            {
                h = 1;
                anim.SetBool("running", true);
                //if (Input.GetKey(KeyCode.LeftShift))
                //{
                //    moveSpeed = 4;
                //}
                //else
                //{
                //    moveSpeed = speed;
                //}
            }
            else
            {
                h = 0;
                anim.SetBool("running", false);
            }
        }

        //rg.velocity = new Vector2(h * moveSpeed, rg.velocity.y);

        transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime);

        if (h != 0)
        {
            transform.localScale = new Vector3(h, 1, 1);
        }
    }

    void Jump()
    {
        if (isGround)
        {
            jumpCount = 1;//设置跳跃的次数
            isJump = false;
        }
        if (jumpPressed && isGround)
        {
            isJump = true;
            rg.velocity = new Vector2(rg.velocity.x, jumpForce);
            jumpCount--;
            jumpPressed = false;
        }
        else if (jumpPressed && jumpCount > 0 && isJump)
        {
            rg.velocity = new Vector2(rg.velocity.x, jumpForce);
            jumpCount--;
            jumpPressed = false;
        }

    }

    void switchJump()
    {
        if (isGround)
        {
            anim.SetBool("jump", false);
        }
        else if (!isGround && rg.velocity.y > 0)
        {
            anim.SetBool("jump", true);
        }
        else if (rg.velocity.y < 0 && !isGround)
        {
            anim.SetBool("jump", true);
        }
    }



}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity 2D人物移动实现 的相关文章

  • Jmeter接口测试+压力测试

    jmeter是apache公司基于java开发的一款开源压力测试工具 体积小 功能全 使用方便 是一个比较轻量级的测试工具 使用起来非常简单 因为jmeter是java开发的 所以运行的时候必须先要安装jdk才可以 jmeter是免安装的
  • OkHttp的使用之{RequestBody、FormBody、MultipartBody}

    目录 0 相关文章 1 POST请求 1 1 RequestBody json数据提交 1 2 FromBody 表单提交 这种能满足大部分的需求 1 3 MultipartBody 文件上传 1 4 图片下载 文件下载 0 相关文章 Ok

随机推荐

  • 布隆过滤器(Bloom Filter)

    1 引言 通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景 一般想到的是将集合中所有元素保存起来 然后通过比较确定 链表 树 散列表 又叫哈希表 Hash table 等等数据结构都是这种思路 但是随着集合中元素的增加 我们需要的
  • 线程相关面试题

    1 ThreadPoolExecutor 线程池执行 有哪些常用的方法 1 执行线程池 submit excute 2 终止线程池 shutdown 3 判断线程是否终止 isShutdown 4 获取正在运行的线程数 getAcitive
  • 详解Python中字符串前“b”,“r”,“u”,“f”的作用

    1 字符串前加 u 例 u 我是含有中文字符组成的字符串 作用 后面字符串以 Unicode 格式 进行编码 一般用在中文字符串前面 防止因为源码储存格式问题 导致再次使用时出现乱码 2 字符串前加 r 例 r n n n n 表示一个普通
  • 视频稳像(Video Stabilization)

    原文 https blog csdn net hjl240 article details 52683738 开源 关键词 Video Stabilization 不错 https github com yaochih awesome vi
  • python中unittest+ddt的应用

    一 单个EXCEL执行 import unittest from class api login topup demo import http request from class api login topup http attr imp
  • 使用KIF进行功能性iOS UI测试

    开始使用KIF 从Github下载KIF源资产并将其放置在可以轻松找到的地方 或者 可以使用 Git 的子模块来获取本地使用的源代码 git 初始化 git submodule 添加 https github com kif framewo
  • c#的值类型和引用类型(拆装箱)

    1 值类型和引用类型 c 中所有的引用类型共同的基类是System Object 1 管理机制 值类型 操作系统负责 作用域结束时被操作系统自动释放 引用类型 垃圾回收器负责 2 内存分配 值类型 值类型实例总会被分配到变量声明的地方 声明
  • 计算机网络(3.6)数据链路层- PPP 协议的帧格式和工作状态

    PPP 协议的帧格式 PPP 帧的首部和尾部分别为 4 个字段和 2 个字段 标志字段F 0x7E 符号 0x 表示后面的字符是用十六进制表示 十六进制的7E的二进制表示是 01111110 地址字段A只置为0xFF 地址字段实际上并不起作
  • 托管函数和非托管函数如何互相传递ansi字符串?

    先来介绍两个预处理指令 pragma unmanaged pragma managed 这两个预处理指令 控制函数编译成托管函数 还是非托管函数 是函数级别的预控制指令 1 托管函数传送字符串给非托管函数 分三步走 a 先调用StringT
  • echars水状_Echarts饼状图属性设置

    标题 title text 学生生源地来源分布图 subtext 模拟数据 x 设置水平安放位置 默认左对齐 可选值 center left right number x坐标 单位px x center y 设置垂直安放位置 默认全图顶端
  • IPv6地址结构、地址分类以及表示方法

    IPv6地址的表示方法 IPv6地址总长度为128比特 通常分为8组 每组为4个十六进制数的形式 每组十六进制数间用冒号分隔 例如 FC00 0000 130F 0000 0000 09C0 876A 130B 这是IPv6地址的首选格式
  • Python从入门到精通,100天就够了!(2)——分支结构与循环结构

    文章目录 一 分支结构 选择结构 1 分支结构初体验 2 分支结构练习 二 循环结构 1 for in 循环 2 for in 循环练习 3 while 循环 4 break和continue 5 while 循环练习 6 嵌套的循环结构
  • 【零基础 快速学Java】韩顺平 p35-51 变量、数据类型(整型,浮点,字符,布尔)、重要编码,API文档

    课程 p35 51 变量 变量是程序的基本组成单位 变量有三个基本要素 类型 名称 值 变量相当于内存中一个数据存储空间的表示 通过变量名可以访问变量 值 四个常用数据类型 int double char String String的S要大
  • LuCI - 网页用户配置界面开发

    luci 参考资料 http luci subsignal org trac wiki Documentation http wiki openwrt org doc techref preinit mount first boot htt
  • 【IOS 开发学习总结-OC-4】objective-c 运算符

    运算符是用于数据运算 赋值和比较等的特殊符号 objective c 语言中的运算符有以下几种 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 类型相关运算符 算术运算符 有7个基本运算符 加法运算符 减法运算符 还可以作为负号使
  • Ubuntu下安装jdk1.7

    转载 http blog csdn net zth1002 article details 51383508 1 去到官网下载jdk 点击打开链接 2 安装WinSCP工具连接到Linux系统上面在 usr lib里面新建一个jvm文件夹
  • UPF与低功耗设计实现实例 -- 附UPF与DC综合脚本

    原文链接 https www eefocus com industrial electronics 473034 本文摘自 数字集成电路低功耗物理实现技术与 UPF 孙轶群 sun yiqun nationz com cn 国民技术股份有限
  • Tomcat Port8009与AJP13协议

    Tomcat最主要的功能是提供Servlet JSP容器 尽管它也可以作为独立的Java Web服务器 它在对静态资源 如HTML文件或图像文件 的处理速度 以及提供的Web服务器管理功能方面都不如其他专业的HTTP服务器 如IIS和Apa
  • java.util.ConcurrentModificationException

    错误类型 java util ConcurrentModificationException 出现原因 在foreach增强循环中进行了元素删除操作 只要是集合这样做都会出现这个问题 ConcurrentModificationExcept
  • Unity 2D人物移动实现

    Unity 2D人物移动实现 效果展示 代码 using System Collections using System Collections Generic using UnityEngine public class Parentne