角色移动优化【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 和 ...
随机推荐
- Windows Server 2012搭建SQL Server Always On踩坑全记录
Windows Server 2012搭建SQL Server Always On踩坑全记录 环境信息: Windows Server 2012 R2 Sql Server 2012 整个搭建集群的过 ...
- 车道线检测LaneNet
LaneNet LanNet Segmentation branch 完成语义分割,即判断出像素属于车道or背景 Embedding branch 完成像素的向量表示,用于后续聚类,以完成实例分割 H ...
- Fetch API与POST请求那些事
简述 相信不少前端开发童鞋与后端联调接口时,都会碰到前端明明已经传了参数,后端童鞋却说没有收到,尤其是post请求,遇到的非常多.本文以node.js作为服务端语言,借用express框架,简要分析客 ...
- 前端每日实战:42# 视频演示如何用纯 CSS 创作一个均衡器 loader 动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oybWBy 可交互视频教程 此视频 ...
- JZOJ 1349. 最大公约数 (Standard IO)
1349. 最大公约数 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 小菜的妹妹小诗就要读小学了!正所谓 ...
- 分享一个基于Net Core 3.1开发的模块化的项目
先简单介绍下项目(由于重新基于模块化设计了整个项目,所以目前整个项目功能不多) 1.Asp.Net Core 3.1.2+MSSQL2019(LINUX版) 2.中间件涉及Redis.RabbitMQ ...
- Node.Js的热更新服务——supervisor
因为目前项目每次修改文件要看效果,必须重启服务:node app.js再进入浏览器看效果,很是麻烦.所幸的是有很多第三方的管理工具(supervisor,hotnode,forever,pm2等),当 ...
- HDFS NameNode详解
1. namenode介绍 namenode管理文件系统的命名空间.它维护着文件系统树及整棵树内所有的文件和目录.这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件fsimage和编辑日志文 ...
- libra共识算法分析
核心算法说明 基于chained实现,整体上是当前轮推动下一轮共识继续下去, 如此来持续运转下去, 数据有效性证明基于(QC)实现 leader广播proposal消息{round, qc, p ...
- 【07】openlayers 矢量图层
创建地图: //创建地图 var map = new ol.Map({ //设置显示地图的视图 view: new ol.View({ center: [0, 0],//义地图显示中心于经度0度,纬度 ...