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

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; 
      } 
    } 

主站蜘蛛池模板: 华安县| 顺义区| 广安市| 建德市| 井陉县| 永年县| 留坝县| 萍乡市| 鹤庆县| 长岭县| 昭苏县| 佳木斯市| 二连浩特市| 镇原县| 巴中市| 宁都县| 黔东| 浠水县| 深泽县| 万荣县| 无棣县| 县级市| 翁牛特旗| 广饶县| 恩平市| 南漳县| 伊春市| 通榆县| 五大连池市| 滦南县| 安塞县| 巫溪县| 炉霍县| 万宁市| 沧源| 南皮县| 万荣县| 五家渠市| 华坪县| 台中县| 汶川县|