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に帰属します。

