Question by
jilermo123 · Oct 27, 2020 at 11:55 AM ·
variablefunction
Why when I write variables outside of functions they work fine but when I translate them inside a function they don't work?
I have this code, it works well enough when the variables are outside the the start function
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DrawLine : MonoBehaviour
{
GameObject origin1;
GameObject x;
GameObject y;
GameObject z;
GameObject Linex;
LineRenderer Linexrender;
GameObject Liney;
LineRenderer Lineyrender;
GameObject Linez;
LineRenderer Linezrender;
public Material line;
public Material originMaterial;
MeshRenderer originmesh;
// Start is called before the first frame update
[System.Obsolete]
void Start()
{
origin1 = GameObject.CreatePrimitive(PrimitiveType.Sphere);
origin1.transform.localScale = new Vector3(0.3f, 0.3f,0.3f);
origin1.transform.position=new Vector3(0f, 0f, 0f);
originmesh=origin1.GetComponent<MeshRenderer>();
originmesh.material = originMaterial;
originmesh.material.SetColor("black", Color.black);
originmesh.material.color = new Color(0f, 0f, 0f, 255f);
x = GameObject.CreatePrimitive(PrimitiveType.Sphere);
x.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
x.transform.position = new Vector3(1f, 0f, 0f);
originmesh = x.GetComponent<MeshRenderer>();
originmesh.material = originMaterial;
//originmesh.material.SetColor("red", Color.red);
originmesh.material.color=new Color(255f,0f,0f,255f);
y = GameObject.CreatePrimitive(PrimitiveType.Sphere);
y.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
y.transform.position = new Vector3(0f, 1f, 0f);
originmesh=y.GetComponent<MeshRenderer>();
originmesh.material = originMaterial;
originmesh.material.SetColor("green", Color.green);
originmesh.material.color = new Color(0f, 255f, 0f, 255f);
z = GameObject.CreatePrimitive(PrimitiveType.Sphere);
z.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
z.transform.position = new Vector3(0f, 0f, 1f);
originmesh = z.GetComponent<MeshRenderer>();
originmesh.material = originMaterial;
originmesh.material.SetColor("blue", Color.blue);
originmesh.material.color = new Color(0f, 0f, 255f, 255f);
Linex = new GameObject();
Linex.AddComponent<LineRenderer>();
Linexrender = Linex.GetComponent<LineRenderer>();
Linexrender.SetPosition(0, origin1.transform.position);
Linexrender.SetPosition(1, x.transform.position);
Linexrender.startWidth=0.1f;
Linexrender.endWidth = 0.1f;
Linexrender.material = line;
Linexrender.startColor = new Color(255f, 0f, 0f, 255f);
Linexrender.endColor= new Color(255f, 0f, 0f, 255f);
Liney = new GameObject();
Liney.AddComponent<LineRenderer>();
Lineyrender = Liney.GetComponent<LineRenderer>();
Lineyrender.SetPosition(0, origin1.transform.position);
Lineyrender.SetPosition(1, y.transform.position);
Lineyrender.startWidth = 0.1f;
Lineyrender.endWidth = 0.1f;
Lineyrender.material = line;
Lineyrender.startColor = new Color(0f, 255f, 0f, 255f);
Lineyrender.endColor= new Color(0f, 255f, 0f, 255f);
Linez = new GameObject();
Linez.AddComponent<LineRenderer>();
Linezrender = Linez.GetComponent<LineRenderer>();
Linezrender.SetPosition(0, origin1.transform.position);
Linezrender.SetPosition(1, z.transform.position);
Linezrender.startWidth = 0.1f;
Linezrender.endWidth = 0.1f;
Linezrender.material = line;
Linezrender.startColor = new Color(0f, 0f, 255f, 255f);
Linezrender.endColor= new Color(0f, 0f, 255f, 255f);
}
// Update is called once per frame
void Update()
{
}
}
But the moment I move the variables inside a function they stop working, how do I declare variables inside a function without it braking?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DrawLine : MonoBehaviour
{
// Start is called before the first frame update
[System.Obsolete]
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void coordenadascero()
{
// GameObject origin1;
GameObject x;
GameObject y;
GameObject z;
GameObject Linex;
LineRenderer Linexrender;
GameObject Liney;
LineRenderer Lineyrender;
GameObject Linez;
LineRenderer Linezrender;
public Material line;
public Material originMaterial;
MeshRenderer originmesh;
GameObject origin1 = GameObject.CreatePrimitive(PrimitiveType.Sphere);
origin1.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
origin1.transform.position = new Vector3(0f, 0f, 0f);
originmesh = origin1.GetComponent<MeshRenderer>();
originmesh.material = originMaterial;
originmesh.material.SetColor("black", Color.black);
originmesh.material.color = new Color(0f, 0f, 0f, 255f);
x = GameObject.CreatePrimitive(PrimitiveType.Sphere);
x.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
x.transform.position = new Vector3(1f, 0f, 0f);
originmesh = x.GetComponent<MeshRenderer>();
originmesh.material = originMaterial;
//originmesh.material.SetColor("red", Color.red);
originmesh.material.color = new Color(255f, 0f, 0f, 255f);
y = GameObject.CreatePrimitive(PrimitiveType.Sphere);
y.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
y.transform.position = new Vector3(0f, 1f, 0f);
originmesh = y.GetComponent<MeshRenderer>();
originmesh.material = originMaterial;
originmesh.material.SetColor("green", Color.green);
originmesh.material.color = new Color(0f, 255f, 0f, 255f);
z = GameObject.CreatePrimitive(PrimitiveType.Sphere);
z.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
z.transform.position = new Vector3(0f, 0f, 1f);
originmesh = z.GetComponent<MeshRenderer>();
originmesh.material = originMaterial;
originmesh.material.SetColor("blue", Color.blue);
originmesh.material.color = new Color(0f, 0f, 255f, 255f);
Linex = new GameObject();
Linex.AddComponent<LineRenderer>();
Linexrender = Linex.GetComponent<LineRenderer>();
Linexrender.SetPosition(0, origin1.transform.position);
Linexrender.SetPosition(1, x.transform.position);
Linexrender.startWidth = 0.1f;
Linexrender.endWidth = 0.1f;
Linexrender.material = line;
Linexrender.startColor = new Color(255f, 0f, 0f, 255f);
Linexrender.endColor = new Color(255f, 0f, 0f, 255f);
Liney = new GameObject();
Liney.AddComponent<LineRenderer>();
Lineyrender = Liney.GetComponent<LineRenderer>();
Lineyrender.SetPosition(0, origin1.transform.position);
Lineyrender.SetPosition(1, y.transform.position);
Lineyrender.startWidth = 0.1f;
Lineyrender.endWidth = 0.1f;
Lineyrender.material = line;
Lineyrender.startColor = new Color(0f, 255f, 0f, 255f);
Lineyrender.endColor = new Color(0f, 255f, 0f, 255f);
Linez = new GameObject();
Linez.AddComponent<LineRenderer>();
Linezrender = Linez.GetComponent<LineRenderer>();
Linezrender.SetPosition(0, origin1.transform.position);
Linezrender.SetPosition(1, z.transform.position);
Linezrender.startWidth = 0.1f;
Linezrender.endWidth = 0.1f;
Linezrender.material = line;
Linezrender.startColor = new Color(0f, 0f, 255f, 255f);
Linezrender.endColor = new Color(0f, 0f, 255f, 255f);
}
}
And yeah I know that I only modified this variable
GameObject origin1 = GameObject.CreatePrimitive(PrimitiveType.Sphere);
but even after declaring it like this the next lines still didn't recognize the variable even though this particular line didn't gave me an error.
origin1.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
origin1.transform.position = new Vector3(0f, 0f, 0f);
Also feel free to tell me about all the bad practices I have while programming, Thank for your help by the way
Comment