示例#1
0
        private static Collider BuildBoundingCollider(FrustumV2 Frustum, RangeGameObjectV2 RangeGameObject)
        {
            var boxCollider = RangeGameObject.RangeGameObject.AddComponent <BoxCollider>();

            boxCollider.center    = new Vector3(0, 0, Frustum.F2.FaceOffsetFromCenter.z / 4f);
            boxCollider.size      = new Vector3(Mathf.Max(Frustum.F1.Width, Frustum.F2.Width), Math.Max(Frustum.F1.Height, Frustum.F2.Height), Frustum.F2.FaceOffsetFromCenter.z / 2f);
            boxCollider.isTrigger = true;
            return(boxCollider);
        }
示例#2
0
        private static Collider BuildBoundingCollider(FrustumV2 Frustum, RangeGameObjectV2 RangeGameObject)
        {
            Frustum.BuildLocalBoundingBox(out Vector3 localSize, out Vector3 localCenter);
            var boxCollider = RangeGameObject.RangeGameObject.AddComponent <BoxCollider>();

            boxCollider.center    = localCenter;
            boxCollider.size      = localSize;
            boxCollider.isTrigger = true;
            return(boxCollider);
        }
示例#3
0
 public FrustumRangeObjectPositioningSystem(FrustumV2 Frustum, RangeObjectV2 RoundedFrustumRangeObjectV2) : base(RoundedFrustumRangeObjectV2)
 {
     Frustum.CalculateFrustumWorldPositionyFace(out FrustumPointsPositions LocalFrustumPointPositions, new TransformStruct {
         WorldPosition = Vector3.zero, WorldRotationEuler = Vector3.zero, LossyScale = Vector3.one
     });
     this.RangeFrustumWorldPositioning = new RangeFrustumWorldPositioning
     {
         LocalFrustumPositions = LocalFrustumPointPositions
     };
 }
示例#4
0
        private void CreateAndAddFrustumV2(Vector3 lC1, Vector3 lC2, Vector3 lC3, Vector3 lC4)
        {
            var frustum = new FrustumV2();

            frustum.FaceDistance = 9999f;
            frustum.F2v3         = new FrustumFaceV3();
            frustum.F1v3.LocalC1 = lC1;
            frustum.F1v3.LocalC2 = lC2;
            frustum.F1v3.LocalC3 = lC3;
            frustum.F1v3.LocalC4 = lC4;
            FaceFrustums.Add(frustum);
        }
示例#5
0
    private static void DrawFrustum(FrustumV2 frustum, Transform transform, bool isRounded)
    {
        frustum.CalculateFrustumWorldPositionyFace(out var LocalFrustumPointPositions, new TransformStruct {
            WorldPosition = Vector3.zero, WorldRotationEuler = Vector3.zero, LossyScale = Vector3.one
        });
        var frustumWorldPositions = new RangeFrustumWorldPositioning {
            LocalFrustumPositions = LocalFrustumPointPositions
        }.GetWorldFrustumPositions(transform.localToWorldMatrix);

        DrawFace(frustumWorldPositions.FC1, frustumWorldPositions.FC2, frustumWorldPositions.FC3, frustumWorldPositions.FC4);
        DrawFace(frustumWorldPositions.FC1, frustumWorldPositions.FC5, frustumWorldPositions.FC6, frustumWorldPositions.FC2);
        DrawFace(frustumWorldPositions.FC2, frustumWorldPositions.FC6, frustumWorldPositions.FC7, frustumWorldPositions.FC3);
        DrawFace(frustumWorldPositions.FC3, frustumWorldPositions.FC7, frustumWorldPositions.FC8, frustumWorldPositions.FC4);
        DrawFace(frustumWorldPositions.FC4, frustumWorldPositions.FC8, frustumWorldPositions.FC5, frustumWorldPositions.FC1);
        DrawFace(frustumWorldPositions.FC5, frustumWorldPositions.FC6, frustumWorldPositions.FC7, frustumWorldPositions.FC8);

        if (isRounded)
        {
            Handles.DrawWireDisc(transform.position, transform.up, frustum.FaceDistance);
        }
    }