23.细节完善
23.1 知识点
在ChooseHeroPanel脚本中更新英雄方法中添加更新上方显示的描述信息的逻辑
/// <summary>
/// 更新场景上要显示的模型的
/// </summary>
private void ChangeHero()
{
if(heroObj != null)
{
Destroy(heroObj);
heroObj = null;
}
//取出数据的一条 根据索引值
nowRoleData = GameDataMgr.Instance.roleInfoList[nowIndex];
//实例化对象 并记录下来 用于下次切换时 删除
heroObj = Instantiate(Resources.Load<GameObject>(nowRoleData.res), heroPos.position, heroPos.rotation);
//由于我们现在在对象上挂载了PlayerObject 但是在开始场景 不需要
Destroy(heroObj.GetComponent<PlayerObject>());
//更新上方显示的 描述信息
txtName.text = nowRoleData.tips;
//根据解锁相关数据 来决定是否显示解锁按钮
UpdateLockBtn();
}
调整相机跟随参数,出怪点造塔点位置。
修改配置的json数据额,让游戏根平衡
拷贝开始场景的BKMusic对象到游戏场景
怪物脚本中的死亡方法,死亡时直接失活寻路组件,直接停止移动有点问题。
//死亡
public void Dead()
{
isDead = true;
//停止移动
//agent.isStopped = true;
agent.enabled = false;
//播放死亡动画
animator.SetBool("Dead", true);
//播放音效
GameDataMgr.Instance.PlaySound("Music/dead");
//加钱——我们之后通过关卡管理类 来管理游戏中的对象 通过它来让玩家加钱
GameLevelMgr.Instance.player.AddMoney(1000);
}
玩家攻击的时候可能遇到枪打不到的问题。因为播开枪动画时可能枪口是抬起来的,这样射线也是抬起来的。可以把射线的方向修改成往人物的前方。免得打不到怪物。
public void ShootEvent()
{
//进行摄像检测
//前提是需要有开火点
RaycastHit[] hits = Physics.RaycastAll(new Ray(gunPoint.position, this.transform.forward), 1000, 1 << LayerMask.NameToLayer("Monster"));
//播放开枪音效
GameDataMgr.Instance.PlaySound("Music/Gun");
for (int i = 0; i < hits.Length; i++)
{
//得到对象上的怪物脚本 让其受伤
//得到碰撞到的对象上的怪物脚本 让其受伤
MonsterObject monster = hits[i].collider.gameObject.GetComponent<MonsterObject>();
if (monster != null && !monster.isDead)
{
//进行打击特效的创建
GameObject effObj = Instantiate(Resources.Load<GameObject>(GameDataMgr.Instance.nowSelRole.hitEff));
effObj.transform.position = hits[i].point;
effObj.transform.rotation = Quaternion.LookRotation(hits[i].normal);
Destroy(effObj, 1);
monster.Wound(this.atk);
break;
}
}
}
可以把塔点和出怪点做成预制体
创建多个场景,让玩家选择时进入
打包游戏,设置图标
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com