.FindChild("String" + 1) is not the same as .FindChild("String" + integerVariable)???
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
Answer by HAlbera · Nov 12, 2015 at 07:14 PM
Duuuuur. The inspector was still set to 0.
Apologies all! Problem solved!
Your answer
Follow this Question
Related Questions
i need help with my board manager coding ASAP 1 Answer
Hololens sharing example 1 Answer
Why can't I call a function within the same class? (Or: how does unity handle instancing?) 0 Answers
Game object not enabled after SetActive(true). 1 Answer
[C#]How to save a list of items to use in another script and it's not a player prefs type of list? 0 Answers