Unity实现圆柱螺旋曲线运动方程
定义:圆柱螺旋线的正面投影是正弦曲线,水平投影是圆。
运动方程(可推导):
实现:
代码:
using UnityEngine;
using System.Collections;public class Ball : MonoBehaviour
{[Header("运动速度")]public float Speed;[Header("圆柱半径")]public float Radius;[Header("螺距")]public float Height;private void Update(){float x = Radius * Mathf.Cos(Speed * Time.time);float y = Radius * Mathf.Sin(Speed * Time.time);float z = Height * Speed * Time.time;transform.position = new Vector3(x, y, z);}
}
画线代码:
using UnityEngine;
using System.Collections;public class DrawLine : MonoBehaviour
{[Header("圆柱半径")]public float Radius; [Header("螺距")]public float PitchPerRadian; [Header("圈数")]public int Turns = 5;[Header("每圈绘制点数")]public int PointsPerTurn = 100;private LineRenderer lr;void Awake(){lr = GetComponent<LineRenderer>();if (lr == null) lr = gameObject.AddComponent<LineRenderer>();}void Start(){DrawHelix();}public void DrawHelix(){int totalPoints = Mathf.Max(2, Turns * PointsPerTurn + 1);lr.positionCount = totalPoints;int idx = 0;float maxT = Turns * Mathf.PI * 2f;for (int i = 0; i < totalPoints; i++){float t = (float)i / (totalPoints - 1) * maxT;float x = Radius * Mathf.Cos(t);float y = Radius * Mathf.Sin(t);float z = PitchPerRadian * t;lr.SetPosition(idx++, new Vector3(x, y, z));}}
}