- Home /
This question was
closed Mar 28, 2021 at 05:16 PM by
bellwether for the following reason:
Other
Question by
bellwether · Mar 23, 2021 at 07:12 PM ·
raycasthitsplinerail
how to continue spline?
I've created a simple script that can go from A to B. But now I'm trying to have the ability to jump in the middle of a spline and continue to point B. I think my math is just wrong, but I really don't know. at one point I tried to set the parameter(progress).
private void Update()
{
WalkLine();
RaycastHit hit;
Vector3 fwd = transform.TransformDirection(Vector3.down) * .5f;
if (Physics.Raycast(transform.position, fwd, out hit, .5f) && hit.transform.tag == "Line" && railSet == false)
{
line = hit.collider.GetComponent<Line>();
position = this.transform.position;
railSet = true;
Debug.DrawRay(transform.position, fwd, Color.red);
}
else
{
Debug.DrawRay(transform.position, fwd, Color.cyan);
}
print("position: " + position);
}
private void WalkLine()
{
if (railSet == true)
{
progress = GetTouchedPoint(position);
transform.localPosition = line.GetPoint(progress);
if (progress == 1 || cube.isGrounded == false)
{
line = null;
railSet = false;
}
}
}
//this should be the point intersected by the ray and the collider
public float GetTouchedPoint(Vector3 p)
{
Vector3 M = line.points[1] - line.points[0];
print(M+ " * ( " + p + " - " + line.points[0] + ") / (" + M + " * " + M+") == "+ Mathf.Abs(Vector3.Dot(M, p - line.points[0]) /
Vector3.Dot(M, M)));
return
Mathf.Abs(Vector3.Dot(M, p - line.points[0]) /
Vector3.Dot(M, M));
}
Comment
Follow this Question
Related Questions
Moving a GameObject along a Custom (Curved) Spline 3 Answers
How to generate railings (roller coaster track) along the created spline? 0 Answers
Spline-based rail grinding 2 Answers
Keep object on rail? 1 Answer
using a textured plane as a cursor, problem successfully rotating relative to RayHit.normal 1 Answer