Exemple #1
0
    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);
        }
    }
Exemple #3
0
    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");
        });
    }
Exemple #4
0
    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;
                }
            }
        }
    }
Exemple #5
0
 //绑定GameObject
 void bindModel()
 {
     HeroModelFactory.getHeroModel(this.gameObject.name).GameObject = this.gameObject;
 }