如何在保持射程的同时增加视野
How to increase field of view while maintaining range
所以我有以下函数来生成 3 个矢量点让我们创建一个三角形:
private Vector3[] GetFieldOfViewPoint() {
float Range = 3f;
float Angle = 45;
Vector3 offset = new Vector3(0, Range, 0);
Quaternion rotation1 = Quaternion.Euler(0, 0, -Angle / 2);
Quaternion rotation2 = Quaternion.Euler(0, 0, Angle / 2);
return new Vector3[3] {
transform.position,
(rotation1 * offset) + transform.position,
(rotation2 * offset) + transform.position
};
}
我遇到的问题是,当我增加角度时,范围会减小,这对我来说确实有意义。
例如45角:
135角度:
我需要帮助的问题是如何修改计算以使范围线(最远的绿色直线)保持一致,而不管角度如何(上限为 170 度)?
我可以获得随角度移动的范围但是进行随机计算但它不一致并且不起作用(至少对于我尝试过的随机数)。我也考虑过斜边公式但是我只知道 1 边长(这是范围)。
任何对此的帮助都会很棒。
这里:
脚本:
using UnityEngine;
public class TrignometryTest : MonoBehaviour
{
public float range;
[Range(5,170)]
public float angle;
Vector3 size = Vector3.one;
Vector3[] GetFOVPoints(float _range, float _angleInDegrees)
{
Vector3 rightPoint, leftPoint;
float halfAngle = _angleInDegrees/2;
rightPoint = new Vector3(_range * Mathf.Tan(halfAngle * Mathf.Deg2Rad), _range, 0);
leftPoint = new Vector3(-_range * Mathf.Tan(halfAngle * Mathf.Deg2Rad), _range, 0);
Vector3[] points = { transform.position, leftPoint, rightPoint};
return points;
}
void OnDrawGizmos()
{
var points = GetFOVPoints(range, angle);
Gizmos.DrawCube(points[0], size);
Gizmos.DrawCube(points[1], size);
Gizmos.DrawCube(points[2],size);
Gizmos.DrawLine(points[0], points[1]);
Gizmos.DrawLine(points[0], points[2]);
Gizmos.DrawLine(points[1], points[2]);
Gizmos.DrawLine(points[0],Vector3.up * range);
}
}
输出:
希望对您有所帮助:)
所以我有以下函数来生成 3 个矢量点让我们创建一个三角形:
private Vector3[] GetFieldOfViewPoint() {
float Range = 3f;
float Angle = 45;
Vector3 offset = new Vector3(0, Range, 0);
Quaternion rotation1 = Quaternion.Euler(0, 0, -Angle / 2);
Quaternion rotation2 = Quaternion.Euler(0, 0, Angle / 2);
return new Vector3[3] {
transform.position,
(rotation1 * offset) + transform.position,
(rotation2 * offset) + transform.position
};
}
我遇到的问题是,当我增加角度时,范围会减小,这对我来说确实有意义。
例如45角:
135角度:
我需要帮助的问题是如何修改计算以使范围线(最远的绿色直线)保持一致,而不管角度如何(上限为 170 度)?
我可以获得随角度移动的范围但是进行随机计算但它不一致并且不起作用(至少对于我尝试过的随机数)。我也考虑过斜边公式但是我只知道 1 边长(这是范围)。
任何对此的帮助都会很棒。
这里:
脚本:
using UnityEngine;
public class TrignometryTest : MonoBehaviour
{
public float range;
[Range(5,170)]
public float angle;
Vector3 size = Vector3.one;
Vector3[] GetFOVPoints(float _range, float _angleInDegrees)
{
Vector3 rightPoint, leftPoint;
float halfAngle = _angleInDegrees/2;
rightPoint = new Vector3(_range * Mathf.Tan(halfAngle * Mathf.Deg2Rad), _range, 0);
leftPoint = new Vector3(-_range * Mathf.Tan(halfAngle * Mathf.Deg2Rad), _range, 0);
Vector3[] points = { transform.position, leftPoint, rightPoint};
return points;
}
void OnDrawGizmos()
{
var points = GetFOVPoints(range, angle);
Gizmos.DrawCube(points[0], size);
Gizmos.DrawCube(points[1], size);
Gizmos.DrawCube(points[2],size);
Gizmos.DrawLine(points[0], points[1]);
Gizmos.DrawLine(points[0], points[2]);
Gizmos.DrawLine(points[1], points[2]);
Gizmos.DrawLine(points[0],Vector3.up * range);
}
}
输出:
希望对您有所帮助:)