вызов метода дочернего класса в OnMouseDown () спрайта в единстве - PullRequest
0 голосов
/ 30 октября 2018

Добрый день всем, я пытаюсь сделать простую 2D игру и вот как она работает. Предположим, что есть спрайт "палатка", и всякий раз, когда я щелкаю по палатке, консоль распечатывает сообщение. Звучит просто, не так ли? Тем не менее, я словно застрял в середине этого, и я знаю, что после этого я буду так сильно передергивать себя. То, что я сделал в моем сценарии:

public abstract class Player : MonoBehaviour {

protected string _name;
// Use this for initialization
public Player(string name)
{
    _name = name;
}

public string Name
{
    get { return _name; }
    set { _name = value; }
}

void Start () {

}

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

}}  

Далее у меня есть детский класс, который называется Civilian

public class Civilian : Player {

// Use this for initialization

public Civilian(string name):base(name)
{

}
void Start () {

}

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

}

} Затем в моем сценарии «Tentclicked» я хочу вызвать функцию сна при нажатии на спрайт.

public class tentclicked : MonoBehaviour {

void OnMouseDown()
{
   // c.Sleep();
}


// Use this for initialization
void Start () {

}

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

}

}

А вам интересно, что такое c и на что он указывает? Я создал новый класс в другом скрипте под названием testing1.

public class testing1 : MonoBehaviour
{
public Text p1name;
public void Awake()
{
    //p1name.text = "Hello";
    //Civilian C = Scriptss.AddComponent<Civilian>();
    //GameObject theCivilian = GameObject.Find("Scriptss");
    // Civilian c = theCivilian.GetComponent<Civilian>();
    //c.Name = Testingsavename.playernames.username;
    //c.Name = "Hello";


}

// Use this for initialization
void Start()
{
    if (Choosechar.choice.choicecount == 1)
    {
        Civilian c = new Civilian(Testingsavename.playernames.username);
        p1name = GetComponent<Text>();
        p1name.text = c.Name;

    }

Я уже добавил коллайдер в свой спрайт. Ошибка в том, что в tentclicked, c не существует в контексте. Так что я подозреваю, что единство не знает, что такое с. Я думаю о том, чтобы сделать гражданский класс статическим, и я просто назвал Civilian.civilian.Sleep () в сценарии с тенткликом ....

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вы можете осуществлять радиопередачу от текущей позиции мыши к объекту (просто убедитесь, что у объекта есть коллайдер.

void OnMouseDown()
{

   RaycastHit hit; 
   Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
   if ( Physics.Raycast (ray,out hit,100.0f)) 
   {
      Civilian c = hit.collider.gameObject.GetComponent<Civilian>();
      c.Sleep();
   }
}
0 голосов
/ 30 октября 2018

"c" не существует в этом контексте, потому что ваш класс tentclicked не имеет ссылки на него. Найдите «c» с помощью GameObject.Find(string name) и присвойте значение игрового объекта переменной в tentclicked

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...