Unity|关于player视野范围的那些解决办法

时间:2024-03-13 14:30:08
[判断物体是否在主角前方60°、距离小于10的范围内]

  • 解决思路:

    判断是否在前方要运用到点积,公式为a•b=|a||b|cosθ,所以只需要判断cosθ(物体与主角正前方的夹角为θ)与cos30°的大小关系。余弦函数在0~90°之间,函数值随着角度的增大反而减小,所以当cosθ>cos30°时,θ<30°,在范围内;当cosθ30°,不在范围内;

    判断距离是否小于10,只需求出物体与主角之间的模长,与10进行比较即可。

Unity|关于player视野范围的那些解决办法


  • 在Unity中实现:(三种方法)

    Quaternion.AngleAxis(30,transform.up)*transform.forward:表示将向量(0,0,1)绕Y轴旋转30°,会得到一个新向量。

Unity|关于player视野范围的那些解决办法

Unity|关于player视野范围的那些解决办法

  •  点积公式:a•b=|a||b|cosθ,即cosθ=(a•b)/(|a||b|)。当a、b都是单位向量时,它返回1个-1.0~1.0之间的一个值,所以|a|、|b|都是1,即cosθ=(a•b):

Unity|关于player视野范围的那些解决办法

  • 在上个方法的基础上,通过cosθ的值求出θ:(Mathf.Rad2Deg:单位弧度的度数。

Unity|关于player视野范围的那些解决办法

  • 通过Vector3.Angle()得出夹角,该函数返回值为0~180.

Unity|关于player视野范围的那些解决办法