Survivelgame писал(а):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. Долго мучался и только первый парень(или девушка, я не знаю), дал толковый совет. Проблема только в том, что если встать на край чего-нибудь, то луч ничего не касается, и считает, что игрок падает, в следствии игрок долго стоит на краю, отходит от него и подыхает, надо будет подумать как это исправить. А так скрипт полностью рабочий. Кому надо берите, может придумаете как исправить ту проблему(хотя игроки редко настолько близко к краю стоят и этот баг могут даже не заметить.).