角色移动优化【Unity2D自学之路】
自学unity2D独立游戏开发,第一篇自学笔记。在场景中添加角色,并给角色添加Rigidbody2D刚体组件、collection2D碰撞体组件,c#脚本组件控制人物移动和跳跃。c#脚本组件内容如下,我进行了详细的注释,以便后用,想学习的朋友可以参考一下。
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class PlayerControl : MonoBehaviour
{
private Rigidbody2D m_PlayerRb;// 人物刚体
private float m_FacingRight = ;//角色是否面向右方
private float m_MoveInputDirection;//方向输入
public float m_MoveSpeed;//移动速度
private Vector3 m_Velocity = Vector3.zero;
private float m_MovementSmoothing = .05f;//移动平滑速度 public Transform m_GroundCheck;//地面检查
public bool m_Grounded=true;//是否站在地面上主要用于跳跃是判断
public float m_JumpForce = 15f;//跳跃力量
public float groundCheckRadius = 0.2f;//地面检测半径
public LayerMask m_WhatisGround;//检测碰撞的层 [SerializeField]private float jumpFactor;
private void Awake()
{
m_PlayerRb = GetComponent<Rigidbody2D>();//获取角色刚体
}
private void Update()
{
//获取角色图片大小sp.bounds.extents.y
m_Grounded = Physics2D.OverlapCircle(m_GroundCheck.position, groundCheckRadius, m_WhatisGround);
Vector3 m_mousePostion = Input.mousePosition;//获取鼠标位置
m_mousePostion = Camera.main.ScreenToWorldPoint(m_mousePostion);//转换成世界坐标
// 因为是2D,用不到z轴。使将z轴的值为0,这样鼠标的坐标就在(x,y)平面上了
m_mousePostion.z = ;
//根据鼠标位置翻转角色
if (m_mousePostion.x-transform.position.x < && m_FacingRight == )
{
Flip();
}
else if (m_mousePostion.x - transform.position.x > && m_FacingRight == -)
{
Flip();
} #region 左右移动相关
//获取键盘输入,表示左右输入 按键A或D或向左箭头向右箭头
m_MoveInputDirection = Input.GetAxisRaw("Horizontal");
#endregion
#region 跳跃相关
//判断是否按下跳跃键,并角色在地面上
if (Input.GetButtonDown("Jump")&&m_Grounded)
{
m_Grounded = false;//跳跃后,是否在地面为否
m_PlayerRb.velocity = Vector2.up * m_JumpForce;//角色向上跳跃
}
BetterJump();
#endregion
}
private void FixedUpdate()
{
if (m_MoveInputDirection!=)//表示玩家按下了左右方向键
{
//移动角色
Vector3 targetVelocity = new Vector2(m_MoveSpeed * m_MoveInputDirection, m_PlayerRb.velocity.y);
m_PlayerRb.velocity = Vector3.SmoothDamp(m_PlayerRb.velocity, targetVelocity, ref m_Velocity, m_MovementSmoothing);
}
}
/// <summary>
/// 角色翻转
/// </summary>
void Flip()
{
m_FacingRight *= -;
transform.Rotate(0.0f, 180.0f, 0.0f);
} /// <summary>
/// 角色跳跃,长按高跳,短按低跳
/// </summary>
private void BetterJump()
{
//角色跳起后下落阶段
if (m_PlayerRb.velocity.y<)
{
m_PlayerRb.velocity += Vector2.up * Physics2D.gravity.y * jumpFactor*Time.deltaTime;//不停的增加重力,手感更强使游戏更有可玩性
}
else if (m_PlayerRb.velocity.y>&&!Input.GetButton("Jump"))//角色跳起阶段,并放弃按跳跃键
{
m_PlayerRb.velocity += Vector2.up * Physics2D.gravity.y * jumpFactor * Time.deltaTime;
}
} private void OnDrawGizmos()
{
//地面检测方法划线显示,便于观察
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(m_GroundCheck.position, groundCheckRadius); } }
角色移动优化【Unity2D自学之路】的更多相关文章
- 【转】JAVA自学之路
JAVA自学之路 一: 学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向 ...
- 一个「学渣」从零开始的Web前端自学之路
从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”. 最后的机缘巧合下,走上了前端开发之路,作为一个非计算机专业且低 ...
- 【转】Java自学之路——by马士兵
作者:马士兵老师 JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟 ...
- Java自学之路(新手一定要看)
Java自学之路(新手一定要看) 转自尚学堂 JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游 ...
- [感悟]马士兵Java自学之路——(精华版)
JAVA自学之路 一: 学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向 ...
- 马士兵_JAVA自学之路(为那些目标模糊的码农们)
转载自:http://blog.csdn.net/anlidengshiwei/article/details/42264301 JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. ...
- 我的.NET自学之路
我第一门语言接触的并不是.net,而是php刚学php感觉还好,但是一学到后面就有一点头晕乎乎的,我感觉没有一个好的编写php代码的编辑器.而且php是弱类型语言,感觉起来没有像c,java,c#这些 ...
- 聊聊我的 Java 自学之路
最近经常在知乎收到类似『没基础,java 如何自学』.『怎么才能掌握编程』等等问题,再加上发现高中同学也在自学.有感而发,讲讲我的自学之路. 1.1. 大学 高考没正常发挥,考入一所二流的学校,当时分 ...
- 【我的前端自学之路】【HTML5】.html和.htm的区别
以下为自学笔记内容,仅供参考. 转发请保留原文链接:https://www.cnblogs.com/it-dennis/p/10508171.html .htm 和 .html 的区别 .htm 和 ...
随机推荐
- 可视化工作流程设计开发OA系统,一两个程序员就搞定!
随着信息化的发展,越来越多的公司老板要求实现企业审批流程化.一个公司在初期,人员少,流程简单,员工也会经常不按工作流程来走,甚至有些跨部门的工作因为关系原因,没有走工作流程就实施,导致后期出现问题或者 ...
- 万字硬核干货!6大技巧,极速提升kubectl的生产力!
明晚8:30,k3s实战课程开启!将由Rancher研发总监带你畅游k3s与边缘AI的奇妙世界.课程内容完全由实际使用场景中总结而来,别错过啦~!访问以下链接即可传送到课程现场: http://z-m ...
- CSS Sprite雪碧图的应用
CSS雪碧图,即CSS Sprite,也有人叫它CSS精灵图,是一种图像拼合技术.该方法是将多个小图标和背景图像合并到一张图片上,然后利用CSS的背景定位来显示需要显示的图片部分. 雪碧图的使用场景 ...
- Linux学习5-安装mysql
前言 今天我们来学习一下如何在Linux下安装mysql 一:准备安装包 可以从http://www.mysql.com/downloads/官方网站下载到最新版本,本次安装的版本是mysql-5.7 ...
- Spring Boot从入门到精通(七)集成Redis实现Session共享
单点登录(SSO)是指在多个应用系统中,登录用户只需要登录验证一次就可以访问所有相互信任的应用系统,Redis Session共享是实现单点登录的一种方式.本文是通过Spring Boot框架集成Re ...
- sentinel 规则持久化到nacos
问题描述 Sentinel Dashboard中添加的规则是存储在内存中的,只要项目一重启规则就丢失了 此处将规则持久化到nacos中,在nacos中添加规则,然后同步到dashboard中: 后面研 ...
- weex 和 appcan 的个人理解
appcan是浏览器技术,前端代码运行在webview上,而weex是原生引擎渲染,说白了就是把H5翻译成原生. weex的官网上说,在开发weex页面就像开发普通网页一样,在渲染weex页面时和原生 ...
- 音频相关 ALSA ffmpeg ffplay 命令用法 g7xx
采样率: samples 441100 每秒 DAC/ADC 采样的频率,声卡一般还支持 48k 8k 等模式. 通道:channels 2声道 左右声道 也有单声道的声音,5.1 声道 位数: 16 ...
- openwrt MT7620A MT7610E 5G 驱动添加移值
使用 github 上别人提供好的源码.整合到最新的 openwrt 18 中,目前 kernel 的版本为 4.1 . 编辑中....
- 关于adsl vps 拨号ip服务器
我这几天写了一遍在xp上的文章,但是因为xp上貌似只能使用squid2.6版本的,tinyproxy也不能用,而且怎么弄不出去vps端的端口出来 https://www.cnblogs.com/zen ...