Unity开发日记【第五天】——UI的制作

目录

一、UI的制作

二、代码整理


一、UI的制作

接下来我将制作游戏最重要的部分——UI,这只是很初步的制作

首先UI不能因为我们镜头的移动而留在原地,所以有个最基础的东西就是画布,就是承载UI的一个平台,在层次窗口右键找到UI找到画布(Canvas)创建。它会自动添加EventSystem。

 假设我们现在想要显示我们之前设计的收集品玩家当前收集的个数,我们点击Canvas右键在UI中找到Text新建。(现在的新版把它移到了旧版(Lggacy)这个选项下面)

【注意:我们这里需要新建两个Text一个需要修改一个不需要】

然后我们双击画布,找到我们加入的text可以对它进行一系列修改

然后我们来到游戏画面就看见它正常显示了

 接下来我们就需要实现这个数字可以随着我们吃到收集品而变化,我们点击角色控制的代码

首先为了可以控制UI的元素,我们需要使用UI的命名空间

using UnityEngine.UI;

然后创建一个用于操控UI的对象

public Text Cherrynumber;

然后同理按照之前的想法把我们需要修改的text拖进来,然后在物品收集函数中加上这样一句代码即可实现功能,这里使用ToString函数把CherryCount的int类型转化为可以显示的string类型

Cherrynumber.text = CherryCount.ToString();

宝石的数目同样处理,但这时我在测试的时候发现了一个bug就是但我把游戏屏幕全屏时UI的位置会乱窜,经过查找资料修改UI此处的锁定位置,锁定在左上角

然后我尝试把文本形式的UI换成了图像然后分别插入了樱桃和钻石的图像最后的成果

二、代码整理

经过这几天的努力,我们的游戏已经有了基本的框架,已经可以做出一个基本的2D平台游戏,现在把代码做一些整理

PlayerController.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public Rigidbody2D rb; //刚体
    public Collider2D footColl; //脚部碰撞体
    public Collider2D bodyColl; //身体碰撞体
    public Animator anim; //动画控制器
    public float speed = 10; //速度
    public float jumpforce; //跳跃力
    public LayerMask ground; //碰撞体过滤
    public int CherryCount = 0; //收集品樱桃计数器
    public int GemCount = 0; //收集品宝石计数器
    public Text Cherrynumber; //控制樱桃数目显示的UI
    public Text Gemnumber; //控制樱桃数目显示的UI

    void Start()
    {

    }

    void Update()
    {
        if (Input.GetButtonDown("Jump") && footColl.IsTouchingLayers(ground)) //实现角色跳跃
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpforce);
            anim.SetBool("jumping", true);
        }

        if (!Physics2D.OverlapCircle(rb.position, 0.1f, ground))
        {
            if (Input.GetButton("Crouch")) //实现角色下蹲
            {
                anim.SetBool("crouching", true);
                bodyColl.enabled = false;
                speed = 5;
            }
            else //恢复姿态
            {
                anim.SetBool("crouching", false);
                bodyColl.enabled = true;
                speed = 10;
            }
        }
    }

    private void FixedUpdate()
    {
        SwitchAnim();
        Move();
    }

    void Move() //控制玩家移动函数
    {
        float Horizontaldirection = Input.GetAxisRaw("Horizontal"); //玩家移动方向
        rb.velocity = new Vector2(Horizontaldirection * speed, rb.velocity.y);
        anim.SetFloat("running", Mathf.Abs(rb.velocity.x));
        if (Horizontaldirection != 0)
        {
            transform.localScale = new Vector3(Horizontaldirection, 1, 1); //控制角色翻转
        }
    }

    void SwitchAnim() //玩家动画切换函数
    {
        anim.SetBool("idleing", false);
        if (anim.GetBool("jumping"))
        {
            if(rb.velocity.y < 0)
            {
                anim.SetBool("jumping", false);
                anim.SetBool("falling", true);
            }
        }
        else if(footColl.IsTouchingLayers(ground))
        {
            anim.SetBool("falling", false);
            anim.SetBool("idleing", true);
        }
    }

    private void OnTriggerEnter2D(Collider2D collision) //物品收集函数
    {
        if(bodyColl.IsTouching(collision) && collision.tag == "cherry") //如果身体碰到了樱桃
        {
            Destroy(collision.gameObject); //销毁游戏体
            CherryCount++; //收集品数量加一
            Cherrynumber.text = CherryCount.ToString();
        }
        if (bodyColl.IsTouching(collision) && collision.tag == "gem") //如果身体碰到了宝石
        {
            Destroy(collision.gameObject); //销毁游戏体
            GemCount++; //收集品数量加一
            Gemnumber.text = GemCount.ToString();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_50688324/article/details/126997924