当前位置:   article > 正文

Unity开发日记【第五天】——UI的制作_unity ui界面制作

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

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine.UI;
  4. using UnityEngine;
  5. public class PlayerController : MonoBehaviour
  6. {
  7. public Rigidbody2D rb; //刚体
  8. public Collider2D footColl; //脚部碰撞体
  9. public Collider2D bodyColl; //身体碰撞体
  10. public Animator anim; //动画控制器
  11. public float speed = 10; //速度
  12. public float jumpforce; //跳跃力
  13. public LayerMask ground; //碰撞体过滤
  14. public int CherryCount = 0; //收集品樱桃计数器
  15. public int GemCount = 0; //收集品宝石计数器
  16. public Text Cherrynumber; //控制樱桃数目显示的UI
  17. public Text Gemnumber; //控制樱桃数目显示的UI
  18. void Start()
  19. {
  20. }
  21. void Update()
  22. {
  23. if (Input.GetButtonDown("Jump") && footColl.IsTouchingLayers(ground)) //实现角色跳跃
  24. {
  25. rb.velocity = new Vector2(rb.velocity.x, jumpforce);
  26. anim.SetBool("jumping", true);
  27. }
  28. if (!Physics2D.OverlapCircle(rb.position, 0.1f, ground))
  29. {
  30. if (Input.GetButton("Crouch")) //实现角色下蹲
  31. {
  32. anim.SetBool("crouching", true);
  33. bodyColl.enabled = false;
  34. speed = 5;
  35. }
  36. else //恢复姿态
  37. {
  38. anim.SetBool("crouching", false);
  39. bodyColl.enabled = true;
  40. speed = 10;
  41. }
  42. }
  43. }
  44. private void FixedUpdate()
  45. {
  46. SwitchAnim();
  47. Move();
  48. }
  49. void Move() //控制玩家移动函数
  50. {
  51. float Horizontaldirection = Input.GetAxisRaw("Horizontal"); //玩家移动方向
  52. rb.velocity = new Vector2(Horizontaldirection * speed, rb.velocity.y);
  53. anim.SetFloat("running", Mathf.Abs(rb.velocity.x));
  54. if (Horizontaldirection != 0)
  55. {
  56. transform.localScale = new Vector3(Horizontaldirection, 1, 1); //控制角色翻转
  57. }
  58. }
  59. void SwitchAnim() //玩家动画切换函数
  60. {
  61. anim.SetBool("idleing", false);
  62. if (anim.GetBool("jumping"))
  63. {
  64. if(rb.velocity.y < 0)
  65. {
  66. anim.SetBool("jumping", false);
  67. anim.SetBool("falling", true);
  68. }
  69. }
  70. else if(footColl.IsTouchingLayers(ground))
  71. {
  72. anim.SetBool("falling", false);
  73. anim.SetBool("idleing", true);
  74. }
  75. }
  76. private void OnTriggerEnter2D(Collider2D collision) //物品收集函数
  77. {
  78. if(bodyColl.IsTouching(collision) && collision.tag == "cherry") //如果身体碰到了樱桃
  79. {
  80. Destroy(collision.gameObject); //销毁游戏体
  81. CherryCount++; //收集品数量加一
  82. Cherrynumber.text = CherryCount.ToString();
  83. }
  84. if (bodyColl.IsTouching(collision) && collision.tag == "gem") //如果身体碰到了宝石
  85. {
  86. Destroy(collision.gameObject); //销毁游戏体
  87. GemCount++; //收集品数量加一
  88. Gemnumber.text = GemCount.ToString();
  89. }
  90. }
  91. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/140756
推荐阅读
相关标签
  

闽ICP备14008679号