官术网_书友最值得收藏!

The Attack state

If the player tank is close enough to attack our AI tank, we will rotate the turret object to face the player tank, and then start shooting. Then, if the player tank goes out of range, the tank goes back to the Patrol state:

    protected void UpdateAttackState() 
    { 
      //Set the target position as the player position 
      destPos = playerTransform.position; 
 
      //Check the distance with the player tank 
      float dist = Vector3.Distance(transform.position,  
      playerTransform.position); 
 
      if (dist >= 200.0f && dist < 300.0f) 
      { 
        //Rotate to the target point 
        Quaternion targetRotation =  
        Quaternion.LookRotation(destPos -  
        transform.position); 
        transform.rotation = Quaternion.Slerp( 
        transform.rotation, targetRotation,  
        Time.deltaTime * curRotSpeed);   
 
        //Go Forward 
        transform.Translate(Vector3.forward *  
        Time.deltaTime * curSpeed); 
 
        curState = FSMState.Attack; 
      } 
      //Transition to patrol is the tank become too far 
      else if (dist >= 300.0f) 
      { 
        curState = FSMState.Patrol; 
      } 
 
      //Always turn the turret toward the player 
      Quaternion turretRotation =  
      Quaternion.LookRotation(destPos  
      - turret.position); 
 
      turret.rotation =  
      Quaternion.Slerp(turret.rotation, turretRotation,  
      Time.deltaTime * curRotSpeed);  
 
      //Shoot the bullets 
      ShootBullet(); 
    } 
    private void ShootBullet() 
    { 
      if (elapsedTime >= shootRate) 
      { 
        //Shoot the bullet 
        Instantiate(Bullet, bulletSpawnPoint.position,  
        bulletSpawnPoint.rotation); 
        elapsedTime = 0.0f; 
      } 
    } 

主站蜘蛛池模板: 汪清县| 泽普县| 尖扎县| 建始县| 特克斯县| 唐山市| 虹口区| 武清区| 大冶市| 宜昌市| 铜鼓县| 榆中县| 永寿县| 张家川| 全南县| 漯河市| 张家口市| 宁晋县| 聂荣县| 梁山县| 甘德县| 潮州市| 玉环县| 湖口县| 台前县| 固安县| 沁阳市| 铜梁县| 河北区| 吉安县| 怀柔区| 丁青县| 安塞县| 通渭县| 陇川县| 龙岩市| 都安| 罗平县| 泗水县| 拜城县| 晋宁县|