GetComponent函数使我的变量为0



StripeNum位于按钮上,颜色函数设置为相同的颜色按钮并使用Debug。日志显示条带1=20。但在第二个脚本调试。日志条带1.stripe1=0。我只是引用了脚本所在的游戏对象(相同的游戏对象用作按钮的对象(控制台显示调试的图像。记录

using UnityEngine;
public class StripeNum : MonoBehaviour
{
public void black()
{
stripe1 = 0;
}
public void brown()
{
stripe1 = 10;
}
public void red()
{
stripe1 = 20;
Debug.Log(stripe1);
}
public void orange()
{
stripe1 = 30;
}
public void yellow()
{
stripe1 = 40;
}
public void green()
{
stripe1 = 50;
}
public void blue()
{
stripe1 = 60;
}
public void purple()
{
stripe1 = 70;
}
public void grey()
{
stripe1 = 80;
}
public void white()
{
stripe1 = 90;
}
public float stripe1;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class FinalCalc : MonoBehaviour
{
Scene c_scene;
float TwoStripesAdded;
float FinalR;
public Text FinalNum;

void Start(){
c_scene = SceneManager.GetActiveScene();
GameObject gameobject =  GameObject.Find("GameObject");
StripeNum stripe1 = gameobject.GetComponent<StripeNum>();
Stripe2Num stripe2 = gameobject.GetComponent<Stripe2Num>();
Stripe3Num stripe3 = gameobject.GetComponent<Stripe3Num>();
Stripe4Num stripe4 = gameobject.GetComponent<Stripe4Num>();
if (c_scene.buildIndex == 6){

TwoStripesAdded = stripe1.stripe1 + stripe2.stripe1;
Debug.Log($"Added {stripe1.stripe1} and {stripe2.stripe1} and got {TwoStripesAdded}");
FinalR = TwoStripesAdded * stripe3.stripe1;


FinalNum.text = FinalR.ToString() + "Ω " + "±" + stripe4.stripe1 + "%";
}
}

}

为什么不将类命名为Stripe并拥有多个实例?你可以有空的子游戏对象,你可以把每个条纹MonoBehavior扑通一声放在空的子上。然后你可以将游戏对象命名为Stripe1、Stripe2等。

在Start((中,你可以找到这些GameObjects,获得每个附加的组件,并缓存这些引用,这样你就不必不断地重新获取它们。

Aaaan实际上,在查看您的代码时,我假设您在Update中运行此代码,但您在Start中运行检查。我不知道你什么时候或如何设置颜色,但如果你在播放模式下设置,已经太晚了,因为这个脚本不会检查颜色。

只有在播放模式下才能激活这些方法(这就是为什么我问你如何设置它(,所以获得读数的唯一方法是在编辑器模式下设置值,但这不会调用方法。

也许您正在做的是在编辑器模式下设置与颜色相对应的值?

不管是什么情况,我认为当你检查数据时,你的数据没有初始化,这只是一次,在绘制第一帧之前。如果你收到了其他调试消息,那么我需要知道你是怎么得到的。在任何人都可以在播放模式下设置值之前,应打印总和。

还有一个想法——你出于某种原因查看了现场?如果设置值并更改场景,则所有对象都将被销毁。一个场景中的电阻器计算器是与场景6中的电阻器不同的实例,并且不会在任何条纹上设置任何值。

最新更新