unity商店demo学习:俯视视角RPG游戏
一下所有素材和源码都来自unity商店的实例 Top-Down RPG Starter Kit ,这个demo是unity商店上最好的入门级rpg游戏实例,麻雀虽小,五脏俱全,想要弄清楚一个标准的rpg游戏的方方面面,这个是很好的选择。
ps:demo写得很高深,看得不是很懂,准备慢慢研究。
来一张工程全貌图。
这是一个俯视视角(可以调整视角)的卡通风格3D角色扮演游戏,配着动听又欢快的背景音乐,还有那萌萌哒的怪物,仿佛又回到了初中时玩冒险岛online的时候~~,额,不废话,主要模块如下:
- 游戏主菜单界面
- 游戏角色选择场景
- 游戏角色控制
- 摄像机控制
- 角色成长系统
- NPC对话和任务系统
- 技能系统
- 背包系统
- 装备系统
- 商店系统
- 小地图
- 游戏怪物AI
- 怪物掉落和拾取
- 怪物boss
- 游戏HUD GUI
- 音乐和音效
- 存档系统
游戏主菜单界面
![](/assets/blank.gif)
![](/assets/blank.gif)
<span style="white-space:pre"> </span>void OnMouseUp(){this.guiTexture.texture = buttonNormal;Invoke("LoadScene",0.1f);}void OnMouseDown(){if(buttonSfx != null)AudioSource.PlayClipAtPoint(buttonSfx,transform.position);this.guiTexture.texture = buttonDown;}void LoadScene(){Application.LoadLevel(loadSceneName);; }
游戏角色选择场景
![](/assets/blank.gif)
![](/assets/blank.gif)
public class SelectCharacter : MonoBehaviour {public GameObject[] hero; //your heropublic GameObject buttonNext,buttonPrev; //button prev and button next[HideInInspector]public int indexHero = 0; //index select heroprivate GameObject[] heroInstance; //use to keep hero gameobject when Instantiate// Use this for initializationvoid Start () {heroInstance = new GameObject[hero.Length]; //add array size equal hero sizeindexHero = 0; //set default selected heroSpawnHero(); //spawn hero to display current selected//check if hero is less than 1 , button next and prev will disappearif(hero.Length <= 1){buttonNext.SetActive(false);buttonPrev.SetActive(false);}}//Check show only selected characterpublic void UpdateHero(int _indexHero){for(int i=0; i<hero.Length;i++){//Show only select characterif(i == _indexHero){heroInstance[i].SetActive(true);}else{//Hide Other CharacterheroInstance[i].SetActive(false);} }}//Spawn all heropublic void SpawnHero(){for(int i=0;i<hero.Length;i++){heroInstance[i] = (GameObject)Instantiate(hero[i],transform.position,transform.rotation);}UpdateHero(indexHero);}}
游戏角色控制
![](/assets/blank.gif)
![](/assets/blank.gif)
摄像机控制
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
Quaternion rotation = Quaternion.Euler(y, x, 0);
Vector3 calPos = new Vector3(0, 0, -distanceLerp);
position = rotation * calPos + target.transform.position;
transform.rotation = rotation;
角色成长系统
NPC对话和任务系统
![](/assets/blank.gif)
![](/assets/blank.gif)
bool CheckConditionItem(int id,int amout){for(int i =0;i<inventory.bag_item.Count;i++){if(inventory.bag_item[i].item_id == id && inventory.bag_item[i].item_amount >= amout){inventory.bag_item[i].item_amount -= amout;if(inventory.bag_item[i].item_amount <= 0){inventory.bag_item[i].item_id = 0; }return true;}}return false;}void GiveReward(int id){for(int i=0;i<questData.questSetting.Count;i++){if(questID == questData.questSetting[i].questID){inventory.GiveItem((int)questData.questSetting[i].itemIDReward.x,(int)questData.questSetting[i].itemIDReward.y);Debug.Log("Give");break; }}}
技能系统
![](/assets/blank.gif)
技能系统包括技能的激活、学习、加点、属性加成、技能快捷键
背包系统
![](/assets/blank.gif)
管理背包物品,可以物品可拖拽到装备窗口和技能快捷窗口
装备系统
public enum Equipment_Type{Null = 0, Head_Gear = 1, Armor = 2, Shoes = 3, Accessory = 4, Left_Hand = 5, Right_Hand = 6, Two_Hand = 7 }
商店系统
public Item Get_Item(int item_id){int i = 0;bool isEnd = false;if(isEnd == false){while(i < item_equipment_set.Count){if(item_id == item_equipment_set[i].item_ID){return item_equipment_set[i];i = item_equipment_set.Count;isEnd = true;}i++;}}i = 0;if(isEnd == false){while(i < item_usable_set.Count){if(item_id == item_usable_set[i].item_ID){return item_usable_set[i];i = item_usable_set.Count;isEnd = true;}i++;}}i = 0;if(isEnd == false){while(i < item_etc_set.Count){if(item_id == item_etc_set[i].item_ID){return item_etc_set[i];i = item_etc_set.Count;isEnd = true;}i++;}}i = 0;if(isEnd == false){while(i < item_gold.Length){if(item_id == item_gold[i].item_ID){return item_gold[i];i = item_gold.Length;isEnd = true;}i++;}}return null;}
小地图
void TextureSetup (){if(signType == MinimapSignType.Player){this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[0]; }else if(signType == MinimapSignType.Enemy){this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[1]; }else if(signType == MinimapSignType.Boss){this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[2]; }else if(signType == MinimapSignType.Npc){this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[3]; }else if(signType == MinimapSignType.ShopWeapon){this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[4]; }else if(signType == MinimapSignType.ShopPotion){this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[5]; }else if(signType == MinimapSignType.SavePoint){this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[6]; }else if(signType == MinimapSignType.Quest){this.gameObject.renderer.material = MinimapSign.Instance.minimapSignMat[7]; }}
游戏怪物AI
![](/assets/blank.gif)
// Move to destinationif(ctrlAnimState == ControlAnimationState.Move){if(controller.isGrounded){movedir = Vector3.zero;movedir = transform.TransformDirection(Vector3.forward*moveSpeed);}}else{movedir = Vector3.Lerp(movedir,Vector3.zero,Time.deltaTime * 10);}movedir.y -= 20 * Time.deltaTime;controller.Move(movedir*Time.deltaTime);
怪物掉落和拾取
public void UseDropItem(){for(int i = 0; i < item_Drop_List.Count; i++){float percentResult = Random.Range(0,100);if(percentResult < item_Drop_List[i].percentDrop){GameObject go = (GameObject)Instantiate(item_Obj_Pref,transform.position+(Vector3.up),Quaternion.identity);go.rigidbody.AddForce(new Vector3(Random.Range(-1,1)*1.5f*powerImpulse,1*3*powerImpulse,Random.Range(-1,1)*1.5f*powerImpulse),ForceMode.Impulse);Item_Obj item_obj = go.GetComponent<Item_Obj>();item_obj.item_id = item_Drop_List[i].item_id;item_obj.SetItem();if(item_obj.gold){item_obj.gold_price = Random.Range(gold_min, gold_max);} }}}
怪物boss
![](/assets/blank.gif)
游戏HUD GUI
![](/assets/blank.gif)
![](/assets/blank.gif)
BottomBar绘制技能快捷栏
GUI.BeginGroup(new Rect(posHPbar.x, posHPbar.y,sizeHPBar.x,sizeHPBar.y));GUI.DrawTexture(new Rect(0,0, sizeHPBar.x ,sizeHPBar.y), hpBar);GUI.BeginGroup(new Rect(0,0,ConvertHP(sizeHPBar.x,maxHP,curHP),sizeHPBar.y));GUI.DrawTexture(new Rect(0,0,sizeHPBar.x,sizeHPBar.y), hpCurrent);GUI.EndGroup();GUI.EndGroup();
音乐和音效
public void PlayingSound(string _soundName){AudioSource.PlayClipAtPoint(sound_List[FindSound(_soundName)].audioClip, Camera.mainCamera.transform.position);}private int FindSound(string _soundName){int i = 0;while( i < sound_List.Count ){if(sound_List[i].soundName == _soundName){return i; }i++;}return i;}
存档系统
unity商店demo学习:俯视视角RPG游戏相关推荐
- 计算机科学游戏化,智慧教育学院(计算机科学与技术学院)“智慧讲堂”学术讲座系列第六十九讲 ——尚俊杰研究员《基于学习科学视角的游戏化学习研究》...
2020年5月8日晚上7点,北京大学尚俊杰博士为智慧教育学院师生做了一场题为<基于学习科学视角的游戏化学习研究>的学术报告.此次报告在腾讯会议举行,由我院杨现民院长主持,我院胡永斌副教授. ...
- unity怪物攻击玩家减血_Unity RPG游戏攻击的判定
在一个游戏里面,最重要的要数那些算法了.比如追击AI算法,寻路算法.一个优质的算法能让你的游戏体验更好.那么在RPG游戏里面,我们玩家角色的普攻一般情况下,如果选择的人物是那种剑士职业的(这里打个比方 ...
- 学习HTML5开发RPG游戏第五步游戏界面设计一
游戏界面包括地图.主角.操作界面.战斗界面.数据界面等. 1.地图 要显示地图,首先我们要有地图数据,为了方便编辑,需要一个地图编辑器,这里我就随机生成迷宫地图来获取地图数据. 随机生成迷宫地图方法如 ...
- 【unity实战】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(一)(附源码)
文章目录 本期目标 前言 欣赏 开始 1. 角色移动和场景搭建 2. 绑定枪械 2.1 首先将各种枪械的素材添加给人物作为子物体 2.2 给枪械也分别添加两个子物体用作标记枪口和弹仓位置 3. 枪械动 ...
- 极乐迪斯科for Mac(侦探类RPG游戏)中文版
极乐迪斯科Disco Elysium for Mac是一款很好玩的侦探类RPG游戏,在Disco Elysium汉化版中,玩家将扮演一个落魄潦倒的中尉侦探,身处堕落的港口城市雷瓦科城,你将要用属于自己 ...
- 好玩的RPG游戏推荐:极乐迪斯科Disco Elysium中文版
极乐迪斯科Disco Elysium for Mac是一款很好玩的侦探类RPG游戏,在Disco Elysium汉化版中,玩家将扮演一个落魄潦倒的中尉侦探,身处堕落的港口城市雷瓦科城,极乐迪斯科mac ...
- Unity学习笔记3 简易2D横版RPG游戏制作(三)
这一篇本来应该是在上一篇后面直接补进去的.不过因为排版的问题.所以我就另开一篇来整理了,好了,废话不多说,马上整理: 十八.关卡的锁定与解锁 前面我们已经解决了在游戏开始时可以选择关卡的问题,接下来我 ...
- 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)
文章目录 一.前言 二.实现方案 1.无主之地,第一人称视角 2.我之前做的摇杆控制 3.第一人称视角 + 摇杆控制 三.开始实战 1.资源获取:Unity AssetStore 2.Low Poly ...
- 学习在Unity中创建一个动作RPG游戏
游戏开发变得简单.使用Unity学习C#并创建您自己的动作角色扮演游戏! 你会学到什么 学习C#,一种现代通用的编程语言. 了解Unity中2D发展的能力. 发展强大的和可移植的解决问题的技能. 了解 ...
- Unity完全学习教程-从初学者到C#中的RPG游戏开发
打造3款游戏&学习Unity实用方式!从基础开始,以一个RPG游戏结束.使用Unity 2020和C# 你会学到: 通过创建酷游戏的实用方法 游戏开发的基础和核心概念 创建一个拥有大量功能的角 ...
最新文章
- Android Jetpack组件App Startup简析
- 速卖通新手入驻必须了解的“9大知识点”
- Nacos 入门教程
- wms地图绘制工具_GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇
- 超级vga显示卡_VGA视频采集卡常见故障分析
- ghost不要用作域控的备份
- inl和dnl matlab_请问如何用matlab仿真它的性能, 比如 INL, DNL, SFDR,EOB等等。
- Python程序-打印单词的菱形字符图案
- atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException
- 错误解决办法:exec /usr/lib/ssh/ssh-askpass : No such file or directory error.
- 使用LTT升级HP磁带机的固件程序
- 大一java计算圆面积_Java练习题——计算圆的面积
- Salesforce WhatsApp 集成
- 【路科V0】systemVerilog基础3——字符串类型
- ART/Dalvik,JVM/Dalvik 虚拟机的区别
- Buuctf-WEB-Havefun(WP)
- keras 受限玻尔兹曼机_目前深度学习的模型有哪几种,适用于哪些问题?
- 关于<graphics.h>的头文件
- 三位代表中国科技圈的85后技术男_他们眼中的AI是什么?
- 洛谷 P3797 妖梦斩木棒 解题报告
热门文章
- Datax-HdfsWriter如何实现支持decimal类型数据写入
- 如何提高平面设计的思维转向
- iphone7p配置参数详情_iPhone12系列最全的详细参数,参数党可以看看
- 阿里P7、P8、P9级别需要多少年的工作经验,还是因能力而定?
- 程序员如何规划自己的职业生涯
- 「Wekan」- 看板工具 @20210403
- 数据库SQL语句学习
- Polynomial Commitments代码实现【1】——scipr-lab/poly-commit(含不同曲线性能对比)
- java首行缩进两个字符,都是首行缩进2字符,为什么缩进又不相同.d – 手机爱问...
- java的小于等于符号怎么打_「小于符号」mybatis的一些特殊符号标识(大于,小于,等于,不等于) - seo实验室...