Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Create splines at runtime: correct initialization
#1
Hi, I want to create splines at runtime with the follow code:

Code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FluffyUnderware.Curvy;
using FluffyUnderware.Curvy.Controllers;

public class SplineCreatorTest : MonoBehaviour{
   private bool keyUp = true;
   void Update(){
       if (Input.GetKey(KeyCode.M) & keyUp){
           keyUp = false;
           gameObject.AddComponent<CurvySpline>();
           gameObject.GetComponent<CurvySpline>().Interpolation = CurvyInterpolation.Bezier;
           List<GameObject> goList = new List<GameObject>();
           for (int i = 0; i < 7; i++){
               goList.Add(new GameObject("CP000" + i.ToString()));
               goList[i].transform.SetParent(this.transform);
               goList[i].gameObject.AddComponent<CurvySplineSegment>();
           }
           goList[0].transform.localPosition = new Vector3(0.0f,0.0f,0.0f);
           goList[1].transform.localPosition = new Vector3(0.0f, 0.0f, 156.0f);
           goList[2].transform.localPosition = new Vector3(100.0f, 0.0f, 256.0f);
           goList[3].transform.localPosition = new Vector3(200.0f, 0.0f, 156.0f);
           goList[4].transform.localPosition = new Vector3(100.0f, 0.0f, 56.0f);
           goList[5].transform.localPosition = new Vector3(0.0f, 0.0f, 156.0f);
           goList[6].transform.localPosition = new Vector3(0.0f, 0.0f, 256.0f);
           
           goList[1].gameObject.transform.GetComponent<CurvySplineSegment>().AutoHandles = false;
           //NullReferenceException: Object reference not set to an instance of an object
           //SplineCreatorTest.Update()(at Assets / SplineCreatorTest.cs:31)
           goList[1].GetComponent<CurvySplineSegment>().HandleIn = new Vector3(0.014761f, 0.0f, -54.69138f);
           goList[1].GetComponent<CurvySplineSegment>().HandleOut = new Vector3(-0.014761f, 0.0f, 54.69138f);
           
           goList[5].gameObject.transform.GetComponent<CurvySplineSegment>().AutoHandles = false;
           goList[5].GetComponent<CurvySplineSegment>().HandleIn = new Vector3(0.62f, 0.0f, -57.872f);
           goList[5].GetComponent<CurvySplineSegment>().HandleOut = new Vector3(-0.62f, 0.0f, 57.872f);
       }
       if (Input.GetKeyUp(KeyCode.M)) { keyUp = true; }
   }
}

But I receiving this error when "AutoHandles = false" runs:
Code:
NullReferenceException: Object reference not set to an instance of an object SplineCreatorTest.Update()(at Assets / SplineCreatorTest.cs:31)

But on the properties "AutoHandles" already is off.
If I wait next update and trying:
Code:
           goList[1].gameObject.transform.GetComponent<CurvySplineSegment>().AutoHandles = false;
           goList[1].GetComponent<CurvySplineSegment>().HandleIn = new Vector3(0.014761f, 0.0f, -54.69138f);
           goList[1].GetComponent<CurvySplineSegment>().HandleOut = new Vector3(-0.014761f, 0.0f, 54.69138f);
           
           goList[5].gameObject.transform.GetComponent<CurvySplineSegment>().AutoHandles = false;
           goList[5].GetComponent<CurvySplineSegment>().HandleIn = new Vector3(0.62f, 0.0f, -57.872f);
           goList[5].GetComponent<CurvySplineSegment>().HandleOut = new Vector3(-0.62f, 0.0f, 57.872f);
the scripts runs whitout erros.
Probably I'm missing something to correct initialization. What I need to do?
Reply
#2
Hi,
The correct way to add control points to a spline is by using the methods from the CurvySpline class, such as Add, InserrBefore, etc...
Is my answer clear?
Have a nice day
Please consider leaving a review for Curvy. This will help a lot keeping Curvy relevant in the eyes of the Asset Store algorithm.
Reply
#3
(10-29-2019, 03:16 PM)_Aka_ Wrote: Hi,
The correct way to add control points to a spline is by using the methods from the CurvySpline class, such as Add, InserrBefore, etc...
Is my answer clear?
Have a nice day
Thanks, solved my problem.

Code:
gameObject.AddComponent<CurvySpline>();
CurvySpline c = gameObject.GetComponent<CurvySpline>();
c.Interpolation = CurvyInterpolation.Bezier;
c.Add(new Vector3(0.0f,0.0f,0.0f));
c.Add(new Vector3(0.0f, 0.0f, 156.0f));
c.Add(new Vector3(100.0f, 0.0f, 256.0f));
c.Add(new Vector3(200.0f, 0.0f, 156.0f));
c.Add(new Vector3(100.0f, 0.0f, 56.0f));
c.Add(new Vector3(0.0f, 0.0f, 156.0f));
c.Add(new Vector3(0.0f, 0.0f, 256.0f));

c[1].AutoHandles = false;
c[1].HandleIn = new Vector3(0.014761f, 0.0f, -54.69138f);
c[1].HandleOut = new Vector3(-0.014761f, 0.0f, 54.69138f);

c[5].AutoHandles = false;
c[5].HandleIn = new Vector3(0.62f, 0.0f, -57.872f);
c[5].HandleOut = new Vector3(-0.62f, 0.0f, 57.872f);
Reply
#4
You are welcome
Please consider leaving a review for Curvy. This will help a lot keeping Curvy relevant in the eyes of the Asset Store algorithm.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Possible to jump from platform to platform with Curvy splines? yun844 1 5 01-04-2022, 11:47 AM
Last Post: _Aka_
Question How to tell if a spline is straight? / Optimize problems with straight splines MarioBag 3 10 12-27-2021, 05:25 PM
Last Post: _Aka_
Information 50% discount on Curvy Splines _Aka_ 0 6 12-15-2021, 11:19 AM
Last Post: _Aka_
  Is Curvy splines appropriate to build city streets? atantoine 3 248 11-17-2021, 12:03 PM
Last Post: _Aka_

Forum Jump: