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 }
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); }