示例#1
0
    public List <TrajectoryPoint> GetTrajectory(Vector2 ballPosition, Vector2 force)
    {
        CustomPhysic           customPhysic     = CustomPhysic.getInstance();
        List <TrajectoryPoint> trajectoryPoints = new List <TrajectoryPoint>();

        TrajectoryPoint currentTrajectoryPoint = new TrajectoryPoint(ballPosition, force);

        trajectoryPoints.Add(currentTrajectoryPoint);

        for (int i = 0; i < maxSteps; i++)
        {
            currentTrajectoryPoint = customPhysic.GetNextTrajectoryPoint(currentTrajectoryPoint.Point, currentTrajectoryPoint.Velocity);
            trajectoryPoints.Add(currentTrajectoryPoint);
        }

        return(trajectoryPoints);
    }
示例#2
0
    public void DrawTrajectory(LineRenderer lineRenderer, List <TrajectoryPoint> points, float angleSpread)
    {
        lineRenderer.positionCount   = points.Count;
        lineRenderer.widthMultiplier = 0.5f;

        for (int i = 0; i < points.Count; i++)
        {
            TrajectoryPoint point = points[i];
            lineRenderer.SetPosition(i, point.Point);
        }

        if (angleSpread > 0 && points.Count > 0)
        {
            Vector2 supVector = Quaternion.Euler(0, 0, angleSpread) *
                                (Vector2.up * Vector2.Distance(points[0].Point, points[1].Point));

            lineRenderer.widthMultiplier = 1f;
            lineRenderer.widthCurve      = AnimationCurve.Linear(0f, lineRenderer.widthMultiplier * 0f,
                                                                 1f, lineRenderer.widthMultiplier * Mathf.Abs(supVector.x) / CustomPhysic.getInstance().Timestep);
        }
        else
        {
            lineRenderer.widthCurve = AnimationCurve.Constant(0f, 1f, lineRenderer.widthMultiplier * .5f);
        }
    }
示例#3
0
 private void Awake()
 {
     _customPhysic = CustomPhysic.getInstance();
 }