优化射线对障碍物判定方法 #13

Merged
45 merged 1 commits from dev-0713 into dev-0524 2 years ago
  1. 4
      ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity
  2. 28
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/getNodeTools.cs

4
ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity

@ -6479,7 +6479,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d344126aa8082fa48b7e5f19eff09202, type: 3}
m_Name:
m_EditorClassIdentifier:
castPool: []
--- !u!1 &680060074
GameObject:
m_ObjectHideFlags: 0
@ -14400,7 +14399,6 @@ MonoBehaviour:
step: 2
startPositionX: 1
startPositionY: 1
influencePreviewPool: []
chooseNodeLayerMask:
serializedVersion: 2
m_Bits: 64
@ -17780,7 +17778,7 @@ MeshCollider:
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 5
m_Convex: 0
m_Convex: 1
m_CookingOptions: 30
m_Mesh: {fileID: -5468021829708598221, guid: ae332737a5755ee499c32f566d3a2913, type: 3}
--- !u!1660057539 &9223372036854775807

28
ColorlessWorld-2024-4-2/Assets/Scripts/Tool/getNodeTools.cs

@ -114,26 +114,42 @@ public class getNodeTools
public static bool checkNodePass(MapUnity mapUnity, MapUnity centerMapUnity)
{
LayerMask layerMask=new LayerMask();
LayerMask layerMask = new LayerMask();
int blockLayer = LayerMask.NameToLayer("Block");
layerMask |= (1 << blockLayer);
bool canPass=true;
bool canPass = true;
//MapUnity playerOnNode = GameManager.Instance.playerOn.transform.GetComponent<MapUnity>();
//var playerOnNode=GameManager.Instance.player;
float distance = Vector3.Distance(centerMapUnity.transform.position, mapUnity.transform.position);
Vector3 dir = mapUnity.transform.position - centerMapUnity.transform.position;
Ray ray = new Ray(centerMapUnity.transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit raycastHit, distance, layerMask.value))
if (centerMapUnity.blocked == false)
{
canPass = false;
if (Physics.Raycast(ray, out RaycastHit raycastHit, distance, layerMask.value))
{
float disChar = distance - Vector3.Distance(centerMapUnity.transform.position, raycastHit.collider.transform.position);
Debug.Log(disChar);
if (disChar > 0.25)
{
canPass = false;
}
}
}
if (mapUnity.locationX==1&& mapUnity.locationY==5)
else
{
Debug.Log("距离是" + distance + ",结果是:" + canPass + ",角度是:" + dir + " " + layerMask.value + "ray是" + ray + "X是:" + mapUnity.locationX + "Y是:" + mapUnity.locationY);
//Debug.DrawRay (centerMapUnity.transform.position, dir,Color .white , distance);
if (Physics.Raycast(ray, out RaycastHit raycastHit, distance, layerMask.value))
{
Debug.Log(raycastHit.collider.name);
canPass = false;
}
}
// Debug.Log("距离是" + distance + ",结果是:" + canPass + ",角度是:" + dir + " " + layerMask.value + "ray是" + ray + "X是:" + mapUnity.locationX + "Y是:" + mapUnity.locationY);
return canPass;
}
}

Loading…
Cancel
Save