- Home /
Understanding Vehicle Damage script Variables?
Hello,
I need help understanding what each of the variables in this script will do, I have tested over and over and seem to get random results.
I bought this script but the seller is NO longer answering me, I need help!
I am an avid game maker, and understand a fair amount of javascript BUT I'm new to mesh manipulation.
CODE:
#pragma strict
var maxDamage:float=0.6;
var maxCollPower:float=50.0;
var destroyRange:float=0.7;
var dirManipulator:float=0.95;
var meshes:MeshFilter[];
private var sqrDestRange:float;
function Start(){
sqrDestRange = destroyRange*destroyRange;// sqr of destroy range
}
function OnCollisionEnter(coll:Collision){
if(coll.contacts.Length>0){//fix a little bug of physics in Unity
for(var i:int=0; i<coll.contacts.Length; i++){
var collPoint : Vector3 = coll.contacts[0].point;//contact point
var collRelVel : Vector3 = coll.relativeVelocity;
var collPointToMe:Vector3 = transform.position - collPoint;//convert to me
var collPower:float = collRelVel.magnitude * Vector3.Dot(coll.contacts[0].normal, collPointToMe.normalized);//power calculate
OnMeshForce(collPoint, Mathf.Clamp01(collPower/maxCollPower));//go next step
}
}
}
function OnMeshForce(originPosAndForce:Vector4){
originPosAndForce = Vector3(originPosAndForce.x,originPosAndForce.y,originPosAndForce.z);//recalculate to Vector3
OnMeshForce(originPosAndForce, originPosAndForce.w);//next
}
function OnMeshForce(originPos:Vector3, force:float){
force = Mathf.Clamp01(force);
for(var j:int=0; j<meshes.Length; j++){
var verts:Vector3[] = meshes[j].mesh.vertices;//temp verts
for (var i:int=0; i<verts.Length; i++){
var scaledVert:Vector3 = Vector3.Scale(verts[i], transform.localScale );
var vertWorldPos:Vector3 = meshes[j].transform.position + (meshes[j].transform.rotation * scaledVert);
var originToMeDir:Vector3 = vertWorldPos - originPos;
var flatVertToCenterDir:Vector3 = transform.position - vertWorldPos;
flatVertToCenterDir.y = 0.0;
if(originToMeDir.sqrMagnitude < sqrDestRange){
var dist:float = Mathf.Clamp01(originToMeDir.sqrMagnitude/sqrDestRange);
var moveDelta:float = force * (1.0-dist) * maxDamage;
var moveDir:Vector3 = Vector3.Slerp(originToMeDir, flatVertToCenterDir, dirManipulator).normalized * moveDelta;
verts[i] += Quaternion.Inverse(transform.rotation)*moveDir;
}
}
meshes[j].mesh.vertices = verts;
meshes[j].mesh.RecalculateBounds();
}
}
Please do not steal this script, No its not copyrighted, but support the developer if you want to use it. It's a GREAT small little package thats EASY to change and add to! HERE: http://activeden.net/item/4-wheels-car-physic-damage-and-repair-system/4453624
Thank you.
Daniel
If this is a violation, I will be happy to remove my Question and ask some one privately. Thanks
Your answer
Follow this Question
Related Questions
How does this code generate movement using player input? Does it have some in-engine code? 1 Answer
Added torque value, like in rigidbody.velocity.magnitude? 0 Answers
Unexpected symbol 'Flip' and 'else' 1 Answer
Multimesh models / changing meshes between them 1 Answer
Problem with setting vertices positions and smoothing groups. 1 Answer