void FollowInitPos(ChildObjectMoveType moveType) { if (mParentObj != null) { Position = mParentObj.position; if (moveType == ChildObjectMoveType.Bind) { transform.forward = mParentObj.forward; } } }
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); }
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; } } }