1 修复角色走路的卡顿

之前编写的游戏试玩中总会出现角色在Tilemap(非末端的瓦片)上移动会有卡顿,其实就是因为两个都是方形的碰撞器容易卡住。

解决方法:(3种)

  • 修改角色碰撞器Edge Radius变成胶囊碰撞器:Edge Radius是角色Box Collider 2D里面的一个参数,当Edge Radius大于零时,每个边缘的作用类似于带有圆形末端的“胶囊”形状。

  • 更换角色碰撞器为圆形的碰撞器:和上面的思路一样,把角色碰撞器的角变得有弧度。
  • 为Tilemap添加Composite Collider 2D组件:让这些单独的盒子碰撞器合并起来,这样角色在上面走的时候就不会碰到非末端的碰撞器而停下。

添加Composite Collider 2D要注意的地方:添加后,会自动生成Rigidbody 2D刚体会产生重力,要把刚体的Body Type选择为static,要在Tilemap Collider 2D里面勾选好Used By Composite才会起作用。

2 设置二段跳

之前写代码,游戏中可以无限跳跃,但是大部分的游戏跳跃都不会无限,所以要给它的跳跃来点限制。除了设置跳跃只能跳二段以外,还要限制起跳必须只能从地面开始跳,这样游戏才自然。

代码思路:就是设置两个参数jumpMax(最大跳跃数量)和jumpNum(当前跳跃数),然后判断一下每次按下跳跃键后,如果jumpNum等于0表示是第一跳,那么第一跳必须要碰地才能跳;如果jumpNum不为0,则代表已经是多跳了,只有jumpNum小于jumpMax才能跳;在之气那的角色落地判断部分,加上jumpNum清零。此方法不但适合二段跳也适合有限制的多段跳,只需要改变jumpMax就行了。

代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerController : MonoBehaviour {//左右移动,跳跃private float moveSpeed;//移动速度private float jumpForce;//跳跃力private Rigidbody2D rig;//刚体private Animator Anim;//角色的Animatorprivate Collider2D coll;//角色的碰撞器public LayerMask ground;//用来开启layerprivate bool falling=false;//用来标记是否是下落状态private int jumpMax;//跳跃次数的上线private int jumpNum;//当前跳跃的次数// Use this for initialization//初始化void Start () {rig = GetComponent<Rigidbody2D>();//获取主角刚体组件Anim = GetComponent<Animator>();//获取主角动画组件coll = GetComponent<Collider2D>();//获取角色碰撞器ground = 1<<8;//开启Ground的layer层,Ground在layer8jumpForce = 575f;moveSpeed = 500f;jumpMax = 2;//最多二段跳jumpNum = 0;//初始跳跃数为0}//固定的时间间隔执行,不受游戏帧率的影响void FixedUpdate(){Move();changeAnimator();}//控制移动void Move(){float moveMultiple = Input.GetAxis("Horizontal");float faceDirection = Input.GetAxisRaw("Horizontal");//角色左右移动if (moveMultiple!=0){rig.velocity = new Vector2(moveMultiple * moveSpeed * Time.deltaTime, rig.velocity.y);}//角色朝向修改if(faceDirection!=0){transform.localScale = new Vector2(faceDirection, 1);}//角色跳跃if (Input.GetButtonDown("Jump")){//rig.velocity = new Vector2(rig.velocity.x, jumpForce * Time.deltaTime);//Anim.SetBool("ground", false);if(jumpNum==0&& coll.IsTouchingLayers(ground))//第一跳要碰地才能跳{JumpChange();}else if (jumpNum > 0 && jumpNum < jumpMax)//第二跳判断{JumpChange();}}}//跳跃代码void JumpChange(){rig.velocity = new Vector2(rig.velocity.x, jumpForce * Time.deltaTime);Anim.SetBool("ground", false);jumpNum++;}void changeAnimator(){Anim.SetFloat("speed", Mathf.Abs(rig.velocity.x));if (Anim.GetBool("ground")==false&&rig.velocity.y<0){falling = true;}else if (coll.IsTouchingLayers(ground)&&falling){Anim.SetBool("ground", true);falling = false;jumpNum = 0;//落地的话,当前跳跃次数清零}}
}

unity2D学习(8)修复角色走路的卡顿、设置二段跳相关推荐

  1. unity2D学习笔记-角色动画

    unity2D学习笔记-角色动画 角色移动 动画效果(重点!!!!!) 创建:Animator与Animation 状态转换 跳跃 从fall到idle Hierarchy中创建一个Sprite作为载 ...

  2. unity2D学习(10)创建敌人、为敌人编写简单的AI

    1 创建敌人 按照之前创建Player角色的方法,一样创建出敌人,并为角色添加刚体.碰撞.动画.具体可以参考我之前的unity2D学习(4)(5),具体的细节就不放在这里了. 素材包里面有三种敌人(c ...

  3. 华为浏览器推荐关闭_用华为手机这5个功能要关掉,越早越好,不然你的手机会变的卡顿...

    华为手机凭借着它优异的性能风靡全球,尤其是它的拍照功能受到了大家的一致好评,还被国际权威DXO评为世界上最好的拍照手机.但是不管是多好的手机,随着岁月的摧残也会变得卡顿,今天小编教大家一个方法,无论新 ...

  4. cocos ScrollView(滚动容器)加载大量item导致的卡顿问题解决方案

    ScrollView(滚动容器)加载大量item时会导致游戏界面的卡顿,严重时整个界面会出现卡死的情况.最近项目中有遇到在滚动容器中加载大量item的问题,在此阐述一下自己的方法,希望对大家有所帮助. ...

  5. 电脑卡顿不流畅怎么解决_如何解决因电脑内存容量不足引起的卡顿?

    内存是电脑中十分重要的部件之一,不管是操作系统还是软件程序都需要缓存到内存中才能使用,因此内存容量的大小直接影响着程序运行的快慢.有许多电脑用户的电脑使用过程中老觉得卡顿,在windows的任务管理器 ...

  6. 是什么造成了数据库的卡顿

    目录 一.背景 二.问题定界 三.找出元凶 四.解决思路 声明:本文同步发表于 MongoDB 中文社区,传送门: http://www.mongoing.com/archives/26201 一.背 ...

  7. 关于MacBook蓝牙键盘鼠标耳机等设备各种的卡顿、黏滞、断开连接等各种问题解决方案

    MacBook蓝牙键盘鼠标耳机等设备各种的卡顿.黏滞.断开连接等各种问题解决方案 各位好,这是我的第一篇技术分享文章 前言 问题列表及解决方案 总结 各位好,这是我的第一篇技术分享文章 前言 各位好, ...

  8. 两句css 搞定页面滚动时的卡顿问题?

    前言 对于网页的卡顿性能优化,我们首先想到的肯定是从JavaScript开始.但这个锅js表示不背

  9. Android 中的卡顿丢帧原因概述 - 低内存篇

    在Android 中的卡顿丢帧原因概述 - 系统篇 这篇文章中 , 实际案例这里我们有列举一些由于系统低内存导致的卡顿 , 由于 Android 低内存对整机性能影响比较大 , 所以单独写一篇文章 , ...

最新文章

  1. 参加第一届宇宙 JavaScript 大会是怎样的体验
  2. Python NumPy-快速处理数据
  3. 顺序容器----顺序容器概述,容器库概览
  4. ABAP Decimal byte
  5. P1468 派对灯 Party Lamps(BIG 模拟)
  6. angular 使用rxjs 监听同级兄弟组件数据变化
  7. android实用代码
  8. 百度SEO Keyword Surfer v0.3.7(关键词优化)
  9. Voovan网络编程介绍
  10. android 8.0 edittext,关注TextInputEditText的Android 8.0 Oreo崩溃
  11. 总结ubuntu 在命令界面login incorrect的问题
  12. fastreport实现动态列_excel中如何实现聚光灯效果?
  13. 最优化问题求解及Lingo教程
  14. 云南 代理服务器_今日更新快速ip代理服务地址 免费国外代理服务器 2013.4.17
  15. decimal.JS 快速入门
  16. 国外各国统计机构网址
  17. CentOS 6 安装免费虚拟主机控制面板ZPanel
  18. 什么是BPM系统?BPM流程管理系统介绍
  19. 创文明城市在路上,信息报送有高招
  20. LVS负载均衡详解(一)lvs的定义、组成、相关术语+3种工作模式+10种调度算法

热门文章

  1. 更新linux centos7服务器的安全更新补丁(只更新补丁而又不更新其他组件) yum security update只更新安全补丁
  2. 河北大学计算机男女比例,全国高校男女比例排行榜出炉!黑龙江省这所学校女生多……...
  3. keil 5与proteus8.9仿真实现四路抢答计分器
  4. 计算机专业排名211大学排名,计算机专业大学排名最新
  5. MMU相关概念及工作原理介绍
  6. 你想找的HTML最全 最精美 易懂文档来了 不好你打我
  7. 讲一次完整的产品迭代过程的各个阶段
  8. 一位匠人的中州韵——专访Rime输入法作者佛振
  9. css隐藏滚动条,兼容ie和chrome
  10. 软件设置linux时区,Linux设置和修改时间与时区