unity游戏引擎开发的ARPG游戏DEMO
耗时一个月左右终于完成了这个ARPG游戏的demo,基本框架已经达到了我的要求,只是还有些小bug需要后面慢慢修复!
demo功能包括:
移动(走动-小跑-疾跑)
普通攻击
无限连击
空中攻击
空中对地攻击
8个技能(采用RT+ABXY和 LT+ABXY进行组合)
坐骑
游泳
宠物
敌人AI(多技能攻击,自动追踪)
镜头缩放
视角控制
商店
切换武器
装备/道具
任务系统
技能系统
角色状态栏
背包
npc对话
npc任务
本人是一个游戏动画师,对于程序方面有些吃力,靠着日积月累的一点c#知识勉强改出了自己想要的功能,游戏动画量多很多地方没有细做,需要以后慢慢细化!
这个demo素材均来自网络,所以只供学习研究使用!如果我打算把它继续做下去估计会购买正版素材,毕竟现在人们为了避免不必要的麻烦,对版权越来越重视了!游戏的基本框架是Action-RPG Starter Kit6.5,场景美术是Handpainted Forest Environment,我是在这些基础上改进过来的!
为了达到一个比较好的arpg效果我增加了一些新的功能,比如突进,翻滚,跳跃攻击,技能跟随,锁定敌人,手柄震动。。。。。。。为了达到效果满意所以动画方面绝对不能少,下面是animator
从图片可以看出动画数量是不少的!
个人比较偏爱手柄玩游戏,所以游戏按键大部分都是适配了xbox游戏手柄!增加了震动反馈,当受到打击时释放技能时手柄均会震动!使游戏玩起来更有手感!为了游戏npc更智能我使用了NPCPopulator插件制作群体npc动画,npc会随机走动在指定范围内!
为了增加打击感,使用了动画速度控制,当击中敌人时攻击动画会把速度变成0.1,持续0.3秒且镜头会震动。
IEnumerator animspeed1() { animator.speed = 0.1f; yield return new WaitForSeconds(0.3f); animator.speed = 1f; }
自动锁定面前敌人,让攻击失误减小
public void OnGetEnemy(Transform player, int radius, int angle) { List<GameObject> mList = new List<GameObject>(); //球形射线检测,得到主角半径2米范围内所有的物件 Collider[] cols = Physics.OverlapSphere(player.position, radius); //判断检测到的物件中有没有Enemy if (cols.Length > 0) { for (int i = 0; i < cols.Length; i++) //判断是否是怪物 if (cols[i].tag.Equals("Enemy")) { //判断敌人是否在主角前方60度范围内 Vector3 dir = cols[i].transform.position - player.position; if (Vector3.Angle(dir, player.forward) < angle) { mList.Add(cols[i].gameObject); } } float distance_min = 10000; //主角与怪物的最近距离 float distance = 0; //当前怪物与主角的距离 int id = 0; //与主角最近的怪物的编号 //遍历所有敌人,计算距离并比较 for (int i = 0; i < mList.Count; i++) { distance = Vector3.Distance(transform.position, mList[i].transform.position); if (distance < distance_min) { //找到一个更近的 distance_min = distance; id = i; } } if (mList.Count > 0) { Vector3 targetPos = mList[id].transform.position; //攻击点面向怪物 targetPos.y = this.transform.position.y; this.transform.LookAt(targetPos);//使主角望向距离最近的敌人并开始攻击 targetPos.y = targetPos.y + 1; attackPoint.LookAt(targetPos); } // cols[i].GetComponent<BaseHero>().OnTakeDamage(); } return; }
游戏受到攻击手柄震动,这里引用了XInputDotNet这个插件
IEnumerator SetVibration(float right, float left, float tim) { if (this.tag == "Player") { Debug.Log("震动"); // XInputDotNetPure.dll XInputDotNetPure.GamePad.SetVibration(_type, right, left); yield return new WaitForSeconds(tim); XInputDotNetPure.GamePad.SetVibration(_type, 0, 0); } }
游戏场景截图
游戏视频
如果你对ARPG开发感兴趣可以试着联系我共同研究!游戏试玩过两天单独放出来!
扫描二维码推送至手机访问。
本サイト上に掲載の文章、画像、写真などを無断で複製することは法律で禁じられています。全ての著作権はGAMESHに帰属します。