コード例 #1
0
        private static bool CheckSurfaceAgainstMask(SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes surface, SurfaceMask mask)
        {
            if (surface != SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes.Invalid)
            {
                switch (surface)
                {
                case SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes.Other:
                    return(mask.Other);

                case SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes.Floor:
                    return(mask.Floor);

                case SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes.FloorLike:
                    return(mask.FloorLike);

                case SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes.Platform:
                    return(mask.Platform);

                case SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes.Ceiling:
                    return(mask.Ceiling);

                case SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes.WallExternal:
                    return(mask.WallExternal);

                case SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes.WallLike:
                    return(mask.WallLike);

                default:
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
コード例 #2
0
ファイル: Bullet.cs プロジェクト: ReanimatingTheNew/hololens
    private void CreateSurfaceHitFX(GameObject hitObject, Vector3 hitPoint, Vector3 hitNormal)
    {
        if (hitObject.CompareTag(Layers.Instance.surfacePlaneTag))
        {
            ParticleEffectsManager.Instance.CreateBulletImpact(hitPoint, hitNormal);
            HoloToolkit.Unity.SpatialMapping.SurfacePlane plane = hitObject.GetComponent <HoloToolkit.Unity.SpatialMapping.SurfacePlane>();
            switch (plane.PlaneType)
            {
            case HoloToolkit.Unity.SpatialMapping.PlaneTypes.Wall:
                ParticleEffectsManager.Instance.CreateBulletImpactDebris(hitPoint, hitNormal, 0.1f, 3, 0);
                ParticleEffectsManager.Instance.CreateBulletHole(hitPoint, hitNormal, plane);
                break;

            case HoloToolkit.Unity.SpatialMapping.PlaneTypes.Floor:
                ParticleEffectsManager.Instance.CreateLingeringFireball(hitPoint, hitNormal, 0);
                //ParticleEffectsManager.Instance.CreateCrater(hitPoint, hitNormal);
                break;

            default:
                break;
            }
        }
        else
        {
            ParticleEffectsManager.Instance.CreateBulletImpact(hitPoint, hitNormal);
            SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes surfaceType = PlayspaceManager.Instance.QuerySurfaceType(hitPoint, hitNormal);
            Debug.Log("hitNormal=" + hitNormal + ", hitPoint=" + hitPoint);

            float cos80 = 0.1736f;
            if (Mathf.Abs(Vector3.Dot(hitNormal, Vector3.right)) > cos80 &&
                Mathf.Abs(Vector3.Dot(hitNormal, Vector3.up)) > cos80 &&
                Mathf.Abs(Vector3.Dot(hitNormal, Vector3.forward)) > cos80)
            {
                PlayRicochetSound();
            }
            else if (surfaceType == SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes.WallExternal)
            //else if (Mathf.Abs(hitNormal.y) < 0.05f)
            {
                // Must have hit a wall
                //TODO: for spatial understanding, we should raycast and determine whether we actually hit a real wall
                ParticleEffectsManager.Instance.CreateBulletImpactDebris(hitPoint, hitNormal, 0.1f, 3, 0);
                ParticleEffectsManager.Instance.CreateBulletHole(hitPoint, hitNormal);
            }
            else if (surfaceType == SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes.Floor)
            //else if (hitNormal.y > 0.95f)
            {
                // Must have hit the floor
                //TODO: raycast spatial understanding
                ParticleEffectsManager.Instance.CreateLingeringFireball(hitPoint, hitNormal, 0);
            }
        }

        /*
         * if (Vector3.Angle(hitNormal, Vector3.up) < 10)
         * {
         * // Lingering fireball only when hitting the ground
         * ParticleEffectsManager.Instance.CreateLingeringFireball(hitPoint, hitNormal, 0);
         * }
         * else if (Mathf.Abs(90 - Vector3.Angle(hitNormal, Vector3.up)) < 10)
         * {
         * // Debris when hitting walls
         * //TODO: wall detection should actually involve testing against detected wall planes
         * ParticleEffectsManager.Instance.CreateBulletImpactDebris(hitPoint, hitNormal, 0.1f, 3, 0);
         * }
         */
    }
コード例 #3
0
 public RaycastHit_SU(float _distance, Vector3 _point, SpatialUnderstandingDll.Imports.RaycastResult.SurfaceTypes _surfaceType)
 {
     distance    = _distance;
     point       = _point;
     surfaceType = _surfaceType;
 }