UI是User Interface的缩写,也就是用户界面。像登录界面的按钮,游戏的得分,暂停的按钮等都是UI

之前我门创建一个Cherries变量来计算我们收集樱桃的数量,现在我们创建一个UI来显示我们收集樱桃的数量

我们在Hierarchy界面右键->UI,这些都是UI,比如按钮,滚动条,文字等等

我们需要创建一个Canvas(画布),Canvas相当承载UI元素的容器,我们的UI都在Canvas里面

EventSystem是创建Canvas自动生成的,就是一个情景触发的系统,先不用管他

我们在Canvas下面创建一个一个Text文本组件用来显示文字,右键->UI->Legacy->Text,Legacy里面是老的UI组件,现在已经有新的,功能更强大的组件代替他们,所以他们就移到了Legacy里面,不过也可以使用。

比如Text-TextMeshPro也是文本组件,不过比Text功能更加齐全。不过我们这里用老的Text而不用Text-TextMeshPro,因为新的Text-TextMeshPro不支持中文输入,老的Text支持中文输入而且操作也更简单一点

如果想要让Text-TextMeshPro支持中文输入可以参考这篇文章:unity最新版本的Text(TMP)UI文本怎么显示中文_真的没事鸭的博客-CSDN博客_unity的text不显示中文

创建好之后,我们双击Canvas,我们发现Canvas好像脱离了游戏画面,是一个单独呈现的屏幕。没错,UI的元素都会在单独的Canvas界面上编辑,方便我们区分游戏的画面

我们调整一下Text的位置,我们在Hierarchy栏点击Text,在右边属性栏有个锚点预设

我们点击这个方框,按住alt键选择右上角的方框,这样Text组件就自动跑到右上角的位置,并且设置完锚点之后,无论屏幕怎么变,Text始终在屏幕的右上角的位置,注意我们下面的图片是没有按住alt键时的情景,我们按住alt选择白色框框的位置就行。

我们把Text中文字调整一下,调整成居中对齐,改变一下字体的大小还有颜色,同时把Text的内容改一下,改成”樱桃:0”

调整之后是这样的

接下来我们就要让这个UI跟随我们的角色收集的数量发生变化,我们打开playercontroller代码,目前现在只有playercontroller这一个C#代码文件

我们要让Text跟随角色发生变化,那么我们首先要获得Text组件,所以我们声明一下Text变量,但是发现Text报错了。

我们按住alt+回车,发现是因为缺少了对应的命名空间

所以我们加上UnityEngine.UI命名空间

这样Text就不会报错了

我们让cherries每次加一就设置一下Text的内容,这样Text就跟随cherries发生变化了

这样就做好了,但是运行之前记得把Text拖给player

这样每碰到一个樱桃,显示的樱桃数量就会加一

最后贴一下playercontroller的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class playercontroller : MonoBehaviour
{private Rigidbody2D rb;//获得Rigidbody2D组件private Collider2D coll;//获得Collider2D组件private Animator anim;//获得动画组件public float speed, jumpForce;//公开,设置速度和跳跃力public LayerMask ground;//获得地面图层public Transform groundCheck;//检测角色是否碰到地面private bool isJump, isGround;//判断是否按下空格键,判断是否在地面private int jumpCount;//用来设置角色是几段跳private int cherries;//计数变量public Text cherryText;//樱桃计数的UI组件//初始化void Start(){rb = GetComponent<Rigidbody2D>();coll = GetComponent<Collider2D>();anim = GetComponent<Animator>();}void Update(){//如果按下空格键并且在地面上if (Input.GetKeyDown(KeyCode.Space) && jumpCount > 0){isJump = true;}}private void FixedUpdate(){isGround = Physics2D.OverlapCircle(groundCheck.position, 0.1f, ground);Movement();Jump();SwitchAnim();}//基础移动void Movement(){float horizontal = Input.GetAxisRaw("Horizontal");rb.velocity = new Vector2(horizontal * speed, rb.velocity.y);//设置x轴的移动//设置角色的转向问题if (horizontal != 0){transform.localScale = new Vector3(horizontal, 1, 1);anim.SetBool("run", true);}elseanim.SetBool("run", false);}//跳跃void Jump(){//如果在地面设置二段跳if (isGround){jumpCount = 2;}//按下跳跃键且在地面上if (isJump && isGround){rb.velocity = new Vector2(rb.velocity.x, jumpForce);jumpCount--;isJump = false;}//按下跳跃键且不在地面上且jumpCount大于0else if (isJump && !isGround && jumpCount > 0){rb.velocity = new Vector2(rb.velocity.x, jumpForce);jumpCount--;isJump = false;}}//切换动画void SwitchAnim(){//如果在下落状态if (rb.velocity.y < 0 && !isGround){anim.SetBool("fall", true);anim.SetBool("jump", false);}//如果在跳跃状态if (!isGround && rb.velocity.y > 0){anim.SetBool("jump", true);}//如果在地面上else if (coll.IsTouchingLayers(ground)){anim.SetBool("fall", false);}}//判断是否碰到物品private void OnTriggerEnter2D(Collider2D collision){if(collision.tag=="Collection"){Destroy(collision.gameObject);cherries++;cherryText.text = "樱桃:" + cherries;}}
}

unity2D横版游戏教程5-UI相关推荐

  1. unity2D横版游戏教程-2 代码实现

    接下来就是写代码的时候 我们创建一个文件夹用来存我们的脚本,名字就叫Scripts,在里面右键->Create->C#Script,这样就创建好了一个脚本 直接将这个脚本拖给我们Hiera ...

  2. unity2D横版游戏教程终章-主菜单和暂停菜单

    最后一节我们做一下主菜单和暂停菜单 我们创建一个新的scene,命名为Menu,这个就是主菜单场景 我们双击Menu进去设置一下我们的UI 我们先添加一下Canvas,在Canvas下面创建连个Pan ...

  3. unity2D横版游戏教程-1 让人物动起来

    在看完了麦扣老师的小狐狸的视频后,为了巩固练习,我另外找一个素材包来练手,顺便写成一个教程让自己更加熟练,同时当自己遗忘时可以回头查阅.另外,这个教程我写的非常详细,萌新也可以学习.有什么不对的地方或 ...

  4. unity2D横版游戏教程8-音效

    简单介绍一下unity audio,auido包括三个东西,分别是Aduio Listener,Audio Source,Audio Clips.Audio Listener就相当于耳朵,是用来听声音 ...

  5. unity2D横版游戏教程9-对话框dialog

    这节我们实现对话框dialog的效果,也就是人物到达某个地方后会弹出来一个对话框,比如资源包里有一个奖杯的模型,我们可以做人物碰到奖杯时提示游戏胜利的效果 我们先在地图中添加奖杯 我们在Collect ...

  6. unity2D横版游戏教程-3 Cinemachine镜头移动

    Cinemachine是官方提供的摄像机工具组件,这个工具的用处还蛮大的,不过我们这里就简单说一下在2D游戏里面怎么实现镜头跟踪的效果,这里我们用Cinemachine代替使用Main Camera ...

  7. unity2D横版游戏教程10-场景控制

    我们让角色掉出地图时重置游戏 我们在Hierarchy那里创建一个一个空项目,命名为DeathLine,也就是死亡线,我们给它添加一个盒体碰撞器,调整一下碰撞器 我们要把这个碰撞器当做触发器使用,所以 ...

  8. unity2D横版游戏教程7-敌人AI死亡效果

    我们稍微完善一下敌人AI,我们给敌人添加一个死亡动画,命名为death 先创建一个Trigger变量来控制什么时候切换death,这个Trigger相当一个开关.死亡动画是任何状态都可以实现的,所以在 ...

  9. unity2D横版游戏教程4-物品收集以及物理材质

    我们先把背景扩大一点,ctrl+D复制一个背景图然后调一下位置,在把地图稍微拓展一下 然后再Hierarchy界面创建一个空组件命名为Collection,表示物品,创建一个空的子组件叫Cherrie ...

最新文章

  1. html多列显示,html – CSS3多列列表
  2. Selenium之多窗口句柄的切换
  3. APL开发日志--2012-11-26
  4. linux 日志监控工具,详解 Linux系统常用监控工具
  5. 复制当前光标所在单词句子
  6. python批量删缩进_Python工具PyCharm常用快捷键
  7. java彩色的世界_JAVA真彩色转256色的实现
  8. C# 扩展object类 将string强制转换成int
  9. easyui datagrid 中怎么选中所有页面的数据_学会这5个Excel中常用技巧,可以准时下班去摆摊了...
  10. Qt多线程编程的主要线程类
  11. linux内核那些事之ZONE
  12. callback用法 js vue_Vue前端开发——使用高德地图WebApi
  13. Type is unsupported, or the types of the items don‘t match field type in CollectionDef.
  14. html水平制表和垂直制表,将水平制表符转换为垂直制表符(仅限HTML和CSS,无js)
  15. am3352 软时钟老是漂移 rx-8025时钟 rx-8025SA时钟
  16. 国外15种手机游戏引擎和开发工具介绍
  17. html穿越火线游戏代码,CF代码大全.doc
  18. 转:苹果CEO库克:伟大的想法来自不断拒绝接受现状
  19. typescript中的类型type与接口interface
  20. Tomcat崩溃kernel: java invoked oom-killer: gfp_mask解决方案

热门文章

  1. 新型Magecart信用卡读取器能够在多个电子商务平台上窃取付款信息
  2. 传图识字有次数限制吗_传图识字常见付费问题解答
  3. 【Jenkins学习 】Jenkins安装 Build User Vars Plugin插件来获取jenkins用户相关信息
  4. html5播放视频花屏,关于解决电脑花屏修复5大步骤图
  5. 已解决:Rocketmq 执行start mqnamesrv.cmd找不到或无法加载主类
  6. iOS5.1降级到iOS5.0.1_iOS5.0.1平刷教程
  7. WPhone7 随笔 (一)
  8. windows 11系统安装
  9. 蒙奇奇深度学习第一课:Windows10安装pytorch和tensorflow(避坑必读,吐血整理)
  10. 吃鸡手游服务器响应超时闪退,绝地求生游戏崩溃解决办法(绝地求生一直崩溃闪退的原因有哪些)...