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); }
static void ResetTargePos(Character cha, ChildObject childObject, SkillContext context, excel_skill_event e) { SkillSelectCharactorType selType = (SkillSelectCharactorType)e.evnetParam1; Character selTarget = context.SelectCharactorByType(selType); if (selTarget == null) { return; } float fAngle = (float)e.evnetParam2; if (e.evnetParam3 > 0) { float fAngleR = (float)e.evnetParam3 * 2.0f; float fPct = UnityEngine.Random.Range(0.0f, 1.0f); fAngle += fPct * fAngleR - fAngleR; } Quaternion q = Quaternion.AngleAxis(fAngle, Vector3.up); Vector3 dir = selTarget.Direction; if (e.evnetParam4 > 0 && context.mOwner != selTarget) { dir = selTarget.Position - context.mOwner.Position; dir.y = 0.0f; dir.Normalize(); } dir = q * dir; float dist = (float)e.evnetParam5 * 0.001f; Vector3 targetPos = selTarget.Position + dir * dist; TargetPosTestType testType = (TargetPosTestType)e.evnetParam6; switch (testType) { case TargetPosTestType.None: break; case TargetPosTestType.LineTest: { uint layer = NavigationSystem.GetLayer(context.mOwner.Position); if (NavigationSystem.LineCast(context.mOwner.Position, targetPos, layer, out targetPos)) { break; } break; } case TargetPosTestType.TargetInNav: { if (!NavigationSystem.IsInNavigation(targetPos)) { targetPos = selTarget.Position; } break; } } context.TargetPos = targetPos; }
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 void SearchMove(Vector3 pos, float destRadius = 0.3f, bool sync = true) { if (mNavLayer == 0) { mNavLayer = NavigationSystem.GetLayer(pos); if (mNavLayer == 0) { return; } } Vector3[] path; if (!NavigationSystem.Nav_CalcLayerPath(Position, pos, mNavLayer, out path)) { return; } mPath = path; mCurrentNodeIndex = 0; Speed = 0.0f; mDestRadius = destRadius; }
void InitPos(Transform parentObj) { ChildObjectMoveType mt = (ChildObjectMoveType)mData.moveType; switch (mt) { case ChildObjectMoveType.Bind: { transform.parent = mContext.mOwner.transform; break; } case ChildObjectMoveType.BindPos: { if (mTarget != null) { transform.parent = mTarget.transform; } break; } } ChildObjectInitPosType posType = (ChildObjectInitPosType)mData.initPos; switch (posType) { case ChildObjectInitPosType.Src: { mParentObj = mContext.mOwner.transform; Position = mParentObj.position; break; } case ChildObjectInitPosType.SrcHinge: { Character cha = mContext.mOwner; string hingeName = mData.initHinge; mParentObj = cha.transform; Position = mParentObj.position; break; } case ChildObjectInitPosType.Target: { if (mTarget == null) { mParentObj = mContext.mOwner.transform; } else { mParentObj = mTarget.transform; } Position = mParentObj.position; break; } case ChildObjectInitPosType.TargetHinge: { if (mTarget == null) { mParentObj = mContext.mOwner.transform; } else { string hingeName = mData.initHinge; mParentObj = mTarget.transform; } Position = mParentObj.position; break; } case ChildObjectInitPosType.TargetPos: { Position = mContext.TargetPos; break; } case ChildObjectInitPosType.CurSkillObject: { Position = parentObj.position; break; } } mNavLayer = NavigationSystem.GetLayer(Position); }