Okay so I’m making a ‘tunnel’ system for a game, but the tunnels will need to connect various space domes on a martian sort of planet.
I realised skewing meshes wasn’t going to work, so I’ve developed a nice little extendible system using semi-manual vertex plotting and the mesh system.
It’s works reasonably well so far except one really silly nagging thing.
I’m using .FindChild() to get specific points on a building to connect to another and plotting the mesh accordingly. When I use this code all is well.
void Start () {
ReconstructMesh();
}
public void ReconstructMesh() {
MeshFilter meshFilter = GetComponent<MeshFilter>();
Mesh mesh = new Mesh();
meshFilter.mesh = mesh;
//Debug.Log (transform.InverseTransformPoint(StartTransform.FindChild("Top").position));
Vector3[] verticies = new Vector3[]{
transform.InverseTransformPoint(StartTransform.FindChild("Tunnel Top " + 1).position),
transform.InverseTransformPoint(StartTransform.FindChild("Tunnel Top Left " + 1).position),
transform.InverseTransformPoint(StartTransform.FindChild("Tunnel Top Right " + 1).position),
//end points
transform.InverseTransformPoint(EndTransform.FindChild("Tunnel Top " + 1).position),
transform.InverseTransformPoint(EndTransform.FindChild("Tunnel Top Left " + 1).position),
transform.InverseTransformPoint(EndTransform.FindChild("Tunnel Top Right " + 1).position)
};...
BUT! When I try and use a variable to search for the tunnel number in the name of the prefab (so I can have multiple exits to a building) it gives me a null reference blah blah, which is obviously caused by it not finding the object because the search is wrong, hence using the variable instead of the straight integer is the problem.
Here is the code that DOESN’T work.
public int StartTunnelNumber = 1;
public int EndTunnelNumber = 1;
void Start () {
ReconstructMesh();
}
public void ReconstructMesh() {
MeshFilter meshFilter = GetComponent<MeshFilter>();
Mesh mesh = new Mesh();
meshFilter.mesh = mesh;
//Debug.Log (transform.InverseTransformPoint(StartTransform.FindChild("Top").position));
Vector3[] verticies = new Vector3[]{
transform.InverseTransformPoint(StartTransform.FindChild("Tunnel Top " + StartTunnelNumber).position),
transform.InverseTransformPoint(StartTransform.FindChild("Tunnel Top Left " + StartTunnelNumber).position),
transform.InverseTransformPoint(StartTransform.FindChild("Tunnel Top Right " + StartTunnelNumber).position),
//end points
transform.InverseTransformPoint(EndTransform.FindChild("Tunnel Top " + EndTunnelNumber).position),
transform.InverseTransformPoint(EndTransform.FindChild("Tunnel Top Left " + EndTunnelNumber).position),
transform.InverseTransformPoint(EndTransform.FindChild("Tunnel Top Right " + EndTunnelNumber).position)
};
I’ve tried .FindChild("XXX " + intVariable.ToString()) and .FindChild("XXX " + (int)intVariable))
Why can’t I use a variable name instead of the straight integer? I can’t even get it as a string OR cast it as an int.
What’s going on here?
Thanks in advance!
Halbera