Esempio n. 1
0
    public void UpdateConfigToXML()
    {
#if UNITY_EDITOR
        if (isDisabled)
        {
            return;
        }

        OnEnable();
        UpdatePoints();
        //每帧判断是否要保存编辑好的路径
        if (ePathType == ECameraPathType.Bezier)
        {
            if (pointParam.transform.position != posParam || pointBegin.transform.position != posBegin || pointEnd.transform.position != posEnd)
            {
                posParam = pointParam.transform.position;
                posBegin = pointBegin.transform.position;
                posEnd   = pointEnd.transform.position;

                //中间的标志点分别减去左右两边的标志点,计算出曲线的X Y 的点
                float y = (posParam.y - posBegin.y);
                float x = (posParam.x - posBegin.x);
                float z = (posParam.z - posBegin.z);

                //因为我们是通过3个点来确定贝塞尔曲线, 所以参数3 设置为0 即可。
                //这样参数1 表示起点 参数2表示中间点 参数3 忽略 参数4 表示结束点
                movePathBase = new PathBezier(posBegin, new Vector3(x, y, z), new Vector3(0f, 0f, 0f), posEnd);
                Utils.LogSys.Log("UpdateConfigToXML:" + pathName);

                //SavePathToXML();
                isNeedToSave = true;
            }
        }
        else if (ePathType == ECameraPathType.Straightline)
        {
        }
        else if (ePathType == ECameraPathType.Arcline)
        {
        }
        else if (ePathType == ECameraPathType.Circle)
        {
        }
        else if (ePathType == ECameraPathType.CylinderSpirals)
        {
            pointLookAt1.transform.position = posLookAt1;
            pointLookAt2.transform.position = posLookAt2;
            if (pointParam.transform.position != posParam || pointParam2.transform.position != posParam2 || pointBegin.transform.position != posBegin || Mathf.Abs(Distance - distance) >= 0.01f || Mathf.Abs(PerCircleDistance - perCircleDistance) >= 0.01f)
            {
                posParam          = pointParam.transform.position;
                posParam2         = pointParam2.transform.position;
                posBegin          = pointBegin.transform.position;
                posEnd            = pointEnd.transform.position;
                distance          = Distance;
                perCircleDistance = PerCircleDistance;
                posLookAt1        = posParam;
                posLookAt2        = posParam2;
                pointLookAt1.transform.position = posLookAt1;
                pointLookAt2.transform.position = posLookAt2;
                movePathBase = new PathCylinderSpirals(posBegin, posParam, posParam2, distance, perCircleDistance);
                //SavePathToXML();
                isNeedToSave = true;
            }
        }

        if (elookAtType == ELookAtType.LookAtPoint || elookAtType == ELookAtType.LookAtPointReverse)
        {
            //每帧判断是否要保存编辑好的路径
            Vector3 changeLookAt = posLookAt1 - pointLookAt1.transform.position;
            if (Mathf.Abs(changeLookAt.x) >= 0.01f || Mathf.Abs(changeLookAt.y) >= 0.01f || Mathf.Abs(changeLookAt.z) >= 0.01f)
            {
                posLookAt1 = pointLookAt1.transform.position;
                //SavePathToXML();
                isNeedToSave = true;
            }
        }
        else if (elookAtType == ELookAtType.LookAtLine || elookAtType == ELookAtType.LookAtLineReverse)
        {
            bool bNeedSave = false;
            //每帧判断是否要保存编辑好的路径
            Vector3 changeLookAt = posLookAt1 - pointLookAt1.transform.position;
            if (Mathf.Abs(changeLookAt.x) >= 0.01f || Mathf.Abs(changeLookAt.y) >= 0.01f || Mathf.Abs(changeLookAt.z) >= 0.01f)
            {
                bNeedSave  = true;
                posLookAt1 = pointLookAt1.transform.position;
            }
            changeLookAt = posLookAt2 - pointLookAt2.transform.position;
            if (Mathf.Abs(changeLookAt.x) >= 0.01f || Mathf.Abs(changeLookAt.y) >= 0.01f || Mathf.Abs(changeLookAt.z) >= 0.01f)
            {
                bNeedSave  = true;
                posLookAt2 = pointLookAt2.transform.position;
            }
            if (PosLookAtOffset != posLookAtOffset)
            {
                bNeedSave       = true;
                posLookAtOffset = PosLookAtOffset;
            }
            if (bNeedSave)
            {
                isNeedToSave = true;
            }
            //SavePathToXML();
        }
        else if (elookAtType == ELookAtType.LookAtTwoPoints)
        {
            Vector3 changeLookAt = posLookAt1 - pointLookAt1.transform.position;
            if (Mathf.Abs(changeLookAt.x) >= 0.01f || Mathf.Abs(changeLookAt.y) >= 0.01f || Mathf.Abs(changeLookAt.z) >= 0.01f)
            {
                posLookAt1 = pointLookAt1.transform.position;
                //SavePathToXML();
                isNeedToSave = true;
            }
            changeLookAt = posLookAt2 - pointLookAt2.transform.position;
            if (Mathf.Abs(changeLookAt.x) >= 0.01f || Mathf.Abs(changeLookAt.y) >= 0.01f || Mathf.Abs(changeLookAt.z) >= 0.01f)
            {
                posLookAt2 = pointLookAt2.transform.position;
                //SavePathToXML();
                isNeedToSave = true;
            }
        }

        //每帧判断是否要保存编辑好的路径
        if (ePathType_Editor != ePathType || elookAtType_Editor != elookAtType)
        {
            ePathType_Editor   = ePathType;
            elookAtType_Editor = elookAtType;
            isNeedToSave       = true;
            //SavePathToXML();
        }
#endif
    }
Esempio n. 2
0
    public void CreatePath(string name, PathConfig config, bool isStartFromCurPos = false)
    {
        pathName = name;
        UpdateEditPoints();
        int iType       = config.pathType;
        int iLookAtType = config.lookAtType;

        if (iType == 0)
        {
            ePathType = ECameraPathType.Straightline;
        }
        else if (iType == 1)
        {
            posParam = config.pointParam1;
            if (isStartFromCurPos)
            {
                posBegin = gameObject.transform.position;
            }
            else
            {
                posBegin = config.pointBegin;
            }
            posEnd       = config.pointEnd;
            movePathBase = new PathBezier(posBegin, posParam - posBegin, new Vector3(0f, 0f, 0f), posEnd);
            posLookAt1   = config.pointLookAt1;
            posLookAt2   = config.pointLookAt2;
            ePathType    = ECameraPathType.Bezier;
//            Utils.LogSys.Log("CreatePath:" + name);
            //Utils.LogSys.Log("CreatePath posBegin:" + posBegin.ToString() + "posEnd:" + posEnd.ToString());
        }
        else if (iType == 2)
        {
            ePathType = ECameraPathType.Arcline;
        }
        else if (iType == 3)
        {
            ePathType = ECameraPathType.Circle;
        }
        else if (iType == 4)
        {
            posParam  = config.pointParam1;
            posParam2 = config.pointParam2;
            if (isStartFromCurPos)
            {
                posBegin = gameObject.transform.position;
            }
            else
            {
                posBegin = config.pointBegin;
            }

            distance          = config.distance;          //轴方向前进距离(非0)
            perCircleDistance = config.perCircleDistance; //每圈前进的距离(非0)
            posLookAtOffset   = config.pointLookAtOffset; //对所看的目标点做最终偏移
            if (Mathf.Abs(distance) > 0.01f)
            {
                Distance = distance;
            }
            if (Mathf.Abs(perCircleDistance) > 0.01f)
            {
                PerCircleDistance = perCircleDistance;
            }
            PosLookAtOffset = posLookAtOffset;
            movePathBase    = new PathCylinderSpirals(posBegin, posParam, posParam2, Distance, PerCircleDistance);
//            Utils.LogSys.Log("CreatePath:" + name);
            ePathType = ECameraPathType.CylinderSpirals;
        }

        if (iLookAtType == 0)
        {
        }
        else if (iLookAtType == 1)
        {
            posLookAt1  = config.pointLookAt1;
            elookAtType = ELookAtType.LookAtPoint;
        }
        else if (iLookAtType == 2)
        {
            posLookAt1  = config.pointLookAt1;
            posLookAt2  = config.pointLookAt2;
            elookAtType = ELookAtType.LookAtLine;
        }
        else if (iLookAtType == 3)
        {
            posLookAt1  = config.pointLookAt1;
            elookAtType = ELookAtType.LookAtPointReverse;
        }
        else if (iLookAtType == 4)
        {
            posLookAt1  = config.pointLookAt1;
            posLookAt2  = config.pointLookAt2;
            elookAtType = ELookAtType.LookAtLineReverse;
        }
        else if (iLookAtType == 5)
        {
            posLookAt1  = config.pointLookAt1;
            posLookAt2  = config.pointLookAt2;
            elookAtType = ELookAtType.LookAtTwoPoints;
        }

        ePathType_Editor   = ePathType;
        elookAtType_Editor = elookAtType;
        UpdatePoints(true);
    }