2015-11-18 51 views
2

我可以從腳本訪問該對象,但是我想直接更改腳本中的對象的值,這不是允許我。這裏是我的主要腳本紙條:C#腳本(子對象)不允許我在另一個腳本(這是父對象)訪問團結

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

+0

? – LumbusterTick

+0

是的 - 我想改變稱爲QuestionObject的gameObject中的值(在結構後立即定義) – Nightshade

回答

1

我想你是誤會了繼承的概念。當你像你這樣在這裏聲明一個類:

public class Questions : QuestionMenu { 

這意味着問題類具有相同的函數和變量與QuestionMenu類(我假設他們都是公衆)。但它並不意味着你可以像這樣連接2個GameObjects。當您在另一個對象(我的意思是問題對象)的父母上設置問題腳本。當你在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"; 
} 

} 

我希望我沒有誤解你的問題..

您要訪問的子類在父類中定義的問題結構
+0

謝謝更好現在我明白了,但我怎麼可以訪問遊戲對象QuestionObject因爲它不是在場景 - 有沒有訪問它像這樣的一種方式 - 因爲我用你的代碼,並沒有找到問題 – Nightshade

+0

我認爲,即使即時通訊困惑現在是什麼問題擺在首位。 – LumbusterTick

+0

所以你的意思是父對象不具有問題腳本? –

1

使用公共靜態問題QuestionObject =新問題();

那麼你就可以訪問和修改子類的價值觀這樣

Parentclass.QuestionObject.value

+0

好了,但現在我得到一個錯誤,除非我拿出base.QuestionObject.questiontext行,也只使用QuestionObject。 questionText仍然沒有什麼區別 - 也許兒童腳本從未被調用過 - 如果是這樣的話,我怎樣才能從父腳本 – Nightshade

+0

中調用它,你可以調用其他腳本,比如@ Sir.Walek如何回答。 – LumbusterTick

+0

你是什麼意思,也許孩子的腳本從來沒有被稱爲?如果它附加到一個遊戲對象並且在場景中處於活動狀態,它將被運行並將更改該值。 – LumbusterTick