C# 脚本(子对象)不允许我访问另一个脚本(这是父对象)统一

标签 c# object inheritance unity3d

我可以从脚本中访问对象,但是我想直接更改脚本中对象的值,而这不允许我这样做。这是我的主要脚本脚本:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using RTS;

public class QuestionMenu : MonoBehaviour {
public struct Question{
    public string questionText;
    public string answer;
    public string solution1;
    public string solution2;
    public string solution3;
}
//public void QuestionObject(string QuestionText, string answer, string solution1, string solution2, string solution3){
    //Debug.Log ("lol");
//}
public Question QuestionObject = new Question();
Canvas canvas;
public UserInput Player;
public Text QuestionText;
public Text Button1;
// Use this for initialization
void Start () {
    canvas = GetComponent<Canvas>();
    canvas.enabled = false;
    ResourceManager.QuestionMenuOpen = false;
    //instruction = GetComponent<Text>();
    //Debug.Log (QuestionText);
    Button1.text = "Crazy";
    QuestionText.text = "Yo Bro";
}

// Update is called once per frame
void Update () {
    ////Debug.Log (QuestionObject.questionText);
    if(ResourceManager.QuestionMenuOpen == true){
        //QuestionObject.questionText = "bloo";
        Pause ();
        //QuestionText.text = "Question 1) Differentiate 3x\u2074 + 2x.";
        //Button1.text = "12x\u00B3 + 2";
    }
}

public void Pause (){
    canvas.enabled = true;
    Player.enabled = false;
    Time.timeScale = 0.0f;
    Cursor.visible = true;
    //QuestionObject = Questions.QuestionObject;
    Debug.Log (QuestionObject.questionText);
    QuestionText.text = QuestionObject.questionText;
    //ResourceManager.QuestionMenuOpen = true;
    }

void Resume (){
    Cursor.visible = false;
    canvas.enabled = false;
    Player.enabled = true;
    Time.timeScale = 1.0f;
    ResourceManager.QuestionMenuOpen = false;
    }


}

这是我的脚本:

using UnityEngine;
using System.Collections;

public class QuestionScript : MonoBehaviour {
// Use this for initialization
void Start () {
    QuestionMenu.QuestionObject.answer = "asdf";
}

// Update is called once per frame
void Update () {

}
}

编辑:我希望从上面显示的脚本访问对象 QuestionObject 是附有两个脚本的游戏对象的屏幕截图

enter image description here

最佳答案

我认为您误解了继承概念。当你像这里一样声明一个类时:

public class Questions : QuestionMenu {

这意味着 Question 类具有与 QuestionMenu 类相同的函数和变量(我假设它们都是公共(public)的)。但这并不意味着您可以像那样将 2 个游戏对象相互连接。当您在 Parent 上设置问题脚本时,它是另一个对象(我的意思是问题对象)。当您在 Child 上设置 QuestionMenu 脚本时,它是完全不同的新对象。他们也彼此没有联系。你应该做的是:

using UnityEngine;
using System.Collections;

public class Questions {
public Questions dpoint; // u can set this on unity editor by just draging and dropping the parent object here.

void Start () {
    //or you can get it from code I belive
    dpoint = transform.parent.GetComponent<Question>();
    QuestionObject.questionText = "asd";

}

// Update is called once per frame
void Update () {    
    base.QuestionObject.questionText = "asd2";
}

}

希望我没有误解你的问题..

关于C# 脚本(子对象)不允许我访问另一个脚本(这是父对象)统一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776507/

相关文章:

c# - 动态更改 ASP.NET MVC 中的样式属性

c# - SQL Server - 重用以前的查询 - 与 Linq 类似的逻辑

javascript - 从对象数组中计算特定键值

Javascript 压扁深层嵌套的子项

javascript - Object.defineProperty 是否检查属性是否已定义?

java - 将二叉搜索树扩展到红黑树

C++ 模板分支

c# - 为预处理器指令赋值

c# - .Net 4 导致 DLLImport 函数返回失败代码,.Net 2、3 或 3.5 不会

c++ - 通过组合添加类功能