Четверг, 21 Ноября 2024, 21:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Система жизни
MaxFranchДата: Суббота, 14 Мая 2016, 23:19 | Сообщение # 1
уже был
Сейчас нет на сайте
Здравствуйте игроделы.
Не буду углубляться в подробности,а просто обрисую вам ситуацию...
Так вот,я пишу скрипт жизни и нанесения вреда жизни соответственно...
Но вот не могу понять,почему скрипты у меня не взаимодействуют между собой,да ещё и ошибка вылезает...
Код
using UnityEngine;
using System.Collections;

public class Healths : MonoBehaviour {

    public float HP;
    public float MN;
    public Transform pos1;

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
  if (HP == 0) {
   transform.position = new Vector3 (pos1.transform.position.x,pos1.transform.position.y,pos1.transform.position.z);
   HP = +100f;
  }
    }

    void OnGUI(){

  GUI.Box (new Rect (10, 10, 100, 20), "Healths: " + HP);
  GUI.Box (new Rect (10, 35, 100, 20), "Mana: " + MN);

    }

    }

Код
using UnityEngine;
using System.Collections;

public class EnemyTrigger : MonoBehaviour {

    public Healths HP;

    void Update(){
  Healths healths = GetComponent<Healths> ();

    }

    void OnTriggerEnter(Collider Player){
  HP = Healths.HP -10f;

  }
    }

    
1nt3g3rДата: Суббота, 14 Мая 2016, 23:30 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Код написано неверно - похоже, у вас нет опыта программирования.

using UnityEngine;
using System.Collections;

public class EnemyTrigger : MonoBehaviour {

public Healths hp;

void Start() {
hp = GetComponent<Healths> ();
}

void OnTriggerEnter(Collider Player) {
hp.HP -= 10f;
}
}

Должно быть примерно вот так (если оба компонента на одном и том же GameObject). Не хочу очень детально расписывать ваши ошибки, видно, что вы не умеете еще программировать довольно базовые вещи, но основные моменты:

1) Не вызывайте GetComponent в Update - это вызывается каждый кадр, будет тормозить вашу игру, если такого будет много
2) Healths healths = GetComponent<Healths> (); - этой строчкой вы получили обьект Healths, но нигде его не сохранили. Нужно вынести его в локальную переменную - как я написал в примере выше, hp - это и есть нужная локальная переменная.
3) Healths.HP - такое обращение подразумевает, что поле HP статическое, хотя оно таким не является. Почитайте про статические поля.


Нужно писать такие игры, чтобы в них было интересно играть самому
MaxFranchДата: Суббота, 14 Мая 2016, 23:38 | Сообщение # 3
уже был
Сейчас нет на сайте
Цитата 1nt3g3r ()
Код написано неверно - похоже, у вас нет опыта программирования.

using UnityEngine;
using System.Collections;

public class EnemyTrigger : MonoBehaviour {

public Healths hp;

void Start() {
hp = GetComponent<Healths> ();
}

void OnTriggerEnter(Collider Player) {
hp.HP -= 10f;
}
}

Должно быть примерно вот так (если оба компонента на одном и том же GameObject). Не хочу очень детально расписывать ваши ошибки, видно, что вы не умеете еще программировать довольно базовые вещи, но основные моменты:

1) Не вызывайте GetComponent в Update - это вызывается каждый кадр, будет тормозить вашу игру, если такого будет много
2) Healths healths = GetComponent<Healths> (); - этой строчкой вы получили обьект Healths, но нигде его не сохранили. Нужно вынести его в локальную переменную - как я написал в примере выше, hp - это и есть нужная локальная переменная.
3) Healths.HP - такое обращение подразумевает, что поле HP статическое, хотя оно таким не является. Почитайте про статические поля.


Спасибо за объяснение.
1nt3g3rДата: Суббота, 14 Мая 2016, 23:40 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Пожалуйста :)

За критику - не воспринимайте ее очень серьезно, просто развивайтесь. Все с чего-то начинали)


Нужно писать такие игры, чтобы в них было интересно играть самому
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг