纳金网

标题: 游戏框架-技能范围检测 [打印本页]

作者: may    时间: 2018-12-31 20:53
标题: 游戏框架-技能范围检测

來自:UnityTerminator
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;

  4. public class SkillRange  {
  5.         /// <summary>
  6.         /// 扇形范围判定
  7.         /// </summary>
  8.         /// <returns><c>true</c>, if range was curved, <c>false</c> otherwise.</returns>
  9.         /// <param name="self">Player.</param>
  10.         /// <param name="enemy">Enemy.</param>
  11.         /// <param name="maxDiatance">Max diatance.</param>
  12.         /// <param name="maxAngle">Max angle.</param>
  13.         public static bool CurveRange(Transform self,Transform enemy,float maxDiatance,float maxAngle){
  14.                 Vector3 playerDir = self.forward;
  15.                 Vector3 enemydir = (enemy.position - self.position).normalized;
  16.                 float angle = Vector3.Angle (playerDir, enemydir);
  17.                 float distance = Vector3.Distance (enemy.position, self.position);
  18.                 if (angle <= maxAngle / 2 && distance <= maxDiatance) {
  19.                         return true;
  20.                 } else {
  21.                         return false;
  22.                 }
  23.         }
  24.         /// <summary>
  25.         /// 圆形范围判定
  26.         /// </summary>
  27.         /// <returns><c>true</c>, if range was curved, <c>false</c> otherwise.</returns>
  28.         /// <param name="self">Player.</param>
  29.         /// <param name="enemy">Enemy.</param>
  30.         /// <param name="maxDiatance">Max diatance.</param>
  31.         public static bool CurveRange(Transform self,Transform enemy,float maxDiatance){
  32.                 float distance = Vector3.Distance (enemy.position, self.position);
  33.                 if (distance <= maxDiatance) {
  34.                         return true;
  35.                 } else {
  36.                         return false;
  37.                 }
  38.         }

  39.     /// <summary>
  40.     /// 矩形范围判定
  41.     /// </summary>
  42.     /// <param name="self"></param>
  43.     /// <param name="enemy"></param>
  44.     /// <param name="maxWidth"></param>
  45.     /// <param name="maxHeight"></param>
  46.     /// <returns></returns>
  47.     public static bool SquareRange(Transform self, Transform enemy, float maxWidth, float maxHeight)
  48.     {
  49.         Vector3 enemyDir = enemy.position - self.position;
  50.         float distance=Vector3.Distance(enemy.position,self.position);
  51.         
  52.         float angle = Vector3.Angle(enemyDir, self.forward);
  53.         if ( angle<= 90)
  54.         {
  55.             float z = distance * Mathf.Cos(angle * Mathf.Deg2Rad);
  56.             float x = distance * Mathf.Sin(angle * Mathf.Deg2Rad);
  57.             if (x<=maxWidth / 2 && z<=maxHeight)
  58.             {
  59.                 return true;
  60.             }
  61.         }
  62.         return false;
  63.     }
  64. }
复制代码





欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5