unity2D学习(8)修复角色走路的卡顿、设置二段跳
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)修复角色走路的卡顿、设置二段跳相关推荐
- unity2D学习笔记-角色动画
unity2D学习笔记-角色动画 角色移动 动画效果(重点!!!!!) 创建:Animator与Animation 状态转换 跳跃 从fall到idle Hierarchy中创建一个Sprite作为载 ...
- unity2D学习(10)创建敌人、为敌人编写简单的AI
1 创建敌人 按照之前创建Player角色的方法,一样创建出敌人,并为角色添加刚体.碰撞.动画.具体可以参考我之前的unity2D学习(4)(5),具体的细节就不放在这里了. 素材包里面有三种敌人(c ...
- 华为浏览器推荐关闭_用华为手机这5个功能要关掉,越早越好,不然你的手机会变的卡顿...
华为手机凭借着它优异的性能风靡全球,尤其是它的拍照功能受到了大家的一致好评,还被国际权威DXO评为世界上最好的拍照手机.但是不管是多好的手机,随着岁月的摧残也会变得卡顿,今天小编教大家一个方法,无论新 ...
- cocos ScrollView(滚动容器)加载大量item导致的卡顿问题解决方案
ScrollView(滚动容器)加载大量item时会导致游戏界面的卡顿,严重时整个界面会出现卡死的情况.最近项目中有遇到在滚动容器中加载大量item的问题,在此阐述一下自己的方法,希望对大家有所帮助. ...
- 电脑卡顿不流畅怎么解决_如何解决因电脑内存容量不足引起的卡顿?
内存是电脑中十分重要的部件之一,不管是操作系统还是软件程序都需要缓存到内存中才能使用,因此内存容量的大小直接影响着程序运行的快慢.有许多电脑用户的电脑使用过程中老觉得卡顿,在windows的任务管理器 ...
- 是什么造成了数据库的卡顿
目录 一.背景 二.问题定界 三.找出元凶 四.解决思路 声明:本文同步发表于 MongoDB 中文社区,传送门: http://www.mongoing.com/archives/26201 一.背 ...
- 关于MacBook蓝牙键盘鼠标耳机等设备各种的卡顿、黏滞、断开连接等各种问题解决方案
MacBook蓝牙键盘鼠标耳机等设备各种的卡顿.黏滞.断开连接等各种问题解决方案 各位好,这是我的第一篇技术分享文章 前言 问题列表及解决方案 总结 各位好,这是我的第一篇技术分享文章 前言 各位好, ...
- 两句css 搞定页面滚动时的卡顿问题?
前言 对于网页的卡顿性能优化,我们首先想到的肯定是从JavaScript开始.但这个锅js表示不背
- Android 中的卡顿丢帧原因概述 - 低内存篇
在Android 中的卡顿丢帧原因概述 - 系统篇 这篇文章中 , 实际案例这里我们有列举一些由于系统低内存导致的卡顿 , 由于 Android 低内存对整机性能影响比较大 , 所以单独写一篇文章 , ...
最新文章
- 参加第一届宇宙 JavaScript 大会是怎样的体验
- Python NumPy-快速处理数据
- 顺序容器----顺序容器概述,容器库概览
- ABAP Decimal byte
- P1468 派对灯 Party Lamps(BIG 模拟)
- angular 使用rxjs 监听同级兄弟组件数据变化
- android实用代码
- 百度SEO Keyword Surfer v0.3.7(关键词优化)
- Voovan网络编程介绍
- android 8.0 edittext,关注TextInputEditText的Android 8.0 Oreo崩溃
- 总结ubuntu 在命令界面login incorrect的问题
- fastreport实现动态列_excel中如何实现聚光灯效果?
- 最优化问题求解及Lingo教程
- 云南 代理服务器_今日更新快速ip代理服务地址 免费国外代理服务器 2013.4.17
- decimal.JS 快速入门
- 国外各国统计机构网址
- CentOS 6 安装免费虚拟主机控制面板ZPanel
- 什么是BPM系统?BPM流程管理系统介绍
- 创文明城市在路上,信息报送有高招
- LVS负载均衡详解(一)lvs的定义、组成、相关术语+3种工作模式+10种调度算法
热门文章
- 更新linux centos7服务器的安全更新补丁(只更新补丁而又不更新其他组件) yum security update只更新安全补丁
- 河北大学计算机男女比例,全国高校男女比例排行榜出炉!黑龙江省这所学校女生多……...
- keil 5与proteus8.9仿真实现四路抢答计分器
- 计算机专业排名211大学排名,计算机专业大学排名最新
- MMU相关概念及工作原理介绍
- 你想找的HTML最全 最精美 易懂文档来了 不好你打我
- 讲一次完整的产品迭代过程的各个阶段
- 一位匠人的中州韵——专访Rime输入法作者佛振
- css隐藏滚动条,兼容ie和chrome
- 软件设置linux时区,Linux设置和修改时间与时区