I am trying to create a VR game, where one part of the game consists of the player digging the soil to create a hole
I have created a dirt mound prefab, and in order to simulate the dirt getting reduced after the player digs it, I am currenlty thinking of doing this:
- When the collider of the spade
overlaps with the dirt mound, do
nothing, i.e. the spade should be
able to pass through the dir mound - When the collider of the spade stops
overlapping with the dirt mound,
change the mesh of the dirt mound to
a model of the dirt mound that is
reduced.
Currently, the mesh collider of the dirt mound is set as Convex = true, isTrigger = true
This is the code I have so far for the dirt mound
public class Soil : MonoBehaviour {
public Mesh hole_50;
public Mesh hole_100;
private float digging_state = 0;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void OnTriggerEnter(Collider other)
{
// Do nothing
}
void OnTriggerExit(Collider other)
{
if (digging_state == 0f)
{
this.gameObject.GetComponent<MeshFilter>().mesh = hole_50;
digging_state += 0.5f;
Debug.Log("Digging state from 0 to " + digging_state);
}
if (digging_state == 0.5f)
{
this.gameObject.GetComponent<MeshFilter>().mesh = hole_100;
digging_state += 0.5f;
Debug.Log("Digging state from 0.5 to " + digging_state);
}
}
}
Basically, I have 2 Mesh variables that keep track of the different meshes to load when the state of the dirt mound changes.
-
For state = 0, it means that the dirt mound is not dug yet
-
For state = 0.5, it means that the dirt mound is slightly dug
-
For state = 1.0, it means that the dirt mound is completely dug and there is a hole in it
Here is an image with the dirt mounds of different states
For some reason, when I test the code out, the moment the spade even touches the dirt mound, the dirt mound jumps to the last state with the hole in it, and I can’t figure out why.
Is there any better way to simulate digging soil?