You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.6 KiB
51 lines
1.6 KiB
//========= Copyright 2016-2018, HTC Corporation. All rights reserved. =========== |
|
|
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
using UnityEngine.EventSystems; |
|
|
|
namespace HTC.UnityPlugin.Pointer3D |
|
{ |
|
public class PhysicsRaycastMethod : BaseRaycastMethod |
|
{ |
|
public enum MaskTypeEnum |
|
{ |
|
Inclusive, |
|
Exclusive, |
|
} |
|
|
|
private static readonly RaycastHit[] hits = new RaycastHit[64]; |
|
|
|
public MaskTypeEnum maskType; |
|
public LayerMask mask; |
|
|
|
public int RaycastMask { get { return maskType == MaskTypeEnum.Inclusive ? (int)mask : ~mask; } } |
|
#if UNITY_EDITOR |
|
protected virtual void Reset() |
|
{ |
|
maskType = MaskTypeEnum.Exclusive; |
|
mask = LayerMask.GetMask("Ignore Raycast"); |
|
} |
|
#endif |
|
public override void Raycast(Ray ray, float distance, List<RaycastResult> raycastResults) |
|
{ |
|
var hitCount = Physics.RaycastNonAlloc(ray, hits, distance, RaycastMask); |
|
|
|
for (int i = 0; i < hitCount; ++i) |
|
{ |
|
raycastResults.Add(new RaycastResult |
|
{ |
|
gameObject = hits[i].collider.gameObject, |
|
module = raycaster, |
|
distance = hits[i].distance, |
|
worldPosition = hits[i].point, |
|
worldNormal = hits[i].normal, |
|
screenPosition = Pointer3DInputModule.ScreenCenterPoint, |
|
index = raycastResults.Count, |
|
sortingLayer = 0, |
|
sortingOrder = 0 |
|
}); |
|
} |
|
} |
|
} |
|
} |