public Character Refresh(excel_refresh refreshExcel, Scene scn) { int index = Mathf.RandRange(0, refreshExcel.birthpoint.Length - 1); string birthPointName = refreshExcel.birthpoint[index]; MarkPoint markPoint = GetMarkPoint(scn.ScnID, birthPointName); if (markPoint == null) { return(null); } Vector3 targetPos = markPoint.position; Vector3 dir = new Vector3(Mathf.RandRange(-1.0f, 1.0f), 0.0f, Mathf.RandRange(-1.0f, 1.0f)); dir.Normalize(); float dist = Mathf.RandRange(0.0f, 1.0f) * refreshExcel.refreshDist; targetPos += (dist * dir); Vector3 hitPos = Vector3.zero; uint layer = NavigationSystem.GetLayer(markPoint.position); if (NavigationSystem.LineCast(markPoint.position, targetPos, layer, out hitPos)) { targetPos = hitPos; } float h = 0.0f; if (NavigationSystem.GetLayerHeight(targetPos, layer, out h)) { targetPos.y = h; } NPC npc = new NPC(); return(npc); }
public void UpdateMesh() { if (mMeshFilter == null) { return; } if (mMeshFilter.mesh == null) { return; } Vector3[] vs = new Vector3[mMeshFilter.mesh.vertexCount]; for (int i = 0; i < mMeshFilter.mesh.vertexCount; ++i) { Vector3 v = mMeshFilter.mesh.vertices[i]; v = transform.localToWorldMatrix.MultiplyPoint(v); float h = 0.0f; if (!NavigationSystem.GetLayerHeight(v, mNavLayer, out h)) { // mNavSys.GetLayer(v, out mNavLayer); h = transform.position.y; } v.y = h; v.y += offsetY; v = transform.worldToLocalMatrix.MultiplyPoint(v); vs[i] = v; } mMeshFilter.mesh.vertices = vs; }
protected void UpdateMove() { if (mPosDirty) { UpdateVisibleInfo(); mPosDirty = false; } if (!IsCannotFlag(CannotFlag.CannotMove) && Speed > 0.0f) { Position += mSpeed * Time.DeltaTime * Direction; float h; if (NavigationSystem.GetLayerHeight(Position, mNavLayer, out h)) { Vector3 pos = Position; pos.y = h; Position = pos; } else { mNavLayer = NavigationSystem.GetLayer(Position); } } UpdateSearchMove(); }
public override bool LogicTick() { if (mMoveData == null) { return(false); } float time = Time.realtimeSinceStartup - mStartTime; if (mMoveData.mMoveDataType == SkillMoveDataType.MoveType1) { SkillMoveData1 moveData = mMoveData as SkillMoveData1; float t = time / moveData.mTime; Vector3 dir = moveData.mDestPos - moveData.mSrcPos; Vector3 curPos = moveData.mSrcPos + dir * t; Vector3 curDir = dir.normalized; mOwner.Position = curPos; mOwner.Direction = curDir; if (time >= moveData.mTime) { return(false); } } if (mMoveData.mMoveDataType == SkillMoveDataType.MoveType2) { SkillMoveData2 moveData = mMoveData as SkillMoveData2; Vector3 curPos = moveData.mSrcPos + moveData.mTime * moveData.mSpeed * moveData.mDir; mOwner.Position = curPos; mOwner.Direction = moveData.mDir; if (time >= moveData.mTime) { return(false); } } Vector3 pos = mOwner.Position; pos.y += 10.0f; float h = 0.0f; if (NavigationSystem.GetLayerHeight(pos, mOwner.NavLayer, out h)) { pos.y = h; mOwner.Position = pos; } return(true); }
public override void Exit() { if (mMoveData.mMoveDataType == SkillMoveDataType.MoveType1) { SkillMoveData1 moveData = mMoveData as SkillMoveData1; mOwner.Position = moveData.mDestPos; } Vector3 pos = mOwner.Position; pos.y += 10.0f; float h = 0.0f; if (NavigationSystem.GetLayerHeight(pos, mOwner.NavLayer, out h)) { pos.y = h; mOwner.Position = pos; } }
protected void UpdateMove() { if (SyncMove == null) { return; } SyncMove.LogicTick(); if (mDirectionChg) { transform.forward = mDirection; mDirectionChg = false; } if (!IsCannotFlag(CannotFlag.CannotMove) && MoveSpeed > 0.0f) { Vector3 deltaPos = mSpeed * Time.fixedDeltaTime * mDirection; deltaPos.y = 0.0f; mLogicPosition += deltaPos; Vector3 edgePoint0, edgePoint1; Vector3 hitPoint; if (NavigationSystem.LineCastEdge(transform.position, mLogicPosition, NavLayer, out hitPoint, out edgePoint0, out edgePoint1)) { Vector3 dir0 = edgePoint1 - edgePoint0; dir0.y = 0.0f; dir0.Normalize(); Vector3 dir1 = -dir0; Vector3 dir3 = transform.forward; dir3.Normalize(); float cos0 = Vector3.Dot(dir0, dir3); float cos1 = Vector3.Dot(dir1, dir3); if (cos0 > cos1) { mLogicPosition.x = transform.position.x + Time.fixedDeltaTime * MoveSpeed * 0.5f * dir0.x; mLogicPosition.z = transform.position.z + Time.fixedDeltaTime * MoveSpeed * 0.5f * dir0.z; } else { mLogicPosition.x = transform.position.x + Time.fixedDeltaTime * MoveSpeed * 0.5f * dir1.x; mLogicPosition.z = transform.position.z + Time.fixedDeltaTime * MoveSpeed * 0.5f * dir1.z; } if (!NavigationSystem.LineTest(transform.position, mLogicPosition, NavLayer)) { float height; if (NavigationSystem.GetLayerHeight(mLogicPosition, NavLayer, out height)) { mLogicPosition.y = height; } transform.position = mLogicPosition; } } else { float height; if (NavigationSystem.GetLayerHeight(mLogicPosition, NavLayer, out height)) { mLogicPosition.y = height; } transform.position = mLogicPosition; } mLogicPosition = transform.position; // transform.position = mLogicPosition; } UpdateSearchMove(); }
void LateUpdate() { if (mArriveTargetPos) { return; } Vector3 targetPos = mContext.mOwner.Position; bool onLand = false; bool onParabola = false; ChildObjectMoveType mt = (ChildObjectMoveType)mData.moveType; switch (mt) { case ChildObjectMoveType.FlyToTarget: { if (mTarget != null) { targetPos = mTarget.Position; } break; } case ChildObjectMoveType.FlyToTargetPos: { targetPos = mContext.TargetPos; break; } case ChildObjectMoveType.FlyToTarget_OnLand: { if (mTarget != null) { targetPos = mTarget.Position; } onLand = true; break; } case ChildObjectMoveType.FlyToTargetPos_OnLand: { targetPos = mContext.TargetPos; onLand = true; break; } case ChildObjectMoveType.None: { return; } case ChildObjectMoveType.Bind: case ChildObjectMoveType.BindPos: { FollowInitPos(mt); return; } } Vector3 dir = targetPos - Position; if (dir.Length() <= size) { mArriveTargetPos = true; DoEvent(SkillEventTriggerType.Frame, mTick); DoLoopEvent(); return; } dir.Normalize(); if (onParabola) { float t = Time.DeltaTime; dir = Vector3.Lerp(Direction, dir, 5 * t); dir.Normalize(); } Direction = dir; Position += (dir * (float)mData.speed * 0.001f * Time.DeltaTime); Vector3 curDir = targetPos - Position; curDir.Normalize(); if (Vector3.Angle(curDir, dir) > 90.0f) { mArriveTargetPos = true; DoEvent(SkillEventTriggerType.Frame, mTick); DoLoopEvent(); return; } if (onLand) { float height = Position.y; if (NavigationSystem.GetLayerHeight(Position, mNavLayer, out height)) { Vector3 pos = Position; pos.y = height + ((float)mData.yOffset * 0.001f); Position = pos; } } }
public void BuildMesh() { if (mMeshFilter == null) { return; } if (mMeshRenderer == null) { return; } mMeshRenderer.material = material; if (material == null) { mMeshFilter.mesh = null; return; } verts.Clear(); uvs.Clear(); indices.Clear(); { int pointCountX = mSegCountX + 1; int pointCountZ = mSegCountZ + 1; Vector3 size = transform.lossyScale; Vector3 min = -size * 0.5f; Vector3 max = size * 0.5f; min.y = 0.0f; max.y = 0.0f; min.x -= areaSizeOffset.x; max.x += areaSizeOffset.x; min.z -= areaSizeOffset.y; max.z += areaSizeOffset.y; size = (max - min); float lenX = size.x; float lenZ = size.z; float cellX = lenX / mSegCountX; float cellZ = lenZ / mSegCountZ; Vector3 ux = new Vector3(transform.right.x, 0.0f, transform.right.z); ux.Normalize(); Vector3 uz = new Vector3(transform.forward.x, 0.0f, transform.forward.z); uz.Normalize(); Vector3 upos = transform.position; for (int i = 0; i < pointCountZ; ++i) { for (int j = 0; j < pointCountX; ++j) { Vector3 vx = cellX * (float)j * ux; Vector3 vy = cellZ * (float)i * uz; Vector3 u = vx + vy; u += upos; u -= (lenX * 0.5f * ux + lenZ * 0.5f * uz); Vector3 vert = new Vector3(u.x, transform.position.y, u.z); Vector2 uv = new Vector2((float)j / mSegCountX, (float)i / mSegCountZ); float h = 0.0f; if (!NavigationSystem.GetLayerHeight(vert, mNavLayer, out h)) { //mNavLayer = NavigationSystem.GetLayer(vert); h = transform.position.y; } vert.y = h + offsetY;// - transform.position.y; vert = transform.worldToLocalMatrix.MultiplyPoint(vert); verts.Add(vert); uvs.Add(uv); } } for (int i = 0; i < mSegCountZ; ++i) { for (int j = 0; j < mSegCountX; ++j) { int ptCount = (int)pointCountX; indices.Add((i + 1) * ptCount + j); indices.Add((i + 1) * ptCount + (j + 1)); indices.Add(i * ptCount + j); indices.Add(i * ptCount + (j + 1)); indices.Add(i * ptCount + j); indices.Add((i + 1) * ptCount + (j + 1)); } } } Mesh mesh = null; if (mMeshFilter.mesh != null) { mesh = mMeshFilter.mesh; } else { mesh = new Mesh(); } mesh.vertices = verts.ToArray(); mesh.uv = uvs.ToArray(); mesh.triangles = indices.ToArray(); verts.Clear(); uvs.Clear(); indices.Clear(); if (mesh != null) { mesh.name = "NavMeshDecal"; } mMeshFilter.mesh = mesh; }