Unity3D - get component - c#

What is the simplest way to getcomponent in Unity3D C#?
My case:
GameObject gamemaster.
//C# script MainGameLogic.cs(attached to gamemaster).
A boolean backfacedisplayed(in MainGameLogic.cs).
A function BackfaceDisplay()(in MainGameLogic.cs).
Another C# script FlipMech.cs, which I need to check from MainGameLogic.cs if(backfacedisplayed == TRUE), I will call BackfaceDisplay()from MainGameLogic.cs. How can I do it in C#?
In js is rather straight forward. In FlipMech.js:
//declare gamemaster
var gamemaster:GameObject;
Then wherever I need:
if(gamemaster.GetComponent(MainGameLogic).backfacedisplayed==true)
{
gamemaster.GetComponent(MainGameLogic).BackfaceDisplay();
}
But it seems like C# is way more complicated that this.

in c#, you will get the component using this,
if(gamemaster.GetComponent<MainGameLogic>().backfacedisplayed==true)
{
gamemaster.GetComponent<MainGameLogic>().BackfaceDisplay();
}

Nick's answer didn't work for me when I countered this same problem. The script involved an Unity3d asset store that has its own namespace. When I put the class in the namespace, it started working.
using UnityEngine;
using System.Collections;
using Devdog.InventorySystem;
namespace Devdog.InventorySystem.Demo
{
public class changeStat : MonoBehaviour {
// ... rest of the code including the gameObject.GetComponent<>();
}
}

Related

Firebase doesnt work properly on android, even though we can see traffic?

Firebase only works on unity editor, not when we actually build it to android, it gets stuck at waiting for login with email and password functions. Although, it seems to working to some extent as we can see traffic on the firebase website. Thus we tried using simpler code instead, which is what someone else suggested, but it still doesnt come past the async code, is there any solution im missing, maybe something in the player settings is preventing it from working.
//Heres the current code, the texts are just flags, and it gets to "sigma" and never loads next scene:
using Firebase.Extensions;
using Firebase;
using Firebase.Auth;
using Firebase.Database;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Android;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using TMPro;
public class Permissions : MonoBehaviour
{
[SerializeField] TMP_Text t;
string[] temp = { Permission.ExternalStorageRead, Permission.ExternalStorageWrite };
// Start is called before the first frame update
void Start()
{
//Permission.RequestUserPermissions(temp);
t.text = "ligma";
CheckIfReady();
}
public void CheckIfReady()
{
t.text = "sigma";
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
Firebase.DependencyStatus dependencyStatus = task.Result;
t.text = "figma";
if (dependencyStatus == Firebase.DependencyStatus.Available)
{
Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;
SceneManager.LoadScene("Auth");
// Debug.Log("Firebase is ready for use.");
}
else
{
t.text = "else";
}
});
}
}
We tried using the prementioned code, because we thought it was a dependencie problem, however even that failed, so now we dont really know what to do. Maybe something in the player settings. I also tried asking chatGPT for some answers, and it suggested runtime scripts of .NET 4.x, which i didnt manage to find. I only found backend scripts, which were only .NET 2.1 and .NET framework. I dont really know if that is a problem, but im unsure.
Again were only experiencing errors, when actually building the game, the editor runs fine however.
We removed the firebase folder in our project, then we reimported it and now it seems work fine. Thanks for all the help guys, your comments were really helpful and i wish to see you another time! Best regards from me!

How to use Resources.Loadall for only .fbx, .obj files

In Unity, Resources.LoadAll(path) method would access T type in the specific path(e.g.Resources/Meshes/Buildings). Then we can add all these files to our array.
However, I can't specific any file like .fbx, .obj, .png, etc. The T type allows us to access only the Unity classes suck as GameObject, Texture2D, Mesh and so on...
Here is my script
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class AutoPre_Manager : MonoBehaviour
{
public Object[] tractorobj;
public GameObject[] directoryAllFiles;
public string[] Model_Folder;
public List<GameObject> meshGameobj;
private void Start()
{
loadModels();
}
public void loadModels()
{
meshGameobj = new List<GameObject>();
directoryAllFiles = Resources.LoadAll<GameObject>("Model/Equipment");
}
}
The script compiled, smoothly. And when I ran the game, Resources.LoadAll would get every files in my folder(.fbx, .prefabs, .cs)
If I only need .fbx files, what should I do?
Thank you in advance
Unfortunately, there is no way you can distinguish .fbx and .prefabs just by typing the path because extensions are ignored. Here is what you can do:
Try placing your .fbx files into a new folder like: "Model/Equipment/FBXs".
Set the .fbx list through inspector.
Add a tag to .fbx files then after loadall filter the array, but I wouldn't recommend this method because wastes memory.

Can't add script component 'HealthDisplay' because the script class cannot be found

I have seen similar questions, but I legitimately can't understand my problem here.
I have created a new script called HealthDisplay, from within Unity itself. It generated with some sample code, and I tried to attach it to a UI object that's text - however that error shows up.
I looked up the error and got all sorts of suggestions, however the code was generated by Unity itself, and the name of the class matched the name of the file exactly. I added some more code and tried to attach it then, but it still didn't work. I also tried reinstalling both Unity and the Unity Hub, and still nothing. Here's the code within HealthDisplay.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HealthDisplay : MonoBehaviour
{
private int health = 100;
public Text healthText;
// Update is called once per frame
void Update()
{
healthText.text = "HEALTH : " + health;
if(Input.GetKeyDown(KeyCode.Space))
{
health--;
}
}
}
The file, I've triple checked, is called HealthDisplay.cs. Its name matches exactly. Is there something I'm doing wrong, or could this just be some weird bug with Unity? Thanks.

How can I access the Unity 'Light 2D (Script)' component via Script?

In my Unity 2D game, I have a character with a lightsource component
'Light 2D(Script)' from the Lightweight RP package.
I want to change the intensity of the Light 2D with the code below.
But I can't assign the 'Light 2D(Script)' to the public Light LightSource in the Unity Inspector panel.
I've tried using public Light2D LightSource class but it doesn't seem to exist.
Is there any other way to access the 2D Light component or something I'm doing wrong?
I've also added a screenshot of the Inspector pane, if it helps.
If there's any more information you need just tell me and I hope someone can help. Thanks
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lighting : MonoBehaviour
{
public Light LightSource;
public float lightIntensity;
public float minIntensity = 0.35f, maxIntensity = 0.65f;
void Update()
{
lightIntensity = Random.Range(minIntensity, maxIntensity);
LightSource.intensity = lightIntensity;
}
}
Character Inspector Screenshot
Assuming you are using the universal render pipeline for 2D lighting this is the solution I found.
Within the Light2D script (which you can open by clicking the three vertical dots in the top right of the Light2D component and hitting edit script) there is the declaration of the namespace UnityEngine.Experimental.Rendering.Universal In order to reference Light2D simply at the top of your script write
using UnityEngine.Experimental.Rendering.Universal;
There may appear to be an error when doing this, but press on. From here on out you'll be able to reference the Light2D component much as you would any other component, such as using GetComponent<Light2D>() If any of this gives an error within your code editor still compile to test if it works, I have a fully functioning script using this method but Visual Studio still believes that Light2D does not exist. Regardless, this appears to work and I hope this works for everyone else as well.
Ok bud i got your answer.
First off, u need to open the Light2D(script) do the following:
1.) add the following to the top of the script:
using System.Collections;
using UnityEngine;
2.) you need to set the class of the Light2D script to "public" (so u can access it in your "lighting.cs" script.):
public class Light2DManager : IDisposable
3.) once that is done save the light2d script.
Ok now we are going to access it...
in your Lighting script we do the usual when we want to access another script:
GameObject TheLight = GameObject.Find("The Gameobject the script is on");
UnityEngine.Experimental.Rendering.LWRP.Light2D The2DLights = TheLight.GetComponent <UnityEngine.Experimental.Rendering.LWRP.Light2D> ();
Now you should have access, just type the following to confirm:
The2DLights. (and you will get options like intensity etc etc)
This is my first time ever answering a question. turns out i was having the same issue, happy to help.
Ran into this today, to expand on this solution of the using statement (simply adding it did not work in my case, on 2020.2) at the top you can do:
using Light2DE = UnityEngine.Experimental.Rendering.Universal.Light2D;
Then use Light2DE as the class instead of Light2D in your script.
light = transform.GetComponent<Light2DE>();
I don't understand the question very clearly, but it's possible you're just looking for "GetComponent".
Here's a random example,
public class CamToUI:MonoBehaviour
{
[System.NonSerialized] public WebCamTexture wct;
public Text nameDisplay;
private RawImage rawImage;
private RectTransform rawImageRT;
private AspectRatioFitter rawImageARF;
private Material rawImageMaterial;
void Awake()
{
rawImage = GetComponent<RawImage>();
rawImageRT = rawImage.GetComponent<RectTransform>();
rawImageARF = rawImage.GetComponent<AspectRatioFitter>();
}
GetComponent finds "thing" (such as a "light2D") which is attached to that same game object.
• You have some game object
• A script, Script.cs, is attached to that game object
• Some other thing (say, Light2D) is attached to that same game object
Inside the script Script.cs, you can find the other thing, using GetComponent.
Ideally, don't call GetComponent repeatedly, just call it once in Awake or whatever. (But you're a mile away from worrying about performance, so don't worry about it.)
using UnityEngine.Experimental.Rendering.Universal;
using UnityEngine;
public class Light2DController : MonoBehaviour {
void Awake() {
//assuming You have Light2D component in the same object that has this script
Light2D light = transform.GetComponent<Light2D>();
}
}
Unity 2019.3.0f1
Here's how you can access the Light2D(Script) components.
Unity Version: Unity 2020.1.4f1
Import using UnityEngine.Experimental.Rendering.Universal; into your Script.
Please find the below code example.
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Experimental.Rendering.Universal;//Important
public class Lighting : MonoBehaviour
{
Light2D theLights; // To Access the Light Components.
public float maxRange = 0.54f;
public float minRange = 0.31f;
public float flickerSpeed = 0.5f;
void Update()
{
//Assuming You have Light2D component in the same object that has this script.
theLights.intensity = Mathf.Lerp(minRange, maxRange, Mathf.PingPong(Time.time, flickerSpeed));
// The above Line is to create a flickering effect, You can also set a value like for example: theLights.intensity=0.5f, To set the intensity of the Light.
}
}
You can also access other Light2D components similar way
theLights.color = new Color(0, 255, 0);// here I am accessing color and setting a new color value.
In newer versions of unity (i'm using 2021.2.7f1) use this:
using UnityEngine.Rendering.Universal;
And then in code:
Light2D light = gameObject.GetComponent<Light2D>();

The type or namespace name `Kinect' does not exist in the namespace `Microsoft'

I am using Unity to develop a game and I want to use Kinect so I add a reference to Microsoft.Kinect.ddl and I have the following code (nothing impressive):
using UnityEngine;
using System.Collections;
using Microsoft.Kinect;
public class Main : MonoBehaviour {
// Use this for initialization
void Start () {
print(KinectSensor.KinectSensors.Count);
}
// Update is called once per frame
void Update () {
}
}
Visual Studio does not mark any error but when I am trying to run it using Unity I am getting a compilation error The type or namespace name Kinect does not exist in the namespace Microsoft . Any idea how can I fix that?
See this page for using the SDK with unity. It does have some obvious errors though (as pointed out in the documentation.)
I am using k2examples asset from the asset store, and I ran into the same problem... since you are not using the same asset, this might not solve the problem, but you can give it a try:
import the standard assets.

Categories

Resources