iuliia Posted March 22, 2025 Posted March 22, 2025 Я хочу сделать движение объекта по сплайну, созданному в едиторе. Сейчас у меня есть код, который работает, но только с SplineGraph, созданного с помощью кода. Но я хочу не писать сплайн вручную, а брать тот, что создан в едиторе. Сейчас я пытаюсь получить его точки, но выдает ошибку, что коллекция только для чтения. public SplinePoint[] points; ... totalPoints = splineGraph.NumSplinePoints; points = new SplinePoint[totalPoints]; splineGraph.GetSplinePoints(points);
yurickon Posted March 23, 2025 Posted March 23, 2025 Создаёшь сплайн и сохраняешь его где-то в data На дочернюю ноду-пустышку как показано на скрине... ...кидаешь скрипт rat_spline : using Unigine; [Component(PropertyGuid = "здесь что-то твоё")] public class rat_spline : Component { public float Speed; public SplineGraph Spline; public string Path_spline; vec3 _trans_start; float time; void Init() { Spline = new SplineGraph(); Spline.Load(Path_spline); _trans_start = new vec3(node.WorldPosition.x, node.WorldPosition.y, node.WorldPosition.z); } void Move_rat() { time += Game.IFps * Speed; float t = time - MathLib.Floor(time / Spline.NumSegments) * Spline.NumSegments;// int segment_id = (int)t; t -= (float)segment_id; vec3 p = new vec3(Spline.CalcSegmentPoint(segment_id, t)); vec3 direction = Spline.CalcSegmentTangent(segment_id, t); vec3 up = Spline.CalcSegmentUpVector(segment_id, t); node.WorldPosition = p + _trans_start; node.SetWorldDirection(direction, up); } void Update() { Move_rat(); } } //-------------------------------------------------------------- В редакторе прописываешь скорость и путь к сплайну в папке data, как показано на примере К пустышке дочкой кидаешь свою ноду которую хочешь двигать по сплайну. Это я пример привёл как крысы и другая живность перемещаются в моей игре. Успехов! 2
Recommended Posts