// 快速转向并释放技能aa public void QuickSkill(Vector2 v, int iSkillID) { if (mMainCamera == null) { return; } Ray ray = mMainCamera.ScreenPointToRay(v); sdActorInterface monster = PickupMonster(ray); if (monster == null) { Vector3 terrainPosition = new Vector3(); if (FingerGesturesInitializer.NavMesh_RayCast(ray, ref terrainPosition, 100000.0f)) { Vector3 charPosition = GetPosition(); Vector3 nextDirection = terrainPosition - charPosition; MoveDir(nextDirection); fStopTime = 0.3f; } } else { Vector3 monsterPosition = monster.transform.position; Vector3 charPosition = GetPosition(); Vector3 nextDirection = monsterPosition - charPosition; MoveDir(nextDirection); fStopTime = 0.3f; } CastSkill(iSkillID); }
public static bool NavMesh_RayCast(Vector3 kPos, ref Vector3 hitPoint) { Vector3 kDirection = new Vector3(0.0f, -1.0f, 0.0f); Ray kRay = new Ray(kPos, kDirection); bool bHasNavMesh = FingerGesturesInitializer.NavMesh_RayCast(kRay, ref hitPoint, 10.0f); return(bHasNavMesh); }
// 选择宠物出生点(选择出存在NavMesh但是不跟Monster存在碰撞的位置)aa public static bool BornPosition(Vector3 kPos, float fRadius, ref Vector3 kBornPos) { for (int iCount = 0; iCount < 16; ++iCount) { float fRandom = UnityEngine.Random.Range(0.0f, 1.0f); float fBiasX = Mathf.Sin(fRandom * 2.0f * Mathf.PI) * fRadius; float fBiasZ = Mathf.Cos(fRandom * 2.0f * Mathf.PI) * fRadius; Vector3 kOrigin = kPos; kOrigin.y += 2.0f; kOrigin.x += fBiasX; kOrigin.z += fBiasZ; Vector3 kDirection = new Vector3(0.0f, -1.0f, 0.0f); Ray kRay = new Ray(kOrigin, kDirection); bool bHasNavMesh = FingerGesturesInitializer.NavMesh_RayCast(kRay, ref kBornPos, 10.0f); if (!bHasNavMesh) { continue; } else { if (Mathf.Abs(kBornPos.y - kPos.y) > 0.5f) { continue; } kRay = new Ray(kPos, kBornPos - kPos); RaycastHit hit; if (Physics.Raycast(kRay, out hit)) { float distance = (kBornPos - kPos).magnitude; float hitdistance = (hit.point - kPos).magnitude; if (distance > hitdistance) { continue; } else { return(true); } } else { return(true); } } } kBornPos = kPos; //< 选择主角位置aa return(false); }
// public void OnFingerUp(Vector2 v) { if (!mEnable) { return; } if (mMainCamera == null) { return; } Ray ray = mMainCamera.ScreenPointToRay(v); sdActorInterface monster = PickupMonster(ray); if (monster == null) { Vector3 point = new Vector3(); if (FingerGesturesInitializer.NavMesh_RayCast(ray, ref point, 100000.0f)) { Vector3 vNewPoint = point + new Vector3(0, 1, 0); Ray newRay = new Ray(vNewPoint, new Vector3(0, -1, 0)); RaycastHit hit; if (Physics.Raycast(newRay, out hit)) { mPlayerAutoState.SetPoint(hit.point, this); ShowMoveTarget(hit.point); } else { mPlayerAutoState.SetPoint(point, this); ShowMoveTarget(point); } } else { HideMoveTarget(); } } else { mPlayerAutoState.SetTarget(monster, this); } }