角色移动优化【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 和 ...
随机推荐
- Samtec 5G探索之路
序言:时代在发展,2020年5G作为元年.5G全程第五代移动通信技术(英语:5th generation mobile networks或5th generation wireless systems ...
- AE脚本:把SubRip/SRT/TXT/VTT字幕导入到AE
脚本介绍 如果您需要在视频中嵌入字幕以进行网络或磁带传送,那么这个脚本则非常有用.可以将SubRip/SRT/TXT/VTT字幕格式文件通过 pt_ImportSubtitles脚本直接加载到AE软件 ...
- volatile和synchronized到底啥区别?多图文讲解告诉你
你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough ...
- 修改gridfilters.js源码,往后台多传递一个参数,并设置NumericFilter、StringFilter默认提示信息
创作不易,转载请注明出处!!! 效果 修改:ext-extend.js源码 在最后面添加3行,重写方法 代码拷贝区 Ext.override(Ext.ux.grid.GridFilters, { me ...
- 关于Java序列化的问题你真的会吗?
引言 在持久化数据对象的时候我们很少使用Java序列化,而是使用数据库等方式来实现.但是在我看来,Java 序列化是一个很重要的内容,序列化不仅可以保存对象到磁盘进行持久化,还可以通过网络传输.在平时 ...
- JS模块规范:AMD,CMD,CommonJS
浅析JS模块规范 随着JS模块化编程的发展,处理模块之间的依赖关系成为了维护的关键. AMD,CMD,CommonJS是目前最常用的三种模块化书写规范. CommonJS CommonJS规范是诞生比 ...
- IoT设备实践丨如果你也在树莓派上部署了k3s,你也许需要这篇文章
前 言 树莓派是一种广泛流行的开发板,随着物联网的深入发展,树莓派大有成为IoT终端设备标准之趋势.在支持客户在IoT场景中落地k3s时,k3s在树莓派上的部署问题也就出现了.本文记录了一些其中的关键 ...
- 内网渗透之权限维持 - MSF
年初九 天公生 0x034 MSF(美少妇) 启动msf msfconsole 先启动msf依赖的postgresql数据库 初始化数据库 msfdb init (要用普通用户) msf路径 /usr ...
- JS中的call()方法和apply()方法用法总结(挺好 转载下)
最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...
- WPF 启动缓慢问题
Actually there's 2 main reasons that the default project type for WPF applications is x86. Intellitr ...