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