protected override void Start() { mAnim = GetComponent <Animator>(); mNavAgent = GetComponent <NavMeshAgent>(); mRigidBody = GetComponent <Rigidbody>(); mRigidBody.useGravity = false; //配置文件 mModel = HeroModelFactory.getHeroModel(gameObject.name); //从配置文件读取移动速度 mNavAgent.speed = mModel.get(Constants.HERO_ATTR_RUNSPEED); //取消动画中的位移 mAnim.applyRootMotion = false; //保存动画初始播放速度,只为run动画根据移动速度调整动画播放速度。 mAnimInitSpeed = mAnim.speed; //动作状态机 mStateManager = gameObject.AddComponent <StateManager>(); mStateManager.addState(new HeroRunState()); mStateManager.addState(new HeroChaseState()); mStateManager.addState(new HeroIdleState()); mStateManager.addState(new HeroJumpState()); mStateManager.addState(new HeroAttackState()); mStateManager.addState(new HeroDeathState()); mStateManager.setDefaultState("HeroIdleState"); //如果死亡,不管在什么状态下都跳转到死亡状态。 mStateManager.setCondForState("HeroDeathState", 1, () => { return(mModel.isDead()); }); mBloodBar = gameObject.AddComponent <HeroUI>(); }
void doAttack() { GameObject enemy = AnimCtl.ChaseObject; if (enemy != null) { HeroBaseModel enemyModel = HeroModelFactory.getHeroModel(enemy.name); //攻击敌人 AnimCtl.Model.attack(enemyModel); } }
protected override void Start() { mTexBlood = ResourceManager <Texture2D> .load("images/globalUI/pbBlood"); mTexBg = ResourceManager <Texture2D> .load("images/globalUI/pbBg"); mBc = GetComponent <BoxCollider>(); mBloodWidth = 90; mBloodHeight = 10; mOffX = 5; mOffY = 5; mFactor = mBc.bounds.extents.magnitude; mBloodWidth *= mFactor * mTotalScale; mBloodHeight *= /*mFactor * */ mTotalScale; mOffX *= mFactor * mTotalScale; mOffY *= /*mFactor * */ mTotalScale; mBgWidth = mBloodWidth + 2 * mOffX; mBgHeight = mBloodHeight + 2 * mOffY; mAdjustHeight = 50; mModel = HeroModelFactory.getHeroModel(gameObject.name); if (mModel != null) { float allBlood = mModel.get(Constants.HERO_ATTR_HEALTH_MAX); mPercent = mModel.get(Constants.HERO_ATTR_HEALTH) / allBlood; mapEvent(Events.EVT_HERO_ATTR_CHANGED, (string __, object data) => { HeroAttrChange attrChange = (HeroAttrChange)data; if (attrChange.what.Equals(Constants.HERO_ATTR_HEALTH) && attrChange.which.Equals(gameObject.name)) { float currBlood = mModel.get(Constants.HERO_ATTR_HEALTH); mPercent = currBlood / allBlood; } }); } mapEvent(Events.EVT_GAME_OVER, (string __, object data) => { Time.timeScale = 0; Debug.Log("gameOver"); }); }
public void checkEnemy() { if (mChaseObj != null) { var chaseObjModel = HeroModelFactory.getHeroModel(mChaseObj.name); if (chaseObjModel.isDead()) { mChaseObj = null; } } //如果不在追逐状态,并且距离目标为可攻击距离,那么就不需要追逐。 if (!isChasing && mChaseObj != null && isArrivedTargetForChase()) { return; } //10m内是否有敌人 Collider[] colliders = Physics.OverlapSphere(transform.position, mModel.AlertDistance); foreach (var c in colliders) { if (c.gameObject.Equals(gameObject)) { continue; } var cGameObj = c.gameObject; var triggerObj = cGameObj.GetComponent <HeroUI>();//有血有肉的人就可以被攻击 var triggerModel = HeroModelFactory.getHeroModel(cGameObj.name); if (triggerObj != null && !triggerModel.isDead()) { HeroBaseModel cmodel = HeroModelFactory.getHeroModel(cGameObj.name); if (!cmodel.isInSameCamp(mModel)) { startChase(cGameObj); break; } } } }
//绑定GameObject void bindModel() { HeroModelFactory.getHeroModel(this.gameObject.name).GameObject = this.gameObject; }