团队项目_动作游戏demo(2)

UI      

所有UI来自于组员-xu

开始界面



玩过游戏大家都知道,开始游戏,是从头开始一个新游戏,而载入游戏是从上一次游戏的进度开始,我使用的是只有一个存档的机制。

实现代码

 public void OnStartBtnClick()
    {
       
        //生成地形
        Instantiate(Resources.Load("Scene01", typeof(GameObject)));
        SceneManager.LoadScene(1); 
        //连接数据库
        PlayerAtt.Instance.ConnectSQL();
        //人物初始数据
        PlayerAtt.Instance.Levle = 0;
        PlayerAtt.Instance.LevelUP();

    }

    public void OnQuitGame()
    {
        Application.Quit();
    }
    public void LoadGame()
    {
        
         Instantiate(Resources.Load("Scene01", typeof(GameObject)));
        //获取场景1
        SceneManager.LoadScene(1);
        //连接数据库
        PlayerAtt.Instance.ConnectSQL();        
        //获取人物各项属性
        PlayerAtt.Instance.GetPlayerAtt(); 
       
    }
BY WANG

主界面所有的UI



人物头像血条耐力条ui :通过人物的属性脚本获取,从而动态改变人物血量,耐力条可以慢慢恢复,这个时候,我们就可以用一个时间变量来控制恢复的速度,血量上限和耐力上限一定要通过另一个变量记住,并且这些值要存放在数据库中,从而每次加载游戏时,都可以获取。

HP代码

  Image im;
    float time;
	void Start () 
 	{   
        im = GetComponent<Image>();
	
	}//end_Start
	
	void Update () 
	{
        time += Time.deltaTime;
        im.fillAmount = PlayerAtt.Instance.HP / PlayerAtt.Instance.HPLine;
        if (time > 5&& PlayerAtt.Instance.HP>0)
        {
            time = 0;
            if ((PlayerAtt.Instance.HP + PlayerAtt.Instance.HPrecoverSpeed < PlayerAtt.Instance.HPLine) && PlayerAtt.Instance.HP != 0)
                PlayerAtt.Instance.HP += PlayerAtt.Instance.HPrecoverSpeed;
            else if (PlayerAtt.Instance.HP == 0)
                PlayerAtt.Instance.HP = 0;
            else
                PlayerAtt.Instance.HP = PlayerAtt.Instance.HPLine;

        }
	
	}//end_Update
BY WANG






boss血条UI:一开始隐藏,当离boss一定距离时显示,远离boss之后,boss回血,太远距离之后,血条消失,血量数据也是存放在数据库中。

中间转盘UI:我们每过一个关卡以后都会有一个翻卡或者其他什么给玩家玩的小游戏,我这使用的是转盘,当玩家点击开始之后,转盘转动,指针指向那一块,给玩家相应的奖励。

效果图



代码实现

Transform turntable;
    public float initSpeed;
    public float deltaSpeed = 3f;
    bool isTruning = false;
    bool isSlow = false;
    float angle;
    public Text text;
    void Start() {

       GameObject.FindWithTag("lunpan").SetActive(false);

    }


    void Update()
    {
        
        if (isTruning)
        {
            transform.Rotate(Vector3.back * initSpeed * Time.deltaTime);
        }
        if (isSlow)
        {
            initSpeed -= deltaSpeed;
            if (initSpeed <= 0)
            {
                isTruning = false;
                isSlow = false;
                angle = transform.eulerAngles.z;
                TurnTableAttributeUp(); 
            }
        }
    }



    public void OnStartClick()
    {
        initSpeed = Random.Range(500, 800);
        isTruning = true;
    }

    public void OnStopCilck()
    {
        isSlow = true;
    }

    void TurnTableAttributeUp()
    {
        if (angle > 0 && angle <= 60)
        {
            PlayerAtt.Instance.HP += 5;            //生命值+5
            text.text="生命值+5=" + PlayerAtt.Instance.HP;
        }
        else if (angle > 60 && angle <= 90)
        {
            PlayerAtt.Instance.ATK += 2;            //攻击力+2
          text.text="攻击力+2=" + PlayerAtt.Instance.ATK;
        }
        else if (angle > 90 && angle <= 150)
        {
            PlayerAtt.Instance.CRI += 0.001f;         //暴击率+0.001
           text.text="暴击率+0.001=" + PlayerAtt.Instance.CRI;
        }
        else if (angle > 150 && angle <= 180)
        {
            PlayerAtt.Instance.hitrate += 0.004f;    //命中率+0.004
            text.text="命中率+0.004=" + PlayerAtt.Instance.hitrate;
        }
        else if (angle > 180 && angle <= 240)
        {
            PlayerAtt.Instance.ATK += 1;            //攻击力+1
            text.text="攻击力+1=" + PlayerAtt.Instance.ATK;
        }
        else if (angle > 240 && angle <= 270)
        {
            PlayerAtt.Instance.HP += 10;            //生命值+10    
            text.text="生命值+10=" + PlayerAtt.Instance.HP;
        }
        else if (angle > 270 && angle <= 330)
        {
            PlayerAtt.Instance.hitrate += 0.002f;    //命中率+0.002   
            text.text="命中率+0.002=" + PlayerAtt.Instance.hitrate;
        }
        else
        {
            PlayerAtt.Instance.CRI += 0.002f;         //暴击率+0.002  
           text.text="暴击率+0.002=" + PlayerAtt.Instance.CRI;
        }

        StartCoroutine(Active());

    }

    IEnumerator Active()
    {
        yield return new WaitForSeconds(2);
        GameObject.FindWithTag("lunpan").SetActive(false);
        text.text = null;
    
    }
BY XU

人物属性面板:从玩家属性中读取出当前玩家的属性,当玩家点读取数据时,玩家属性会自动从数据库中读取出人物的属性,不会出现人物属性出现偏差的情况。当人物升级的时候,玩家会有一个自由属性点,来给人物添加属性,我用的是用一个标志,当玩家当前等级,与数据中的等级不一致时,玩家会有一个属性点,然后加完之后,使两个等级一致。

升级代码实现,选取了三个属性添加脚本

 public void OnAddHPClick()
    {
        if (PlayerAtt.Instance.levelUp != PlayerAtt.Instance.Levle)
        {
            PlayerAtt.Instance.HPLine += 20;
            PlayerAtt.Instance.levelUp++;
            PlayerAtt.Instance.UPDate_PlayerAtt();
        }
    }
    public void OnAddATKClick()
    {
        if (PlayerAtt.Instance.levelUp != PlayerAtt.Instance.Levle)
        {
            PlayerAtt.Instance.ATK += 2;
            PlayerAtt.Instance.levelUp++;
            PlayerAtt.Instance.UPDate_PlayerAtt();
        }
    }
    public void OnAddCRIClick()
    {
        if (PlayerAtt.Instance.levelUp != PlayerAtt.Instance.Levle)
        {
            PlayerAtt.Instance.CRI += 0.02f;
            PlayerAtt.Instance.levelUp++;
            PlayerAtt.Instance.UPDate_PlayerAtt();
        }
    }
BY WANG


保存与读取:在游戏中,我们会存储或者读取数据,我的设定是每个场景都有一个复活点,人物属性是可以自己添加,所以,我需要在数据库中存放相应的数据,在存储的时候,将所有的东西与数据库中一一对应然后写入进去即可。

保存数据sql代码实现

public int UpdateFileSql(string tableName,string[] colNames,string[] colNews,string _operator){
		OpenDataBase ();
		string queryOperator = "";
		if (_operator == null) {

		} else {
			queryOperator=" WHERE " + _operator;
		}
		string queryString = "UPDATE " + tableName + " SET " + colNames[0] + "=" + "'" + colNews[0] + "'";
        
		for (int i = 1; i < colNames.Length; i++) {
			queryString += "," + colNames [i] + "=" + "'" + colNews [i] + "'";
		}
		queryString += queryOperator;
		int count = 0;
		try {
			command.CommandText = queryString;
			count=command.ExecuteNonQuery();

		} catch (System.Exception ex) {
			Debug.Log (ex);
		}
		CloseDataBase ();
		return count;
	}
BY WANG

技能栏:技能的实现主要是加一个cd的效果,并加上点击ui也能释放技能,所以,就需要将UI按钮释放技能与按键释放技能联系起来。具体代码见后面的人物控制。

背包:虽然是UI,但是是UI中最难的一个,这部分内容会另写一篇着重介绍,这里要提到的是药品的联系,因为我们没有装备,商店,背包中只有药品一种物品,药品在ui,按键,背包中的联系是一个难点,我们要注意,在ui上使用药品之后,人物身上的血瓶数量会减少,人物背包中的药瓶也要跟着减少,因为背包是另一个Qin同学做的,背包几乎全是按键操作,当我们点击使用背包中的时候,跟ui与人物身上的很好联系,但是当我们在ui或者使用按键消耗药品时,背包中怎么减少就是一个难点,就需要我们对背包代码有点熟悉,才能继续做下去,所以我觉得,团队项目,并不是做了个人的部分就算完成,对于别的部分的内容多少也要了解点,尤其是一个项目的发起人,要对项目所有的部分都要了如指掌。

希望能对大家有所帮助。








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值