-
Notifications
You must be signed in to change notification settings - Fork 2
/
CollisionFrictionScript.cs
78 lines (68 loc) · 2.42 KB
/
CollisionFrictionScript.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//Attached to the mass, whenever it has a collision it detects the collider and finds the coefficient of friction for it
// A public getter then allows other scripts to access it.
public class CollisionFrictionScript : MonoBehaviour {
private float frictionCoefficient;
public Text coefficientText;
public Text accelerationText;
private float mass;
private Rigidbody rb; //rigidbody of the mass
private Collider col;
private CalculateForcesScript forcesScript;
// Use this for initialization
void Start () {
rb = transform.GetComponent<Rigidbody>();
forcesScript = transform.GetComponentInParent<CalculateForcesScript>(); //allows access to the forces and acceleration
mass = rb.mass;
}
//private void OnCollisionEnter(Collision collision)
void Update()
{
//col = collision.collider;
//if the mass is stationary then static friction coefficient used, else dynamic.
if (col != null)
{
if (rb.velocity.z == 0)
{
frictionCoefficient = col.material.staticFriction;
}
else
{
frictionCoefficient = col.material.dynamicFriction;
}
OutputToTextBox(frictionCoefficient); //output to UI
UpdateAcceleration();
}
}
//called from calculate forces script in order to get the friction force
public float GetFrictionCoefficient()
{
return frictionCoefficient;
}
//acceleration of the rigidbody not calculated in Unity - calculate using components of forces along slope
private void UpdateAcceleration()
{
float resultant = forcesScript.GetParallelForce() - forcesScript.GetFriction(); //resultant along slope
if(resultant < 0 || rb.velocity.z == 0)
{
accelerationText.text = "0";
}
else
{
float acceleration = resultant / mass;
accelerationText.text = acceleration.ToString("F1");
}
}
private void OutputToTextBox(float frictionCoefficient)
{
coefficientText.text = frictionCoefficient.ToString();
}
//when mass collides with a new object it resets the collider
private void OnCollisionEnter(Collision collision)
{
col = collision.collider;
}
}