Пример #1
0
 /*普通攻击*/
 protected void attack()
 {
     if (SkillStatu != SkillStatus.Attack)
     {
         //开始攻击
         SkillStatu = SkillStatus.Attack;
         //Debug.Log("attack!"); //执行攻击
         MonsterAnimator.SetTrigger("SwordAttack");
     }
     else
     {
         //正在攻击
         AnimatorClipInfo[] animatorClipInfos = MonsterAnimator.GetCurrentAnimatorClipInfo(0);
         if (animatorClipInfos[0].clip.name == "Idel")
         {
             //已经攻击完毕
             //Debug.Log("攻击完毕!");
             SkillStatu = SkillStatus.Busy;
             StartCoroutine(recoverFromSkill(3));
         }
         else
         {
         }
     }
 }
Пример #2
0
	void Start () {
        controller = transform.GetComponent<CharacterController>();
        monsterAnimator = GetComponent<MonsterAnimator>();

        currentHealth = calculateAttribute(health);
		currentMana = calculateAttribute(mana);
		currentAttack = calculateAttribute(attack);
   		currentDefense = calculateAttribute(defense);
    	currentSpecialAttack = calculateAttribute(specialAttack);
		currentSpecialDefense = calculateAttribute(specialDefense);
		currentSpeed = calculateAttribute(speed);
		currentCriticalChance = criticalChance;

		initialPosition = transform.position;
		initialRotation = transform.rotation;
	}
Пример #3
0
    void Start()
    {
        controller      = transform.GetComponent <CharacterController>();
        monsterAnimator = GetComponent <MonsterAnimator>();

        currentHealth         = calculateAttribute(health);
        currentMana           = calculateAttribute(mana);
        currentAttack         = calculateAttribute(attack);
        currentDefense        = calculateAttribute(defense);
        currentSpecialAttack  = calculateAttribute(specialAttack);
        currentSpecialDefense = calculateAttribute(specialDefense);
        currentSpeed          = calculateAttribute(speed);
        currentCriticalChance = criticalChance;

        initialPosition = transform.position;
        initialRotation = transform.rotation;
    }
Пример #4
0
    public void EndDialogue()
    {
        textGameObject.SetActive(false);

        if (!gameManager.beatGame)
        {
            objective.SetActive(true);
            clues.SetActive(true);

            Player player = FindObjectOfType <Player>();
            player.enabled = true;

            Monster monster = FindObjectOfType <Monster>();
            monster.enabled = true;
            MonsterAnimator monsterAnimator = monster.GetComponent <MonsterAnimator>();
            monsterAnimator.enabled = true;
        }
        else
        {
            SceneManager.LoadScene(0);
        }
    }
Пример #5
0
    /*移动到城门前,攻击城门*/
    protected void AttackDoor()
    {
        turnLeft();
        Vector3 DoorPosition;

        DoorPosition = DoorObject.GetComponent <Transform>().position;

        float xDistance = this.GetComponent <Transform>().position.x - DoorPosition.x;

        if (xDistance > DoorAttackDistance)
        {
            // 尚未到达大门
            MonsterAnimator.SetBool("isRun", true);
            Vector3 translator = new Vector3(speed, 0.0f, 0.0f);
            MonsterTransform.Translate(translator);
        }
        else
        {
            //已经到达大门处
            MonsterAnimator.SetBool("isRun", false);
            MonsterAnimator.SetTrigger("SwordAttack"); //播放攻击动画
        }
    }
Пример #6
0
 public bool CanControlSwitch(MonsterAnimator pm)
 {
     return(pm != null && pm.canControlSwitch == 0);
 }
Пример #7
0
    /*追踪玩家,到达指定位置进行攻击*/
    protected void chaseAndAttackPlayer()
    {
        Vector3 PlayerPosition;

        PlayerPosition = PlayerObject.GetComponent <Transform>().position;

        float xDistance = GetComponent <Transform>().position.x - PlayerPosition.x;
        float yDistance = GetComponent <Transform>().position.z - PlayerPosition.z;

        bool    isRun      = false;
        Vector3 translator = new Vector3();

        if (xDistance > PlayerAttackDistanceX)
        {
            //怪物在玩家的右侧且尚未接近
            isRun = true;
            turnLeft();
            translator.x = speed;
            direction    = true;
        }
        else if (xDistance < -1.0f * PlayerAttackDistanceX)
        {
            //怪物在玩家的左侧且尚未接近
            isRun = true;
            turnRight();
            translator.x = speed;
            direction    = false;
        }

        if (yDistance > PlayerAttackDistanceZ)
        {
            //怪物在玩家的上方侧且尚未接近
            isRun = true;
            if (direction)
            {
                //怪物面向左侧,z轴正方向向下
                translator.z = speed;
            }
            else
            {
                //怪物面向右侧,z轴正方向向上
                translator.z = -1.0f * speed;
            }
        }
        else if (yDistance < -1.0f * PlayerAttackDistanceZ)
        {
            //怪物在玩家的下方且尚未接近
            isRun = true;
            if (direction)
            {
                //怪物面向左侧,z轴正方向向下
                translator.z = -1.0f * speed;
            }
            else
            {
                //怪物面向右侧,z轴正方向向上
                translator.z = speed;
            }
        }

        if (isRun)
        {
            //尚未到达攻击地点
        }
        else
        {
            //已经到达攻击地点
            MonsterAnimator.SetTrigger("SwordAttack"); //播放攻击动画
        }
        MonsterAnimator.SetBool("isRun", isRun);
        if (direction)
        {
            Quaternion quaternion = Quaternion.Euler(0, 180, 0);
            MonsterTransform.rotation = quaternion;
        }
        else
        {
            Quaternion quaternion = Quaternion.Euler(0, 0, 0);
            MonsterTransform.rotation = quaternion;
        }

        MonsterTransform.Translate(translator);
    }
Пример #8
0
 private void Awake()
 {
     agent           = GetComponent <NavMeshAgent>();
     monsterAnimator = GetComponent <MonsterAnimator>();
 }