从类到子类继承变量值C#

时间:2019-02-22 03:32:04

标签: c# unity3d

我有2个场景,每个场景都有自己的脚本,只是我想从脚本1中获取一个值,并在脚本2中使用它,然后在第二个场景中加载脚本2,因为它总是加载此变量ex的默认值;如果我调用应具有值(sas)的字符串变量,则它在第二个脚本中显示,如果整数为0,则在null中显示null,尽管如果在第一个脚本中将其打印为“ sas”,则正确的值。

查看方法goforward(),该方法将更新变量x

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Trainbehavior : MonoBehaviour
{
    public float force = (float)0.1;
    private Rigidbody sph;
    public GameObject button_goforward;
    public GameObject button_goright;
    public GameObject button_results;
    public GameObject button_nextlevel;
    public Text Results;



    public String x ;
    //public int g; 

    //public gamepbject panel ;
    //panel.gameobject.setactive(true);
    private void Start()
    {
        sph = GetComponent<Rigidbody>();
        button_goforward.SetActive(false);
        button_goright.SetActive(false);
        button_results.SetActive(false);
        button_nextlevel.SetActive(false);

    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.name == "switchtrigger")
        {
            button_goforward.SetActive(true);
            button_goright.SetActive(true);
            button_results.SetActive(true);


            Time.timeScale = 0;
        }
    }

    public void goforward()
    {
        setx("sas");  // if a called print x it will be sas




     //   Results.text = "dzf";

    }


    public String getx()
    {
        return x;
    }
    public void setx(String x)
    {
        this.x = x;
    }

第二个脚本 在更新IAM中尝试获取值x finalresults.text = trains.getx();

public class cases : Trainbehavior
{
    Trainbehavior trains;
    public Text finalresults;
    public string cx;


    // Start is called before the first frame update
    void Start()
    {

        trains = GetComponent<Trainbehavior>();
        /*var trainscript = gameObject.GetComponent<Trainbehavior>();
        if (trainscript)
        {


            finalresults.text = Results.GetComponent<UnityEngine.UI.Text>().text;
        }*/
    }

    // Update is called once per frame
    void Update()
    {
        // finalresults.text = trains.x;
        finalresults.text = trains.getx(); // if i called print(x) it will be null !
        /*
        var trainscript = gameObject.GetComponent<Trainbehavior>();
        if (trainscript)
        {
            // GameObject x = trainscript.GameObject.Find("test");
            finalresults.text = cx;
            print(cx);

        }*/
    }
}

1 个答案:

答案 0 :(得分:0)

如果我理解您的问题,则只想调用getx函数并在第一个脚本中返回您设置为x的值。但是,除非您调用goForward函数,否则请不要设置x,而我看不到您在哪里进行设置。看起来像您所说的话,当您打电话给goforward时,您会得到想要的东西,这是有道理的。您只需要在第二个脚本中调用该goforward函数,即可在调用x之前将getx设置为一个值。

执行此操作时,您不会继承x,只需设置一个公共变量即可。您可以在该函数中或该类中的任何位置将值设置为公共变量x