ПОМОГИТЕ!(РЕШЕНО)

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

ПОМОГИТЕ!(РЕШЕНО)

Сообщение Survivelgame 26 июн 2016, 13:18

Ситуация такая, как сделать так, что бы при падении с высоты, игрок получал урон, информации особо нигде нет, но может кто-нибудь всё же поможет. Если будете писать скрипты(или их части), то ипсользуйте по возможности язык C#, он мне больше понятен.
Последний раз редактировалось Survivelgame 27 июн 2016, 16:35, всего редактировалось 1 раз.
Survivelgame
UNец
 
Сообщения: 12
Зарегистрирован: 23 июн 2016, 08:57

Re: ПОМОГИТЕ!

Сообщение Rpabuj1 26 июн 2016, 13:29

Survivelgame писал(а):Ситуация такая, как сделать так, что бы при падении с высоты, игрок получал урон, информации особо нигде нет, но может кто-нибудь всё же поможет. Если будете писать скрипты(или их части), то ипсользуйте по возможности язык C#, он мне больше понятен.

Хм... Возникли такие мысли:
1. Когда игрок падает, включать таймер.
2. Когда приземлился, выключать таймер.
3. На основании данных таймера вычислять урон.
4. От значения переменной здоровья вычесть значение урона.
Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: ПОМОГИТЕ!

Сообщение lawsonilka 26 июн 2016, 15:12

Rpabuj1 писал(а):
Survivelgame писал(а):Ситуация такая, как сделать так, что бы при падении с высоты, игрок получал урон, информации особо нигде нет, но может кто-нибудь всё же поможет. Если будете писать скрипты(или их части), то ипсользуйте по возможности язык C#, он мне больше понятен.

Хм... Возникли такие мысли:
1. Когда игрок падает, включать таймер.
2. Когда приземлился, выключать таймер.
3. На основании данных таймера вычислять урон.
4. От значения переменной здоровья вычесть значение урона.

а если игрок прыгает или летит почти горизонтально? Если есть ригидбоди то просто можно рассчитывать по velocity.y
lawsonilka
UNIверсал
 
Сообщения: 390
Зарегистрирован: 21 окт 2014, 14:48

Re: ПОМОГИТЕ!

Сообщение Survivelgame 26 июн 2016, 20:11

lawsonilka писал(а):
Rpabuj1 писал(а):
Survivelgame писал(а):Ситуация такая, как сделать так, что бы при падении с высоты, игрок получал урон, информации особо нигде нет, но может кто-нибудь всё же поможет. Если будете писать скрипты(или их части), то ипсользуйте по возможности язык C#, он мне больше понятен.

Хм... Возникли такие мысли:
1. Когда игрок падает, включать таймер.
2. Когда приземлился, выключать таймер.
3. На основании данных таймера вычислять урон.
4. От значения переменной здоровья вычесть значение урона.

а если игрок прыгает или летит почти горизонтально? Если есть ригидбоди то просто можно рассчитывать по velocity.y


Я написал такой скрипт:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class falldamage : MonoBehaviour {

public float Ytransform;//что бы получить скорость падения
public Text YtransformText;//вывод её на экране для большего удобства

void Update ()
{
YtransformText.text = "" + Ytransform;//присваиваю скорость к тесксту
Ytransform = GetComponent<Rigidbody>().velocity.y;//здесь её и должен получать, но это не происходит, переменная всегда на 0
}
}
Что я сделал не так. Я просто не знаю об этом, впервые сталкиваюсь, может что-то не так сделал.
Survivelgame
UNец
 
Сообщения: 12
Зарегистрирован: 23 июн 2016, 08:57

Re: ПОМОГИТЕ!

Сообщение Anonymyx 26 июн 2016, 20:32

Синтаксически - все так. Все должно отображаться. Ошибки выдает?
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: ПОМОГИТЕ!

Сообщение Survivelgame 26 июн 2016, 20:39

Anonymyx писал(а):Синтаксически - все так. Все должно отображаться. Ошибки выдает?

Нет. Но если сделать так:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class falldamage : MonoBehaviour {

public float Ytransform;//что бы получить скорость падения
public Text YtransformText;//вывод её на экране для большего удобства
public float speed;
public Text speedText;

void Update ()
{
speedText.text = "" + speed;
YtransformText.text = "" + Ytransform;//присваиваю скорость к тесксту
speed = GetComponent<Rigidbody>().velocity.y;//здесь её и должен получать, но это не происходит, переменная всегда на 0
Ytransform = transform.position.y;//позиция по y
}
}
То я получаю позицию по y, но скорость так и не получаю. Так бы я мог сделать проверку на то, что если позиция y начала уменьшатся, то создаётся числовая переменная которая вычисляет на какое расстояние падает игрок и когда позиция y перестаёт изменятся, то отнимается здоровье(изменение растояния * урон).
Survivelgame
UNец
 
Сообщения: 12
Зарегистрирован: 23 июн 2016, 08:57

Re: ПОМОГИТЕ!

Сообщение Survivelgame 26 июн 2016, 20:42

Survivelgame писал(а):
Anonymyx писал(а):Синтаксически - все так. Все должно отображаться. Ошибки выдает?

Нет. Но если сделать так:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class falldamage : MonoBehaviour {

public float Ytransform;//что бы получить скорость падения
public Text YtransformText;//вывод её на экране для большего удобства
public float speed;
public Text speedText;

void Update ()
{
speedText.text = "" + speed;
YtransformText.text = "" + Ytransform;//присваиваю скорость к тесксту
speed = GetComponent<Rigidbody>().velocity.y;//здесь её и должен получать, но это не происходит, переменная всегда на 0
Ytransform = transform.position.y;//позиция по y
}
}
То я получаю позицию по y, но скорость так и не получаю. Так бы я мог сделать проверку на то, что если позиция y начала уменьшатся, то создаётся числовая переменная которая вычисляет на какое расстояние падает игрок и когда позиция y перестаёт изменятся, то отнимается здоровье(изменение растояния * урон).

Забыл изменить комментарии:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class falldamage : MonoBehaviour {

public float Ytransform;//что бы получить позицию падения
public Text YtransformText;//вывод её на экране для большего удобства
public float speed;//что бы скорость падения
public Text speedText;//вывод её на экране для большего удобства

void Update ()
{
speedText.text = "" + speed;//присваиваю скорость к тесксту
YtransformText.text = "" + Ytransform;//присваиваю позицию к тесксту
speed = GetComponent<Rigidbody>().velocity.y;//здесь её и должен получать, но это не происходит, переменная всегда на 0
Ytransform = transform.position.y;//позиция по y
}
}
Survivelgame
UNец
 
Сообщения: 12
Зарегистрирован: 23 июн 2016, 08:57

Re: ПОМОГИТЕ!

Сообщение Cr0c 27 июн 2016, 00:48

Очуметь! Плюсовать к стрингу флоат можно! Ytransform.ToString() попробуйте. И про типы данных обновите в памяти.
Рб кешировать желательно.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: ПОМОГИТЕ!

Сообщение Paul Siberdt 27 июн 2016, 00:58

Cr0c писал(а):Очуметь! Плюсовать к стрингу флоат можно! Ytransform.ToString() попробуйте. И про типы данных обновите в памяти.
Рб кешировать желательно.

А что такого, сам никогда не пользую ToString и собираю стринги сложением всего подряд. :)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: ПОМОГИТЕ!

Сообщение Survivelgame 27 июн 2016, 11:33

Cr0c писал(а):Очуметь! Плюсовать к стрингу флоат можно! Ytransform.ToString() попробуйте. И про типы данных обновите в памяти.
Рб кешировать желательно.

Я не совсем понимаю, что ты предлагаешь.
Survivelgame
UNец
 
Сообщения: 12
Зарегистрирован: 23 июн 2016, 08:57

Re: ПОМОГИТЕ!

Сообщение Cr0c 27 июн 2016, 11:42

Предлагаю дебагом velocity.y посмотреть в динамике и использовать явное преобразование типов.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: ПОМОГИТЕ!

Сообщение Survivelgame 27 июн 2016, 11:49

Cr0c писал(а):Предлагаю дебагом velocity.y посмотреть в динамике и использовать явное преобразование типов.

Дак я же вывел в текст переменную, дебаг мне ничего нового не выдаст.
Survivelgame
UNец
 
Сообщения: 12
Зарегистрирован: 23 июн 2016, 08:57

Re: ПОМОГИТЕ!

Сообщение Survivelgame 27 июн 2016, 15:47

Короче, вот что я смог сделать:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class falldamage : MonoBehaviour {

public hpandfood sc;//переменная со статистикой персонажа(изначально планировал лишь здоровье и голод)
public Transform Player;//объект от которого будем пускать луч
public float TimeAir;//время нахождения в воздухе
public float raydistance;//дистанция луча(сделал ввиде переменной для удобства, что бы мог во время игры её легко настраивать)

void Start()
{
sc = GameObject.Find("scripts").GetComponent<hpandfood>();//присваиваю переменной "sc" скрипт
}

void Update ()
{
Debug.DrawRay(Player.position, -transform.up*raydistance);//проверка направления луча
Ray ray = new Ray(Player.position, -transform.up * raydistance);//пускаю луч
RaycastHit hit;//нужен для проверки сталкновения луча с чем либо
if(Physics.Raycast(ray, out hit))//если лучь с чем-то слталкивается
{
sc.hp -= TimeAir;//то мы отнимаем отнимаем время проведения в воздухе от здоровья
TimeAir = 0;// и обнуляем это время
}
else//если лучь не сталкивается
{
TimeAir += Time.deltaTime;//то время в воздухе мы увеличиваем(но по какой-то причине это не работает)
}
}
}
Я не могу понять, почему переменная TimeAir не увеличивается.
Survivelgame
UNец
 
Сообщения: 12
Зарегистрирован: 23 июн 2016, 08:57

Re: ПОМОГИТЕ!

Сообщение Paul Siberdt 27 июн 2016, 16:06

Survivelgame писал(а):Я не могу понять, почему переменная TimeAir не увеличивается.


Ну, как тут не понять? Это значит, что "лучь с чем-то слталкивается".

Дебажьте свой код, если не можете понять, построчно. ПО-СТРОЧ-НО.
Дебажьте рэйкаст, рисуя луч, не только в начале, но и под результат рейкаста, дебажьте коллайдеры, выводя логи, дебажьте флаги и условия входа в разные ветви логики.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: ПОМОГИТЕ!

Сообщение Survivelgame 27 июн 2016, 16:23

Paul Siberdt писал(а):
Survivelgame писал(а):Я не могу понять, почему переменная TimeAir не увеличивается.


Ну, как тут не понять? Это значит, что "лучь с чем-то слталкивается".

Дебажьте свой код, если не можете понять, построчно. ПО-СТРОЧ-НО.
Дебажьте рэйкаст, рисуя луч, дебажьте коллайдеры, выводя логи, дебажьте флаги и условия входа в разные ветви логики.


Он ни с чем не сталкивался, я специально добавил платформу с которой можно упасть, и когда я падал(платформа высокая) переменная не увеличивалась, да и я нашёл наилучшее решение, вот скрипт:

using UnityEngine;
using System.Collections;

public class falldamage : MonoBehaviour {

public hpandfood sc;//переменная со скриптом здоровья персонажа
public Transform Player;//объект от которого будем пускать луч
public float TimeAir;//время нахождения в воздухе

void Start()
{
sc = GameObject.Find("scripts").GetComponent<hpandfood>();//присваиваю переменной "sc" скрипт со здоровьем
}

void Update ()
{
Debug.DrawRay(Player.position, -transform.up*2);//проверка направления луча(если не указать число, то дебажный луч не будет виден)
Ray ray = new Ray(Player.position, -transform.up);//пускаю луч
RaycastHit hit;//нужен для проверки столкновения луча с чем либо
if(Physics.Raycast(ray, out hit))//если луч с чем-то сталкивается
{
if(hit.distance >=2)//и если длина луча больше чем 2
{
TimeAir += Time.deltaTime*20;// то мы увеличиваем переменную TimeAir со временем умноженное на 20(можно изменить как вы хотите)
}
else// иначе
{
sc.hp -= TimeAir;//мы отбавляем от здоровья персонажа TimeAir
TimeAir = 0;//и обнуляем эту переменную
}
}
}
}
Скрипт работает, здоровье отнимается, и потом переменная становится на 0. Долго мучался и только первый парень(или девушка, я не знаю), дал толковый совет. Проблема только в том, что если встать на край чего-нибудь, то луч ничего не касается, и считает, что игрок падает, в следствии игрок долго стоит на краю, отходит от него и подыхает, надо будет подумать как это исправить. А так скрипт полностью рабочий. Кому надо берите, может придумаете как исправить ту проблему(хотя игроки редко настолько близко к краю стоят и этот баг могут даже не заметить.).
Survivelgame
UNец
 
Сообщения: 12
Зарегистрирован: 23 июн 2016, 08:57

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 18