distance between generated skidmark meshes and wheel colliders
distance becomes bigger with more velocity this is the code
#pragma strict
private var curFriction : float;
var skidAt : float = 0.6;
var smoke : GameObject;
var skidMarkWidth : float = 0.2;
var material : Material;
var susprot : float;
private var isSkidding : int;
private var fisSkidding : int;
private var visSkidding : int;
private var fvisSkidding : int;
private var lastpos : Vector3[] = new Vector3[2];
private var flastpos : Vector3[] = new Vector3[2];
private var vlastpos : Vector3[] = new Vector3[2];
private var fvlastpos : Vector3[] = new Vector3[2];
var goStart : Transform;
var goEnd : Transform;
var suspension : Transform;
var factor : float = 1.0;
function Start () {
SetPos(goStart.position, goEnd.position);
}
function Update () {
SetPos(goStart.position, goEnd.position);
var hit : WheelHit;
var rpm : float = gameObject.GetComponent (WheelCollider).rpm;
gameObject.GetComponent (WheelCollider).GetGroundHit (hit);
curFriction = Mathf.Abs (hit.sidewaysSlip);
if (curFriction >= skidAt) {
smoke.GetComponent.<ParticleSystem>().Play();
if (curFriction < 1) {
SkidMarkEffect ();
fSkidMarkEffect ();
visSkidding = 0;
fvisSkidding = 0;
}
if (curFriction >= 1) {
vSkidMarkEffect ();
fvSkidMarkEffect ();
isSkidding = 0;
fisSkidding = 0;
}
}
else {
if (curFriction < skidAt){
smoke.GetComponent.<ParticleSystem>().Stop();
isSkidding = 0;
fisSkidding = 0;
visSkidding = 0;
fvisSkidding = 0;
}
}
}
function SetPos(start : Vector3, end : Vector3) {
var dir = end - start;
var mid = (dir) / 2.0 + start;
suspension.transform.position.y = mid.y;
suspension.transform.localRotation.eulerAngles.x = susprot;
suspension.transform.localRotation.eulerAngles.y = 0;
suspension.transform.localRotation.eulerAngles.z = 0;
suspension.transform.localScale.z = dir.magnitude * factor;
}
function SkidMarkEffect () {
var hit : WheelHit;
var skidMark : GameObject = new GameObject ("Skid Mark");
var skidMarkMesh : Mesh = new Mesh ();
var skidMarkMeshVertices : Vector3[] = new Vector3[4];
var skidMarkMeshTriangles : int[] = new int[6];
gameObject.GetComponent (WheelCollider).GetGroundHit (hit);
skidMark.AddComponent (MeshFilter);
skidMark.AddComponent (MeshRenderer);
skidMarkMesh.name = "Skid Mark Mesh";
if (isSkidding == 0) {
skidMarkMeshVertices[0] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( skidMarkWidth, 0.01, 0);
skidMarkMeshVertices[1] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 (-skidMarkWidth, 0.01, 0);
skidMarkMeshVertices[2] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 (-skidMarkWidth, 0.01, 0);
skidMarkMeshVertices[3] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( skidMarkWidth, 0.01, 0);
lastpos[0] = skidMarkMeshVertices[2];
lastpos[1] = skidMarkMeshVertices[3];
isSkidding = 1;
}
else {
skidMarkMeshVertices[0] = lastpos[1];
skidMarkMeshVertices[1] = lastpos[0];
skidMarkMeshVertices[2] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 (-skidMarkWidth, 0.01, 0);
skidMarkMeshVertices[3] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( skidMarkWidth, 0.01, 0);
lastpos[0] = skidMarkMeshVertices[2];
lastpos[1] = skidMarkMeshVertices[3];
}
skidMarkMeshTriangles = [0, 1, 2, 2, 3, 0];
skidMarkMesh.vertices = skidMarkMeshVertices;
skidMarkMesh.triangles = skidMarkMeshTriangles;
skidMark.GetComponent (MeshFilter).mesh = skidMarkMesh;
skidMark.GetComponent (Renderer).material = material;
Destroy(skidMark, 120);
}
function fSkidMarkEffect () {
var hit : WheelHit;
var fskidMark : GameObject = new GameObject ("fSkid Mark");
var fskidMarkMesh : Mesh = new Mesh ();
var fskidMarkMeshVertices : Vector3[] = new Vector3[4];
var fskidMarkMeshTriangles : int[] = new int[6];
gameObject.GetComponent (WheelCollider).GetGroundHit (hit);
fskidMark.AddComponent (MeshFilter);
fskidMark.AddComponent (MeshRenderer);
fskidMarkMesh.name = "fSkid Mark Mesh";
if (fisSkidding == 0) {
fskidMarkMeshVertices[0] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 (-skidMarkWidth, 0.01, 0);
fskidMarkMeshVertices[1] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( skidMarkWidth, 0.01, 0);
fskidMarkMeshVertices[2] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( skidMarkWidth, 0.01, 0);
fskidMarkMeshVertices[3] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 (-skidMarkWidth, 0.01, 0);
flastpos[0] = fskidMarkMeshVertices[2];
flastpos[1] = fskidMarkMeshVertices[3];
fisSkidding = 1;
}
else {
fskidMarkMeshVertices[0] = flastpos[1];
fskidMarkMeshVertices[1] = flastpos[0];
fskidMarkMeshVertices[2] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( skidMarkWidth, 0.01, 0);
fskidMarkMeshVertices[3] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 (-skidMarkWidth, 0.01, 0);
flastpos[0] = fskidMarkMeshVertices[2];
flastpos[1] = fskidMarkMeshVertices[3];
}
fskidMarkMeshTriangles = [0, 1, 2, 2, 3, 0];
fskidMarkMesh.vertices = fskidMarkMeshVertices;
fskidMarkMesh.triangles = fskidMarkMeshTriangles;
fskidMark.GetComponent (MeshFilter).mesh = fskidMarkMesh;
fskidMark.GetComponent (Renderer).material = material;
Destroy(fskidMark, 120);
}
function vSkidMarkEffect () {
var hit : WheelHit;
var vskidMark : GameObject = new GameObject ("vSkid Mark");
var vskidMarkMesh : Mesh = new Mesh ();
var vskidMarkMeshVertices : Vector3[] = new Vector3[4];
var vskidMarkMeshTriangles : int[] = new int[6];
gameObject.GetComponent (WheelCollider).GetGroundHit (hit);
vskidMark.AddComponent (MeshFilter);
vskidMark.AddComponent (MeshRenderer);
vskidMarkMesh.name = "vSkid Mark Mesh";
if (visSkidding == 0) {
vskidMarkMeshVertices[0] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, skidMarkWidth);
vskidMarkMeshVertices[1] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, -skidMarkWidth);
vskidMarkMeshVertices[2] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, -skidMarkWidth);
vskidMarkMeshVertices[3] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, skidMarkWidth);
vlastpos[0] = vskidMarkMeshVertices[2];
vlastpos[1] = vskidMarkMeshVertices[3];
visSkidding = 1;
}
else {
vskidMarkMeshVertices[0] = vlastpos[1];
vskidMarkMeshVertices[1] = vlastpos[0];
vskidMarkMeshVertices[2] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, -skidMarkWidth);
vskidMarkMeshVertices[3] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, skidMarkWidth);
vlastpos[0] = vskidMarkMeshVertices[2];
vlastpos[1] = vskidMarkMeshVertices[3];
}
vskidMarkMeshTriangles = [0, 1, 2, 2, 3, 0];
vskidMarkMesh.vertices = vskidMarkMeshVertices;
vskidMarkMesh.triangles = vskidMarkMeshTriangles;
vskidMark.GetComponent (MeshFilter).mesh = vskidMarkMesh;
vskidMark.GetComponent (Renderer).material = material;
Destroy(vskidMark, 120);
}
function fvSkidMarkEffect () {
var hit : WheelHit;
var fvskidMark : GameObject = new GameObject ("fvSkid Mark");
var fvskidMarkMesh : Mesh = new Mesh ();
var fvskidMarkMeshVertices : Vector3[] = new Vector3[4];
var fvskidMarkMeshTriangles : int[] = new int[6];
gameObject.GetComponent (WheelCollider).GetGroundHit (hit);
fvskidMark.AddComponent (MeshFilter);
fvskidMark.AddComponent (MeshRenderer);
fvskidMarkMesh.name = "fvSkid Mark Mesh";
if (fvisSkidding == 0) {
fvskidMarkMeshVertices[0] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, -skidMarkWidth);
fvskidMarkMeshVertices[1] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, skidMarkWidth);
fvskidMarkMeshVertices[2] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, skidMarkWidth);
fvskidMarkMeshVertices[3] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, -skidMarkWidth);
fvlastpos[0] = fvskidMarkMeshVertices[2];
fvlastpos[1] = fvskidMarkMeshVertices[3];
fvisSkidding = 1;
}
else {
fvskidMarkMeshVertices[0] = fvlastpos[1];
fvskidMarkMeshVertices[1] = fvlastpos[0];
fvskidMarkMeshVertices[2] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, skidMarkWidth);
fvskidMarkMeshVertices[3] = hit.point + Quaternion.Euler (transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z) *Vector3 ( 0, 0.01, -skidMarkWidth);
fvlastpos[0] = fvskidMarkMeshVertices[2];
fvlastpos[1] = fvskidMarkMeshVertices[3];
}
fvskidMarkMeshTriangles = [0, 1, 2, 2, 3, 0];
fvskidMarkMesh.vertices = fvskidMarkMeshVertices;
fvskidMarkMesh.triangles = fvskidMarkMeshTriangles;
fvskidMark.GetComponent (MeshFilter).mesh = fvskidMarkMesh;
fvskidMark.GetComponent (Renderer).material = material;
Destroy(fvskidMark, 120);
}
note: removing the extra functions does not make a difference
[1]: /storage/temp/96505-2017-06-24-4-li-moment.jpg
2017-06-24-4-li-moment.jpg
(331.0 kB)
Comment
Your answer
Follow this Question
Related Questions
Fade Material's Transparency Based on Distance 3 Answers
Scaling Crosshair 0 Answers
Missing GameObject, help!! 0 Answers
Limit the distance that gameobject can travel 1 Answer
Calculate UP Distance Displacement for 3D Infinity Runner Game 4 Answers