学习内容来自 B站up : M_Studio
文中使用图片素材来自unity素材库 2D- Sunnyland

简单角色移动完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerControl : MonoBehaviour
{public Rigidbody2D rb;public Animator Anim;public Collider2D coll;public float speed;public float jumphigh;public LayerMask Ground;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid FixedUpdate(){Playermove();SwitchAnim();}void Playermove() {float Horizontalmove;float Facedirection;Horizontalmove = Input.GetAxis("Horizontal"); Facedirection = Input.GetAxisRaw("Horizontal");// 移动if (Facedirection != 0){transform.localScale = new Vector3(Facedirection, 1, 1);}if (Horizontalmove != 0){Anim.SetBool("running", true);rb.velocity = new Vector2(Horizontalmove * speed * Time.fixedDeltaTime, rb.velocity.y);}else if (Horizontalmove == 0){Anim.SetBool("running", false);}// 跳跃if (Input.GetButton("Jump")){rb.velocity = new Vector2(rb.velocity.x, jumphigh * Time.fixedDeltaTime);Anim.SetBool("jumping", true);}}void SwitchAnim(){if (rb.velocity.y < -0.1){Anim.SetBool("falling", true);Anim.SetBool("jumping", false);} else if (coll.IsTouchingLayers(Ground)){Anim.SetBool("falling", false);}/*if (!Anim.GetBool("jumping") && rb.velocity.y == 0){Anim.SetBool("falling", false);Anim.SetBool("idle", true);}*/}
}

左右移动

float Horizontalmove;
float Facedirection; // 利用scale配合horizontal达成角色朝向的调整
Horizontalmove = Input.GetAxis("Horizontal");
Facedirection = Input.GetAxisRaw("Horizontal");if (Facedirection != 0){transform.localScale = new Vector3(Facedirection, 1, 1);}if (Horizontalmove != 0){Anim.SetBool("running", true);rb.velocity = new Vector2(Horizontalmove * speed * Time.fixedDeltaTime, rb.velocity.y);}else if (Horizontalmove == 0){Anim.SetBool("running", false);}
float Facedirection;
Facedirection = Input.GetAxisRaw("Horizontal");……transform.localScale = new Vector3(Facedirection, 1, 1);

利用scale配合horizontal达成角色朝向的调整。

此处getaxisraw得到的是-1,0,1,而用getaxis得到的是变动的浮点数。

    public Rigidbody2D rb;public float speed;
………void FixedUpdate(){Playermove();SwitchAnim();}
…………
if (Horizontalmove != 0){Anim.SetBool("running", true);rb.velocity = new Vector2(Horizontalmove * speed * Time.fixedDeltaTime, rb.velocity.y);}else if (Horizontalmove == 0){Anim.SetBool("running", false);}

fixedupdate以时间为单位更新,默认为0.02,每秒50次,update则是以帧数更新,使用fixedupdate保证游戏运行在 帧数不同的情况下角色移动速度都一样。

*Time.fixedDeltaTime配合fixedupdate使用,数值固定,默认=0.02。

speed为速度参数,在unity-script中更改。

rb.velocity更改刚体的速度参数,new Vector2 对2D更改。 .y .x 为x,y轴速度。

Anim.SetBool(“running”, false) 更改移动判定以改变动画。

跳跃

    public Animator Anim;public Collider2D coll;public LayerMask Ground;
…………
if (Input.GetButton("Jump")){rb.velocity = new Vector2(rb.velocity.x, jumphigh * Time.fixedDeltaTime);Anim.SetBool("jumping", true);}
…………void SwitchAnim(){if (rb.velocity.y < -0.1){Anim.SetBool("falling", true);Anim.SetBool("jumping", false);} else if (coll.IsTouchingLayers(Ground)){Anim.SetBool("falling", false);}/*if (!Anim.GetBool("jumping") && rb.velocity.y == 0){Anim.SetBool("falling", false);Anim.SetBool("idle", true);}*/}

在unity中用三个参数“jumping、falling、runing”来判定4种动画的衔接(闲站,跑动,跳起,下落);

因为左移用的是右移动画的翻转,在实际游戏中,左移时y值会有变动(略<0),所以判定句用 y < -0.1 。
先对y轴速度<0判断,便于在非跳跃下落(例如跑出平台掉落)时的动画转换。

    public Collider2D coll;public LayerMask Ground;
…………if (coll.IsTouchingLayers(Ground))

用于判断落地以及碰撞墙体,由于上述原因,不使用y == 0 判断是否落地。(注释代码为发现问题前写的y = 0落地判定)

Unity2D入门1 简单角色移动与动画 基础相关推荐

  1. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之②搭建游戏场景+制作动画

    布置场景: 我们首先要创建一个新场景就叫level1, 我们在project面板中找到这张图 我们在新建的Canvas上创建一张background把这张拖进去点击Set Native Size 然后 ...

  2. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之①搭建场景

    布置场景: 众所周知,植物大战僵尸非常好玩,所以我们来制作一款类似的,名字就叫Glitch Garden. 布置场景需要用到很多素材,这里我们在GitHub中找到一位老师的素材并把需要的导入到proj ...

  3. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之⑤制作更多的敌人Attacker以及防御者Defender

    制作更多的Defender: 之前我们创建了一个向日葵和一个仙人掌,今天我们多创建两个 首先是一个老头Gnome,我们让它的功能和仙人掌一样,所以我会尽量快点讲完, 需要给它三个脚本Defender, ...

  4. 【Unity】入门学习笔记180605——游戏动画设计(4)——游戏角色动画基础

    1.针对Unity中实现正确动画效果的角色,首先需要在3D建模软件中实现骨骼化操作. 骨骼化是指底层骨骼结构添加至设计师创建的模型中,且各快骨骼与网格顶点间实现了加权操作 可使用MakeHuman软件 ...

  5. 9.Unity2D 横版 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡

    总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.动画animation和动画 ...

  6. 11.Unity2D 横版 简单AI 之背后受击转身+寻路跟随敌人+模块化+射线检测

    总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.敌人背后受击转身+背部攻击伤 ...

  7. 10.Unity2D 横版 简单AI 之 敌人随机移动+自动巡逻+障碍物跳跃+悬崖处转身+射线检测

    总目录 9.Unity2D 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡_ζั͡ ั͡雾 ั͡狼 ั͡✾的博客-CSDN博客Unity2D 简单AI 之 ...

  8. Unity2D 入门教程

    Unity2D 入门教程 常用操作 通用操作 游戏状态进行保存 使用 TileMap 绘制地图 实现碰撞体效果 移动 Bug 的修复 实现人物控制 动画系统 镜头控制 脚本控制 Cinemachine ...

  9. Godot3游戏引擎入门之四:给主角添加动画(上)

    一.前言 说明:我目前使用的 Godot 3.1 预览版,所以会与 Godot 3 的版本有一些区别,界面影响不大,如果要使用我上传的 Github Demo 代码,记得去官网下载 3.1 预览版(或 ...

最新文章

  1. VBS编程基础教程 (第2篇)
  2. WinDbg调试.NET程序入门
  3. 基于nuxt和iview搭建OM后台管理系统实践(2)-quill富文本组件的封装
  4. Q:一个经典的helloworld程序需要几个文件?
  5. 【Python数据挖掘课程】三.Kmeans聚类代码实现、作业及优化
  6. [vue] vue和angular有什么区别呢?
  7. 10个实用的机器学习建议
  8. 苏嵌第一天,shell中一些基础知识
  9. 7 种让 if / else 变得更加优雅的方式,你 pick 了吗?
  10. 设计模式 迪米特法则
  11. cocos2d-x 3.2 项目开发 ValueMap 的遍历
  12. 英伟达为全自动驾驶汽车打造AI计算机,计算力达上代10倍
  13. Oracle AWR报告提取方法
  14. 人员梯度培养_人员管理 | 生产班组员工队伍管理及制度建立
  15. 怎样用自己电脑搭建网络服务器!不花一分钱
  16. uwsgi graceful reload
  17. Photo Album: 2008年5月-三亚爱琴海岸康年度假村-day1
  18. android HID添加(三) ---applist key
  19. torch.contiguous()函数用法
  20. java1000到十10以内的加减法,【小学】 生成10以内的加减法

热门文章

  1. 星星之火-19:在基站没有给手机终端分配资源前,手机是如何先基站申请资源?随机接入过程!
  2. 官宣!苏州吴江开发区上线电子劳动合同平台
  3. html制作婚礼策划机构首页,基于HTML5的婚礼策划项目的软件设计.doc
  4. webSocket抓包分析
  5. 商品分类管理模块基本完成
  6. Chapter_10
  7. ESP8266 TCP客户端代码(自动连接,断开识别)
  8. 物联网竞赛套装配置简介
  9. 计算机动画作业:图像morphing
  10. centos7安装redis