Quantcast
Channel: Questions in topic: "error"
Viewing all articles
Browse latest Browse all 7934

C# CarDamage script: Array index is out of range error.

$
0
0
So the problem is that I have an car damage script, which deforms mesh on collision. It works but it keeps giving me this error and I don't understand what's wrong it. So if someone could point me on right direction. ERROR: ------ IndexOutOfRangeException: Array index is out of range. CarDamage2.OnCollisionEnter (UnityEngine.Collision collision) (at Assets/Scripts/CarDamage2.cs:44) SCRIPT: ------- using UnityEngine; using System.Collections; public class CarDamage2 : MonoBehaviour { public float maxMoveDelta = 1.0f; // maximum distance one vertice moves per explosion (in meters) public float maxCollisionStrength = 50.0f; public float YforceDamp = 0.1f; // 0.0 - 1.0 public float demolutionRange = 0.5f; public float impactDirManipulator = 0.0f; public MeshFilter[] optionalMeshList; private MeshFilter[] meshfilters; private float sqrDemRange; public void Start() { //maxMoveDelta = Mathf.Clamp01(maxMoveDelta); if(optionalMeshList.Length>0) meshfilters = optionalMeshList; else meshfilters = GetComponentsInChildren(); sqrDemRange = demolutionRange*demolutionRange; /* doesnt work, strange physic behaviour for(int j=0; j(); meshfilters[j].transform.collider.isTrigger = true; } }*/ } public void OnCollisionEnter( Collision collision ) { Vector3 colRelVel = collision.relativeVelocity; colRelVel.y *= YforceDamp; Vector3 colPointToMe = transform.position - collision.contacts[0].point; // Dot = angle to collision point, frontal = highest damage, strip = lowest damage float colStrength = colRelVel.magnitude * Vector3.Dot(collision.contacts[0].normal, colPointToMe.normalized); OnMeshForce( collision.contacts[0].point, Mathf.Clamp01(colStrength/maxCollisionStrength) ); Debug.DrawLine(collision.contacts[0].point, transform.position, Color.red); //Debug.Break(); } // if called by SendMessage(), we only have 1 param public void OnMeshForce( Vector4 originPosAndForce ) { OnMeshForce( (Vector3)originPosAndForce, originPosAndForce.w ); } public void OnMeshForce( Vector3 originPos, float force ) { // force should be between 0.0 and 1.0 force = Mathf.Clamp01(force); for(int j=0; j 45° to 0° / current vertice is nearer to exploPos than center of bounds if( originToMeDir.sqrMagnitude < sqrDemRange ) //dot > 0.8f ) { float dist = Mathf.Clamp01(originToMeDir.sqrMagnitude/sqrDemRange); float moveDelta = force * (1.0f-dist) * maxMoveDelta; Vector3 moveDir = Vector3.Slerp(originToMeDir, flatVertToCenterDir, impactDirManipulator).normalized * moveDelta; verts[i] += Quaternion.Inverse(transform.rotation)*moveDir; //Debug.DrawRay(vertWorldPos, moveDir, Color.red); //Debug.DrawLine(vertWorldPos, transform.position, Color.green); ///Debug.Break(); } } meshfilters[j].mesh.vertices = verts; meshfilters[j].mesh.RecalculateBounds(); } } } ERROR LINE FROM CODE: --------------------- Vector3 colPointToMe = transform.position - collision.contacts[0].point;

Viewing all articles
Browse latest Browse all 7934

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>