2015-03-07 2 views
1

У меня есть два скрипта C#.
Один для пушки:Unity3D C# Inheritance Issue

using UnityEngine; 
using System.Collections; 

public class CannonScript : MonoBehaviour { 

    public GameObject bullet; //bullet object 
    public Transform spawnpoint; //spawn point 
    float bulletspeed=-3000f; //bullet speed 
    public int bullets=10; //number of bullets 

    void Update() { 
     if ((Input.GetKeyDown ("space") || Input.GetMouseButtonDown(0)) && bullets > 0) { 
      GameObject newbullet; //make a new bullet 
      newbullet=Instantiate(bullet,spawnpoint.position, spawnpoint.rotation)as GameObject; //instantiate the new bullet 
      newbullet.rigidbody.AddForce(spawnpoint.forward * bulletspeed); //add force to the new bullet 
      bullets--; //decrease the number of bullets left 
     } 
    } 
} 

Другой текст пользовательского интерфейса на экране:

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

public class BulletCountScript : CannonScript { //inherit from the CannonScript 

    Text text; 

    void Start() { 
     text = GetComponent<Text>(); 
    } 

    void Update() { 
     text.text = bullets.ToString(); //display the number of bullets 
    } 
} 

Когда я запускаю его, текст пользовательского интерфейса на экране не меняется.
Я знаю, что CannonScript работает правильно, потому что я могу снимать только 10 пуль.
Как я могу отобразить текст в пользовательском интерфейсе, оставшееся от пуль?
Я делаю что-то неправильно с наследованием?

ответ

3

Я думаю, что вы не понимаете концепцию наследования. Проблема, которую я вижу, это оба класса: разные экземпляры, так что это причина, потому что текст всегда один и тот же.

Чтобы добиться того, что вы хотите, просто сделать что-то вроде этого:

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

public class BulletCountScript : MonoBehaviour { 

    public CannonScript cannon; 
    Text text; 

    void Start() { 
     text = GetComponent<Text>(); 
    } 

    void Update() { 
     text.text = cannon.bullets.ToString(); //display the number of bullets 
    } 
} 

Просто перетащите объект, которому принадлежит CannonScript атрибуту игрового объекта в BulletCountScript, теперь оба они ссылаются то же пример.

Надеюсь, это поможет! Удачи!

+0

Wow! Оно работает! Благодаря! –

+0

Наследование может быть обоюдоострым мечом и часто с использованием композиции, такой как это лучшее и более гибкое решение –