赞
踩
目录
接下来我将制作游戏最重要的部分——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();
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。