diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkFly.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkFly.cs index 3ad168a30c..785023fdab 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkFly.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkFly.cs @@ -116,7 +116,6 @@ namespace BrewMonster.Scripts m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_TAKEOFF); else { - Debug.LogError("(int)PLAYER_ACTION_TYPE.ACT_TAKEOFF_SWORD"); m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_TAKEOFF_SWORD); } } diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkStand.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkStand.cs index 2c4c8b2301..ecd61f5a1a 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkStand.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkStand.cs @@ -139,7 +139,6 @@ namespace BrewMonster.Scripts public override bool Tick(float dwDeltaTime) { base.Tick(dwDeltaTime); - int iMoveReason = ShouldMove(); if (iMoveReason != 0) { @@ -282,4 +281,4 @@ namespace BrewMonster.Scripts return m_bStopSlide; } } -} \ No newline at end of file +} diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HostInputFilter.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HostInputFilter.cs index 59f224fcfc..e1f2fcc4eb 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HostInputFilter.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HostInputFilter.cs @@ -219,7 +219,7 @@ namespace BrewMonster Vector3 vDelta = vDest - vStart; const int allLayers = -1; - if (Physics.RaycastNonAlloc(ray, hits, Mathf.Infinity, allLayers) > 0) + if (Physics.RaycastNonAlloc(ray, hits, maxDistance: 1000f, allLayers) > 0) { int hostCid = GetCharacterID(); CECObject clickedObject = null; diff --git a/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs b/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs index 982a9e6330..1312cd3726 100644 --- a/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs +++ b/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs @@ -1,14 +1,9 @@ using BrewMonster.Network; using BrewMonster.Scripts; -using BrewMonster.Scripts.Ornament; using BrewMonster.Scripts.World; using CSNetwork.GPDataType; using System; -using System.Reflection; using UnityEngine; -using UnityEngine.UI; -using static BrewMonster.CECHostMove; -using static System.Net.Mime.MediaTypeNames; using WORD = System.UInt16; namespace BrewMonster @@ -159,7 +154,7 @@ namespace BrewMonster vTerStart.y = fHitsTerrain[0].point.y; } } - fHitsTerrain = new RaycastHit[5]; + countHits = Physics.RaycastNonAlloc(vTerStart, dir.normalized, fHitsTerrain, vDelta.magnitude, TerrainMask); if ((countHits > 0 && Vector3.Distance(vTerStart, fHitsTerrain[0].point) > 0.0009f)) { @@ -194,13 +189,13 @@ namespace BrewMonster else { float h0 = 0f; - int countHits0 = Physics.RaycastNonAlloc(vWatStart + Vector3.up * 500f, Vector3.down, fHitsWater, 1000f, WaterMask); + int countHits0 = Physics.RaycastNonAlloc(vWatStart + Vector3.up * 500f, Vector3.down, fHitsWater, maxDistance: 1000f, WaterMask); if (countHits0 > 0) { h0 = fHitsWater[0].point.y; } float h1 = 0f; - countHits0 = Physics.RaycastNonAlloc((vWatStart + vDelta) + Vector3.up * 500f, Vector3.down, fHitsWater, 1000f, WaterMask); + countHits0 = Physics.RaycastNonAlloc((vWatStart + vDelta) + Vector3.up * 500f, Vector3.down, fHitsWater, maxDistance: 1000f, WaterMask); if(countHits0 > 0) { h1 = fHitsWater[0].point.y; @@ -251,8 +246,21 @@ namespace BrewMonster int countHits = Physics.RaycastNonAlloc(origin, Vector3.down, hits, dist, mask); if (countHits > 0) { - vHitNormal = hits[0].normal; - vEnd = new Vector3(vStart.x, hits[0].point.y + vExt.y, vStart.z); + float minDistance = 100f; + int idx = 0; + for (int i = 0; i < countHits; i++) + { + if (hits[i].collider != null && hits[i].distance > 0f) + { + if(hits[i].distance < minDistance) + { + minDistance = hits[i].distance; + idx = i; + } + } + } + vHitNormal = hits[idx].normal; + vEnd = new Vector3(vStart.x, hits[idx].point.y + vExt.y, vStart.z); bSupport = (vHitNormal.y >= 0f); return true; } @@ -563,7 +571,6 @@ namespace BrewMonster { //a_LogOutput(1, "bClear = true"); vFinalPos = vStart + vDelta; - Debug.LogError("bClear = true " + vFinalPos); break; } @@ -582,7 +589,6 @@ namespace BrewMonster tmpInfo.vTerStart = vStart; tmpInfo.vTerStart.y -= vExt.y; //bPull = !CollideWithEnv(ref tmpInfo); - Debug.LogError("CheckFootStepUp"); bPull = !CheckFootStepUp(tmpInfo); //int count1 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(tmpInfo.vStart), EC_Utility.ToVector3(tmpInfo.vDelta).normalized, hits, EC_Utility.ToVector3(tmpInfo.vDelta).magnitude, BrushMask | TerrainMask); @@ -699,7 +705,6 @@ namespace BrewMonster if (groundTrc.bSupport) { vFinalPos = groundTrc.vEnd; - Debug.LogError("vFinalPos = " + vFinalPos); if (!bJump) { vTPNormal = groundTrc.vHitNormal; @@ -725,7 +730,6 @@ namespace BrewMonster Vector3 vDelta = EC_Utility.ToVector3(pEnvTrc.vDelta); Vector3 dir = vDelta; int countHits = 0; - float num = 10f; countHits = Physics.BoxCastNonAlloc(vStart, vExt, dir.normalized, hits, Quaternion.identity, vDelta.magnitude, BrushMask); if (countHits > 0) { @@ -770,8 +774,6 @@ namespace BrewMonster return false; } pTrc.vEnd = trcInfo.vStart + trcInfo.vDelta * trcInfo.fFraction; - if(check) - Debug.LogError("trcInfo.fFraction = " + trcInfo.fFraction + " trcInfo.vStart = " + trcInfo.vStart + " pTrc.vEnd = " + pTrc.vEnd); pTrc.vEnd.y = hitPoint.y + pTrc.vExt.y + 0.1f; //if((pTrc.vEnd.y + 0.17f) < (hitPoint.y + pTrc.vExt.y + 0.1f)) //{ @@ -813,19 +815,26 @@ namespace BrewMonster { vPosOnSurface = vPos; int countHits = 0; - countHits = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vPosOnSurface), Vector3.down, fHitsTerrain,maxDistance: 1000f, TerrainMask); + countHits = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vPosOnSurface), Vector3.down, fHitsTerrain, maxDistance: 1000f, TerrainMask); if (countHits > 0) { - System.Array.Sort(fHitsTerrain, 0, fHitsTerrain.Length, raycastHitDistanceComparer); - for(int i = 0; i < fHitsTerrain.Length; i++) + int idx = 0; + float maxDistance = 100f; + //System.Array.Sort(fHitsTerrain, 0, fHitsTerrain.Length, raycastHitDistanceComparer); + for (int i = 0; i < countHits; i++) { - if (fHitsTerrain[i].distance > 0.0009f) + if (fHitsTerrain[i].collider != null && fHitsTerrain[i].distance > 0f) { - vPosOnSurface.y = fHitsTerrain[i].point.y; - vNormal = EC_Utility.ToA3DVECTOR3(fHitsTerrain[i].normal); - return; + if(fHitsTerrain[i].distance < maxDistance) + { + maxDistance = fHitsTerrain[i].distance; + idx = i; + } } } + vPosOnSurface.y = fHitsTerrain[idx].point.y; + vNormal = EC_Utility.ToA3DVECTOR3(fHitsTerrain[idx].normal); + return; } } @@ -1027,28 +1036,36 @@ namespace BrewMonster Vector3 vDelta = EC_Utility.ToVector3(brushTraceInfo.vDelta); Vector3 dir = vDelta; int countHits = 0; - float num = 10f; - //Quaternion quaternion = EC_Game.GetGameRun().GetWorld().GetPlayerMan().GetHostPlayer().transform.rotation; - Vector3[] arrVExt = new Vector3[5] { - vExt - ,new Vector3(vExt.x / num, vExt.y, vExt.z), - new Vector3(vExt.x, vExt.y / num, vExt.z), - new Vector3(vExt.x, vExt.y, vExt.z / num), - vExt / num - }; - for (int i = 0; i < arrVExt.Length; i++) + float fFraction = 100f; + Vector3 normal = Vector3.zero; + Vector3 hitP = Vector3.zero; + countHits = Physics.BoxCastNonAlloc(vStart, vExt, dir.normalized, hits, Quaternion.identity, vDelta.magnitude, BrushMask); + for (int i = 0; i < countHits; i++) { - countHits = Physics.BoxCastNonAlloc(vStart, arrVExt[i], dir.normalized, hits, Quaternion.identity, vDelta.magnitude, BrushMask); - if (countHits > 0) + if (hits[i].collider != null && hits[i].distance > 0f) { - if(hits[0].distance > 0.0009f) + float value = (hits[i].distance) / vDelta.magnitude; + if (value < fFraction) { - brushTraceInfo.fFraction = (hits[0].distance) / vDelta.magnitude; - brushTraceInfo.normal = EC_Utility.ToA3DVECTOR3(hits[0].normal); - return true; + fFraction = value; + normal = hits[i].normal; + hitP = hits[i].point; } } } + if (fFraction < 100f) + { + if (fFraction > 0f && fFraction <= 1f) + { + brushTraceInfo.fFraction = fFraction; + brushTraceInfo.normal = EC_Utility.ToA3DVECTOR3(normal); + } + if (Math.Abs(fFraction - 0f) < float.Epsilon) + { + brushTraceInfo.bStartSolid = true; + } + return true; + } brushTraceInfo.normal = new A3DVECTOR3(0f); brushTraceInfo.fFraction = 100f; return false; @@ -1061,42 +1078,40 @@ namespace BrewMonster Vector3 vDelta = EC_Utility.ToVector3(brushTraceInfo.vDelta); Vector3 dir = vDelta; int countHits = 0; - float num = 10f; + float fFraction = 100f; + Vector3 normal = Vector3.zero; + Vector3 hitP = Vector3.zero; countHits = Physics.BoxCastNonAlloc(vStart, vExt, dir.normalized, hits, Quaternion.identity, vDelta.magnitude, BrushMask); - if (countHits > 0) + for (int i = 0; i < countHits; i++) { - System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); - if (check) + if (hits[i].collider != null && hits[i].distance > 0f) { - BoxCastDrawer.Draw(vStart, vExt, vDelta.normalized, - Quaternion.identity, vDelta.magnitude, hits, 1, Color.green, 10f); + float value = (hits[i].distance) / vDelta.magnitude; + if(value < fFraction) + { + fFraction = value; + normal = hits[i].normal; + hitP = hits[i].point; + } } - if (check) + } + if(fFraction < 100f) + { + if(fFraction > 0f && fFraction <= 1f) { - Debug.LogError("AABBCollideWithBrush pos = " + hits[0].point + " name = " + hits[0].collider.name); + brushTraceInfo.fFraction = fFraction; + brushTraceInfo.normal = EC_Utility.ToA3DVECTOR3(normal); + hitPoint = hitP; } - if (Math.Abs(hits[0].distance - 0f) < float.Epsilon) + if (Math.Abs(fFraction - 0f) < float.Epsilon) { brushTraceInfo.bStartSolid = true; } - else - { - brushTraceInfo.fFraction = (hits[0].distance) / vDelta.magnitude; - brushTraceInfo.normal = EC_Utility.ToA3DVECTOR3(hits[0].normal); - hitPoint = hits[0].point; - if (check) - { - Debug.LogError("AABBCollideWithBrush true pos = " + hits[0].point); - } - return true; - } + return true; } brushTraceInfo.normal = new A3DVECTOR3(0f); brushTraceInfo.fFraction = 100f; - if (check) - { - Debug.LogError("AABBCollideWithBrush false = "); - } + hitPoint = Vector3.zero; return false; } @@ -1209,7 +1224,7 @@ namespace BrewMonster awmInfo.bMeetHeightThresh = true; float fHWater = 0f; - int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vFinalPos) + Vector3.up * 500f, Vector3.down, fHitsWater, 1000f, 1 << 8); + int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vFinalPos) + Vector3.up * 500f, Vector3.down, fHitsWater, maxDistance: 1000f, WaterMask); if (countHits0 > 0) { fHWater = fHitsWater[0].point.y; @@ -1321,7 +1336,7 @@ namespace BrewMonster {//rescue from solid //@note : it may cause some problems. By Kuiwu[11/10/2005] float fHWater = 0f; - int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vStart) + Vector3.up * 500f, Vector3.down, fHitsWater, 1000f, 1 << 8); + int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vStart) + Vector3.up * 500f, Vector3.down, fHitsWater, maxDistance: 1000f, WaterMask); if(countHits0 > 0) { fHWater = fHitsWater[0].point.y; @@ -1374,7 +1389,7 @@ namespace BrewMonster if (bAdjust && (vOverTp.y + awmInfo.fHeightThresh > vFinalPos.y)) { float fHWater = 0f; - int countHits = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vFinalPos), Vector3.down, fHitsWater, 1000f, 1 << 8); + int countHits = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vFinalPos), Vector3.down, fHitsWater, maxDistance: 1000f, WaterMask); if (countHits > 0) { fHWater = fHitsWater[0].point.y; diff --git a/Assets/Scripts/CECHostPlayer.World.cs b/Assets/Scripts/CECHostPlayer.World.cs index aef542090c..68ce17d8af 100644 --- a/Assets/Scripts/CECHostPlayer.World.cs +++ b/Assets/Scripts/CECHostPlayer.World.cs @@ -213,7 +213,7 @@ namespace BrewMonster // 注意:暂时跳过地形高度检查,因为它需要世界访问 A3DVECTOR3 vNormal = new A3DVECTOR3(); float vTerrainHeight = vPos.y; - if (Physics.RaycastNonAlloc(vPos, (Vector3.down), hits, 1000f, 1 << 6) > 0) + if (Physics.RaycastNonAlloc(vPos, (Vector3.down), hits, maxDistance: 1000f, EC_CDR.TerrainMask) > 0) { vTerrainHeight = hits[0].point.y; vNormal = EC_Utility.ToA3DVECTOR3(hits[0].normal); diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 9a296d95c5..932f7bf2f9 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -1390,9 +1390,9 @@ namespace BrewMonster m_CDRInfo.vExtent = m_aabbServer.Extents; Vector3 pStart = pos; pos.y += m_CDRInfo.vExtent.y; - if (Physics.RaycastNonAlloc(pos, Vector3.down, hits, m_CDRInfo.vExtent.y, 1 << 6) > 0) + if (Physics.RaycastNonAlloc(pos, Vector3.down, hits, m_CDRInfo.vExtent.y, EC_CDR.TerrainMask) > 0) { - System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); + //System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); m_CDRInfo.vTPNormal = EC_Utility.ToA3DVECTOR3(hits[0].normal); } else @@ -1799,14 +1799,14 @@ namespace BrewMonster float fTerrainHeight = 0f; if (Physics.RaycastNonAlloc(startPoint, dir, hits, layerGround) > 0) { - System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); + //System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); fTerrainHeight = Vector3.Distance(hits[0].point, startPoint); } float fWaterHeight = 0f; if (Physics.RaycastNonAlloc(startPoint, dir, hits, layerWater) > 0) { - System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); + //System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); fWaterHeight = Vector3.Distance(hits[0].point, startPoint); } @@ -2459,10 +2459,10 @@ namespace BrewMonster A3DVECTOR3 vPos = GetPos(); float h0 = 0f; - int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vPos) + Vector3.up * 500f, Vector3.down, hits, 1000f, 1 << 8); + int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vPos) + Vector3.up * 500f, Vector3.down, hits, maxDistance: 1000f, EC_CDR.WaterMask); if (countHits0 > 0) { - System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); + //System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); h0 = hits[0].point.y; } if (vPos.y < h0 - m_MoveConst.fShoreDepth) @@ -3184,7 +3184,7 @@ namespace BrewMonster VertRayTrace(EC_Utility.ToVector3(vTestPos), ref vGndPos, ref m_GndInfo.vGndNormal, 1000f); m_GndInfo.fGndHei = vGndPos.y; - if (Physics.RaycastNonAlloc(EC_Utility.ToVector3(vTestPos) + Vector3.up * 500f, Vector3.down, hits, 1000f, 1 << 8) > 0) + if (Physics.RaycastNonAlloc(EC_Utility.ToVector3(vTestPos) + Vector3.up * 500f, Vector3.down, hits, maxDistance: 1000f, EC_CDR.WaterMask) > 0) { System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); m_GndInfo.fWaterHei = hits[0].point.y; @@ -3286,9 +3286,10 @@ namespace BrewMonster LayerMask layerMaskTerrain = 1 << 6; LayerMask layerMaskBush = 1 << 7; - if (Physics.RaycastNonAlloc(vPos, (Vector3.down), hits, 1000f, layerMaskTerrain) > 0 /*&& hits[0].distance > 0.0009f*/) + + if (Physics.RaycastNonAlloc(vPos, (Vector3.down), hits, maxDistance: 1000f, layerMaskTerrain) > 0 /*&& hits[0].distance > 0.0009f*/) { - System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); + //System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer); vTerrainPos = hits[0].point; vTerrainNormal = hits[0].normal; }