Unity游戏开发完整项目,全套代码+资源

项目简介

一个Unity3D开发的角色扮演游戏,适合初学者参考学习,也可以用来做毕业设计,解压即可使用。

资源链接

RPG游戏《狩魔猎人》全套代码+资源

演示视频: https://b23.tv/oqvhQGZ

资源介绍

游戏场景 2种

人物模型 6种

怪物模型 4种

武器模型 20种

粒子特效 50+

装备、道具图标 56+

UI素材若干

攻击、走路、死亡等动画若干

游戏大小

1.23g(压缩包628m)

游戏功能设计

游戏分为10部分,分别是游戏界面设计、游戏地图设计、角色设计、怪物系统、游戏道具设计、背包系统、商店系统、战斗系统、任务系统、存储系统。

e50022be88cc4f069f131000131a9f29.png

 

游戏界面设计

ee352fa4d9ef4e3fbd8b7eb975084152.png

 游戏界面

c1df3c353a59415eae4f68b66725472c.png

主菜单

4d44c63f625f4e8ca1442fbf02bd5c17.png

角色创建界面

4d808c5909c940378e4da43b88391ee0.png

游戏界面

79d37b3a8afa414f89cfd511b13574e8.png

商店界面

37d68f56f4f446a78f5bf394b152d3e3.png

任务界面

b6b1efb08be6442ebb3556c985cb45a2.png

角色属性界面

8c1158b2f367472da2b3553d93d3d7d4.png

背包界面

部分代码展示

怪物有限状态机实现

    void StateUpdate()
    {
        //如果目标存在且非死亡状态,切换攻击状态
        if (target && state != MonsterState.Death)
        {
            state = MonsterState.Attack;                 
        }
            switch (state)
        {
            //空闲状态
            case MonsterState.Idle:
                if (anim.isPlaying == false)
                {
                    int num = Random.Range(0, 10);
                    switch (num)
                    {
                        case 0:
                        case 1:
                        case 2:
                        case 3:
                        case 4:
                            anim.CrossFade("idle");
                            break;
                        case 5:
                        case 6:
                            anim.CrossFade("idle_lookaround");
                            break;
                        case 7:
                        case 8:
                           anim.CrossFade("roar");
                           break;
                        case 9:
                            state = MonsterState.Walk;
                            break;
                    }
                }
                break;
            //行走状态
            case MonsterState.Walk:
                //如果没有播放行走动画
                if (anim.IsPlaying("walk") == false)
                {
                    int i = Random.Range(0, monsterManager.nextPos.Length);
                    nextPos = monsterManager.nextPos[i].position;
                    transform.LookAt(new Vector3(nextPos.x, transform.position.y, nextPos.z));
                }
                anim.CrossFade("walk");
                //如果正在播放行走动画
                if (anim.IsPlaying("walk") == true)
                {
                    controller.SimpleMove(transform.forward * walkSpeed);
                    DistanceUpdate(nextPos);
                    if (distance < 0.5f)
                    {
                        anim.Stop();
                        state = MonsterState.Idle;
                    }
                }
                break;
            //追逐状态
            case MonsterState.Run:
                break;
            //攻击状态
            case MonsterState.Attack:
                if (target)
                {
                    Attack();
                }
                else
                {
                    state = MonsterState.Idle;
                }
                
                break;
            //死亡状态
            case MonsterState.Death:
                break;
        }
    }

物品逻辑

    public virtual void OnEndDrag(PointerEventData eventData)
    {
        if (currentGrid.name == "Destroy")
        {
            Destroy(gameObject);
        }
        //如果格子有2个以上物品
        if (transform.parent.transform.childCount > 1)
        {
            GameObject itemEx = transform.parent.transform.GetChild(0).gameObject;
            //如果是装备
            if (itemEx.tag == Tags.Equipment)
            {
                itemEx.GetComponent<Equipment>().transform.SetParent(itemEx.GetComponent<Equipment>().currentGrid);
            }
            //如果是药水
            else if (itemEx.tag == Tags.Potion)
            {
                itemEx.GetComponent<Potion>().transform.SetParent(itemEx.GetComponent<Potion>().currentGrid);
            }
            //如果是材料
            else if (itemEx.tag == Tags.Material)
            {
                itemEx.GetComponent<ItemMaterial>().transform.SetParent(itemEx.GetComponent<ItemMaterial>().currentGrid);
            }
            itemEx.transform.localPosition = Vector3.zero;
        }
        ObjectsDialog.instance.ShowDlg(transform.position);
    }

猜你喜欢

转载自blog.csdn.net/Dawson_Ho/article/details/130837314
今日推荐