unity2D横版游戏教程5-UI

Posted 真的没事鸭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity2D横版游戏教程5-UI相关的知识,希望对你有一定的参考价值。

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);
        
        else
            anim.SetBool("run", false);
    

    //跳跃
    void Jump()
    
        //如果在地面设置二段跳
        if (isGround)
        
            jumpCount = 2;
        
        //按下跳跃键且在地面上
        if (isJump && isGround)
        
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
            jumpCount--;
            isJump = false;
        
        //按下跳跃键且不在地面上且jumpCount大于0
        else 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的主要内容,如果未能解决你的问题,请参考以下文章

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

Unity2D横版游戏地形生成

unity2d游戏开发系列教程:四一个2D游戏所需要的主要功能(游戏框架)

如何实现横版游戏中角色的跳跃控制

Unity2D游戏角色动画教程-使用Photoshop创建2D游戏角色素材

unity2d游戏入门开发【三】各个面板作用