QFramework-类幸存者笔记 -4:经验值获取

目录

本节课完成的目标

经验值获取

持续生成敌人功能

敌人死亡不通关&每 5 个经验值升级


特别感谢:

本文是凉鞋的QFramework-类幸存者 教程的学习笔记

https://qframework.cn/qficon-default.png?t=N7T8https://qframework.cn/qf QF官网:有详细免费入门教程


本节课完成的目标

升级弹窗

经验值获取

新建一个Global脚本,全局变量都放在里面。

using QFramework;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace ProjectSurvivor
{
    public class Global
    {
        /// <summary>
        /// 经验值
        /// </summary>
        public static BindableProperty<int> Exp =new BindableProperty<int>();
        
    }
}

新建一个UIGamePanel场景 界面 prefab然后在Assets-Art-UIprefab-UIGamePanel右键@Resikit-AssetBundle Mark再点一下alt+c生成代码-运行

更新经验值界面

using UnityEngine;
using UnityEngine.UI;
using QFramework;

namespace ProjectSurvivor
{
	public class UIGamePanelData : UIPanelData
	{
	}
	public partial class UIGamePanel : UIPanel
	{
		protected override void OnInit(IUIData uiData = null)
		{
			mData = uiData as UIGamePanelData ?? new UIGamePanelData();
			// please add init code here

			Global.Exp.RegisterWithInitValue(exp =>
			{
				EXP.text = "经验值:" + exp;
			}).UnRegisterWhenGameObjectDestroyed(gameObject);
		
		}
		
		protected override void OnOpen(IUIData uiData = null)
		{
		}
		
		protected override void OnShow()
		{
		}
		
		protected override void OnHide()
		{
		}
		
		protected override void OnClose()
		{
		}
	}
}

在SamPleScene中新建GameUIController。游戏一开始就打开UIGamePanel界面。

using UnityEngine;
using QFramework;

namespace ProjectSurvivor
{
	public partial class GameUIController : ViewController
	{
		void Start()
		{
			UIKit.OpenPanel<UIGamePanel>();
		}

        private void OnDestroy()
        {
			UIKit.ClosePanel<UIGamePanel>();	
        }
    }
}

在Enemy脚本中更新敌人死亡经验值+1

using UnityEngine;
using QFramework;

namespace ProjectSurvivor
{
	public partial class Enemy : ViewController
	{
		public float HP = 3;

		public float MovementSpeed = 2.0f;
		

		private void Update()
		{

			if (Player.Default)
			{
                var direction = (Player.Default.transform.position - transform.position).normalized;

                transform.Translate(direction * Time.deltaTime * MovementSpeed);
            }

			if (HP<=0)
			{
				UIKit.OpenPanel<UIGamePassPanel>();
				this.DestroyGameObjGracefully();
				Global.Exp.Value ++;
			}
        }
			
	}
}

持续生成敌人功能

场景上新建一个空物体EnemyGenerator,把enemy拖进去作为子物体。同时alt+v生成脚本

 enemy上alt+B生成bind脚本。

EnemyGenerator脚本代码,随机生成enemy。

using UnityEngine;
using QFramework;

namespace ProjectSurvivor
{
	public partial class EnemyGenerator : ViewController
	{
		private float mCurrentSeconds = 0;

        private void Update()
        {
            mCurrentSeconds += Time.deltaTime;

            if (mCurrentSeconds>=1)
            {
                mCurrentSeconds = 0;

                var player = Player.Default;
                var randomAngle = Random.Range(0, 360);
                var randomRadius = randomAngle * Mathf.Deg2Rad;
                var direction = new Vector3(Mathf.Cos(randomRadius), Mathf.Sin(randomRadius));
                var generatePos = player.transform.position + direction * 10;

                Enemy.Instantiate() 
                    .Position(generatePos)
                    .Show();
                    
            }
        }
    }
}

敌人死亡不通关&每 5 个经验值升级

enemy脚本中,把敌人死亡就打开通关界面删掉,通关条件后面添加

添加经验值功能,在Global脚本中添加Level变量

using QFramework;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace ProjectSurvivor
{
    public class Global
    {
        /// <summary>
        /// 经验值
        /// </summary>
        public static BindableProperty<int> Exp =new BindableProperty<int>();
        public static BindableProperty<int> Level =new BindableProperty<int>(1);
    }
}

同时在UIGamePanel界面添加Level文本,快捷键alt+c,生成代码。

UIGamePanel 脚本代码中添加等级更新代码

using UnityEngine;
using UnityEngine.UI;
using QFramework;

namespace ProjectSurvivor
{
	public class UIGamePanelData : UIPanelData
	{
	}
	public partial class UIGamePanel : UIPanel
	{
		protected override void OnInit(IUIData uiData = null)
		{
			mData = uiData as UIGamePanelData ?? new UIGamePanelData();
			// please add init code here

			Global.Exp.RegisterWithInitValue(exp =>
			{
				EXPText.text = "经验值:" + exp;
			}).UnRegisterWhenGameObjectDestroyed(gameObject);

			Global.Level.RegisterWithInitValue(lv =>
			{
				LevelText.text="等级:"+lv;
            }).UnRegisterWhenGameObjectDestroyed(gameObject);

			Global.Exp.RegisterWithInitValue(exp =>
			{
				if (exp>=5)
				{
					Global.Exp.Value -= 5;
					Global.Level.Value++;
				}
			}).UnRegisterWhenGameObjectDestroyed(gameObject);
		}
		
		protected override void OnOpen(IUIData uiData = null)
		{
		}
		
		protected override void OnShow()
		{
		}
		
		protected override void OnHide()
		{
		}
		
		protected override void OnClose()
		{
		}
	}
}

这里有一个BUG,猪脚死亡时,敌人一直在生成。在enemy脚本中添加一个限制,猪脚存在时再生成。UIPanel界面添加一个升级时弹出的选项按钮

UIGamePanel脚本更新

新增当Level发生变化时,弹出选项按钮代码

using UnityEngine;
using UnityEngine.UI;
using QFramework;

namespace ProjectSurvivor
{
	public class UIGamePanelData : UIPanelData
	{
	}
	public partial class UIGamePanel : UIPanel
	{
		protected override void OnInit(IUIData uiData = null)
		{
			mData = uiData as UIGamePanelData ?? new UIGamePanelData();
			// please add init code here

			Global.Exp.RegisterWithInitValue(exp =>
			{
				EXPText.text = "经验值:" + exp;
			}).UnRegisterWhenGameObjectDestroyed(gameObject);

			Global.Level.RegisterWithInitValue(lv =>
			{
				LevelText.text="等级:"+lv;
            }).UnRegisterWhenGameObjectDestroyed(gameObject);

			Global.Level.Register(lv=>{
				Time.timeScale = 0;
				BtnUpgrade.Show();

			}).UnRegisterWhenGameObjectDestroyed(gameObject);

			Global.Exp.RegisterWithInitValue(exp =>
			{
				if (exp>=5)
				{
					Global.Exp.Value -= 5;
					Global.Level.Value++;
				}
			}).UnRegisterWhenGameObjectDestroyed(gameObject);
			BtnUpgrade.Hide();

			BtnUpgrade.onClick.AddListener(() =>
			{
				Time.timeScale=1;
                BtnUpgrade.Hide();

            });
		}
		
		protected override void OnOpen(IUIData uiData = null)
		{
		}
		
		protected override void OnShow()
		{
		}
		
		protected override void OnHide()
		{
		}
		
		protected override void OnClose()
		{
		}
	}
}

以上结束

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值