[Решено] Отнятие жизни при падении с высоты - Форум Игроделов
Пт, 17 Май 2024, 09:20 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум Игроделов » UNITY3D » СКРИПТИНГ » [Решено] Отнятие жизни при падении с высоты
[Решено] Отнятие жизни при падении с высоты
DadaJavaДата: Чт, 29 Дек 2011, 18:24 | Сообщение # 1
 
Сообщений: 44
Награды: 2
Репутация: 30
Статус: Offline
Люди, подскажите, пожалуйста, как реализовать отнятие жизней у главного героя при падении с большой высоты, например: бежал, прыгнул с горы, упал, умер. Или так: спрыгнул с крыши, отнялось такое-то количество жизней. Пытался найти где-нибудь ответ, но нигде на подобные темы не натыкался.
 
СообщениеЛюди, подскажите, пожалуйста, как реализовать отнятие жизней у главного героя при падении с большой высоты, например: бежал, прыгнул с горы, упал, умер. Или так: спрыгнул с крыши, отнялось такое-то количество жизней. Пытался найти где-нибудь ответ, но нигде на подобные темы не натыкался.

Автор - DadaJava
Дата добавления - 29 Дек 2011 в 18:24
ЛевшаДата: Чт, 29 Дек 2011, 19:11 | Сообщение # 2
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Quote (Chel-Game)
как реализовать отнятие жизней у главного героя при падении с большой высоты

тут много нюансов, надо сначала узнать вашу механику падения.
от нее и зависит реализация.
А сделать можно по разному.


X.cor.R (Prologue)
 
Сообщение
Quote (Chel-Game)
как реализовать отнятие жизней у главного героя при падении с большой высоты

тут много нюансов, надо сначала узнать вашу механику падения.
от нее и зависит реализация.
А сделать можно по разному.

Автор - Левша
Дата добавления - 29 Дек 2011 в 19:11
DekterevДата: Пт, 30 Дек 2011, 00:30 | Сообщение # 3
 
Сообщений: 1753
Награды: 16
Репутация: 892
Статус: Offline
Можно проверять, коллизии FPC с объектами. Если нет коллизий с ландшафтом и нет коллизий с какими либо объектами, т.е. Collider висит в воздухе - то начинать отсчет координат. (Но тут возможен баг, т.к. Collider игрока может зацепиться за какой-либо объект который находится сбоку а не под ногами. Т.е. появится коллизия с объектом, допустим, при падении с крыши здания и касании-рикошете от какой-то стены. Чтобы такого небыло, можно расположить в самом низу FPC Collider так, чтобы не выступал за габариты FPC по бокам и сверху, а только снизу. Тогда будет возможность столкновения этого Collider только с объектами которые расположены под FPC).
Занести в переменную координату высоты и проверять коллизии. При появлении коллизии с окружающим миром, занести новое значение оси координат в другую переменную и сравнить результат, насколько изменились координаты. Если координаты по вертикальной оси изменились больше чем на 2м - отнять хитпоинты в зависимости от величины значения. Можно пропорционально высоте отнимать хитпоинты. В диапазоне от 3м до 12м распределить хитпоинты так, что-бы при падении с 3м отнималосьь ~10% а при падении с 10..12м все 100%. Т.е. по 10% на метр высоты, выше допустимой.


Поиск | Правила | Новые сообщения
 
СообщениеМожно проверять, коллизии FPC с объектами. Если нет коллизий с ландшафтом и нет коллизий с какими либо объектами, т.е. Collider висит в воздухе - то начинать отсчет координат. (Но тут возможен баг, т.к. Collider игрока может зацепиться за какой-либо объект который находится сбоку а не под ногами. Т.е. появится коллизия с объектом, допустим, при падении с крыши здания и касании-рикошете от какой-то стены. Чтобы такого небыло, можно расположить в самом низу FPC Collider так, чтобы не выступал за габариты FPC по бокам и сверху, а только снизу. Тогда будет возможность столкновения этого Collider только с объектами которые расположены под FPC).
Занести в переменную координату высоты и проверять коллизии. При появлении коллизии с окружающим миром, занести новое значение оси координат в другую переменную и сравнить результат, насколько изменились координаты. Если координаты по вертикальной оси изменились больше чем на 2м - отнять хитпоинты в зависимости от величины значения. Можно пропорционально высоте отнимать хитпоинты. В диапазоне от 3м до 12м распределить хитпоинты так, что-бы при падении с 3м отнималосьь ~10% а при падении с 10..12м все 100%. Т.е. по 10% на метр высоты, выше допустимой.

Автор - Dekterev
Дата добавления - 30 Дек 2011 в 00:30
BIOKOTZENДата: Вт, 10 Апр 2012, 22:59 | Сообщение # 4
Нет аватара
 
Сообщений: 6
Награды: 0
Репутация: 0
Статус: Offline
он просил просто скрипт , отмеряется высота при которой отнимается определенное хп ...
 
Сообщениеон просил просто скрипт , отмеряется высота при которой отнимается определенное хп ...

Автор - BIOKOTZEN
Дата добавления - 10 Апр 2012 в 22:59
DadaJavaДата: Вс, 27 Май 2012, 18:16 | Сообщение # 5
 
Сообщений: 44
Награды: 2
Репутация: 30
Статус: Offline
Неужели никто не задумывался об реализации этого в своём проекте? Или никогда не находил скрипта на просторах форумов об Unity?
 
СообщениеНеужели никто не задумывался об реализации этого в своём проекте? Или никогда не находил скрипта на просторах форумов об Unity?

Автор - DadaJava
Дата добавления - 27 Май 2012 в 18:16
ЛевшаДата: Вс, 27 Май 2012, 18:50 | Сообщение # 6
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Сделай ускорение падения и умножай урон на ускорение.
Чем дольше будет лететь, тем больше урон.


X.cor.R (Prologue)
 
СообщениеСделай ускорение падения и умножай урон на ускорение.
Чем дольше будет лететь, тем больше урон.

Автор - Левша
Дата добавления - 27 Май 2012 в 18:50
commandobyДата: Пн, 28 Май 2012, 08:25 | Сообщение # 7
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
Левша, мне тоже такая идея в голову пришла, точнее замерять разницу, между скоростью свободного падения и скоростью свободного падения за секунду до первой. Когда игрок приземляется, то она обнуляется и разница резко возрастает. Может что нить получится.

Блог.
 
СообщениеЛевша, мне тоже такая идея в голову пришла, точнее замерять разницу, между скоростью свободного падения и скоростью свободного падения за секунду до первой. Когда игрок приземляется, то она обнуляется и разница резко возрастает. Может что нить получится.

Автор - commandoby
Дата добавления - 28 Май 2012 в 08:25
DadaJavaДата: Пн, 28 Май 2012, 21:01 | Сообщение # 8
 
Сообщений: 44
Награды: 2
Репутация: 30
Статус: Offline
А при помощи какой команды можно расчитать ускорение персонажа?
 
СообщениеА при помощи какой команды можно расчитать ускорение персонажа?

Автор - DadaJava
Дата добавления - 28 Май 2012 в 21:01
commandobyДата: Пн, 28 Май 2012, 21:18 | Сообщение # 9
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
Chel-Game, в скрипте CharacterMotor переменная velocity вроде бы и обозначает скорость.

Блог.
 
СообщениеChel-Game, в скрипте CharacterMotor переменная velocity вроде бы и обозначает скорость.

Автор - commandoby
Дата добавления - 28 Май 2012 в 21:18
DadaJavaДата: Пн, 28 Май 2012, 22:22 | Сообщение # 10
 
Сообщений: 44
Награды: 2
Репутация: 30
Статус: Offline
А если во время игры так случится, что игрок разовьёт ту скорость которая будет задана для отнятия жизни? Причём не во время падения.
 
СообщениеА если во время игры так случится, что игрок разовьёт ту скорость которая будет задана для отнятия жизни? Причём не во время падения.

Автор - DadaJava
Дата добавления - 28 Май 2012 в 22:22
ЛевшаДата: Пн, 28 Май 2012, 22:44 | Сообщение # 11
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Quote (Chel-Game)
игрок разовьёт ту скорость которая будет задана для отнятия жизни?

Вертикальную, отрицательную скорость (когда вниз летит).


X.cor.R (Prologue)
 
Сообщение
Quote (Chel-Game)
игрок разовьёт ту скорость которая будет задана для отнятия жизни?

Вертикальную, отрицательную скорость (когда вниз летит).

Автор - Левша
Дата добавления - 28 Май 2012 в 22:44
DadaJavaДата: Пн, 28 Май 2012, 22:47 | Сообщение # 12
 
Сообщений: 44
Награды: 2
Репутация: 30
Статус: Offline
Всё, теперь мне всё понятно. Значит необходимо расчитать вертикальную скорость, а затем умножать её на урон от падения.
 
СообщениеВсё, теперь мне всё понятно. Значит необходимо расчитать вертикальную скорость, а затем умножать её на урон от падения.

Автор - DadaJava
Дата добавления - 28 Май 2012 в 22:47
commandobyДата: Пн, 28 Май 2012, 23:11 | Сообщение # 13
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
Quote (Левша)
Вертикальную, отрицательную скорость (когда вниз летит).

А почему бы не отнимать здоровье, когда игрок разгоняется и сталкивается со стеной. biggrin Я пока таких шутеров невидел. Но ведь в реальности же ... Попробуйте так сделать...

Хотя можно даже не отнимать здоровье, а просдо делать эффект (ай, больно). biggrin

Добавлено (28.05.2012, 23:09)
---------------------------------------------
Кстати, в кооперативном режиме portal 2, когда робот приземляется с любой высоты, то ничего не происходить, но если робот сталкивается со стеной или потолком - его бъёт током и очень весело скрючивает.

Добавлено (28.05.2012, 23:11)
---------------------------------------------


Блог.

Сообщение отредактировал commandoby - Пн, 28 Май 2012, 23:12
 
Сообщение
Quote (Левша)
Вертикальную, отрицательную скорость (когда вниз летит).

А почему бы не отнимать здоровье, когда игрок разгоняется и сталкивается со стеной. biggrin Я пока таких шутеров невидел. Но ведь в реальности же ... Попробуйте так сделать...

Хотя можно даже не отнимать здоровье, а просдо делать эффект (ай, больно). biggrin

Добавлено (28.05.2012, 23:09)
---------------------------------------------
Кстати, в кооперативном режиме portal 2, когда робот приземляется с любой высоты, то ничего не происходить, но если робот сталкивается со стеной или потолком - его бъёт током и очень весело скрючивает.

Добавлено (28.05.2012, 23:11)
---------------------------------------------

Автор - commandoby
Дата добавления - 28 Май 2012 в 23:11
ЛевшаДата: Пн, 28 Май 2012, 23:52 | Сообщение # 14
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Quote (Chel-Game)
Значит необходимо расчитать вертикальную скорость, а затем умножать её на урон от падения.

Да, с расстоянием падения скорость будет нарастать, отсюда:
текущая скорость = гравитация + ускорение (каждый кадр).
После столкновения:
урон = текущая скорость - гравитация. (применяем урон).
текущая скорость = гравитация. (обнуляем ускорение).


X.cor.R (Prologue)
 
Сообщение
Quote (Chel-Game)
Значит необходимо расчитать вертикальную скорость, а затем умножать её на урон от падения.

Да, с расстоянием падения скорость будет нарастать, отсюда:
текущая скорость = гравитация + ускорение (каждый кадр).
После столкновения:
урон = текущая скорость - гравитация. (применяем урон).
текущая скорость = гравитация. (обнуляем ускорение).

Автор - Левша
Дата добавления - 28 Май 2012 в 23:52
DadaJavaДата: Чт, 31 Май 2012, 16:55 | Сообщение # 15
 
Сообщений: 44
Награды: 2
Репутация: 30
Статус: Offline
В общем возникла проблема во время написания скрипта.
Code

var health = 100;
var damage = 10;

function FixedUpdate () {
health = 100 - (damage * rigidbody.velocity);
}

Unity не хочет приравнивать velocity к int и float. И даже если оставить переменную helath пустой. То он всё-равно отказывается отнимать от ста произведение урона на скорость.

Добавлено (31.05.2012, 16:55)
---------------------------------------------
Или возможно я указал не тот velocity?

 
СообщениеВ общем возникла проблема во время написания скрипта.
Code

var health = 100;
var damage = 10;

function FixedUpdate () {
health = 100 - (damage * rigidbody.velocity);
}

Unity не хочет приравнивать velocity к int и float. И даже если оставить переменную helath пустой. То он всё-равно отказывается отнимать от ста произведение урона на скорость.

Добавлено (31.05.2012, 16:55)
---------------------------------------------
Или возможно я указал не тот velocity?


Автор - DadaJava
Дата добавления - 31 Май 2012 в 16:55
commandobyДата: Чт, 31 Май 2012, 19:15 | Сообщение # 16
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
На сколько я помню, velocity - это переменная Vector3 (хранит значения скорости по 3 осям). Использовать её можно так: velosity.x , velosity.y , velosity.z - эти переменные float.

Добавлено (31.05.2012, 19:15)
---------------------------------------------
Буду краток:
Открываем CharacterMotor (Standard Assets/Character Controllers/Sources/Scripts/CharacterMotor) и пишем:
Code
static var speed : Vector3; //Переменная "шпион", которая будет принимать значения скорости.
function Update () {
speed = velocity; //Присваиваем нашему шпиону значение скорости.
}
Далее открываем скрипт, висящий на игроке и хранящий в себе значение здоровья:
Code
var health = 100; // Это здоровье
var speed1 = 0.0;   
var speed2 = 0.0;   
var speedA = true;

function Update () {
if (speedA == true) { Speed (); } // Включение функции определения удара
if (speed2 > 20) { health -= 100; } else { //Смертельное падение
if (speed2 > 15) { health -= 50; } else { //Опасное падение
if (speed2 > 10) { health -= 20; } } } // Лёгкое падение
}

function Speed () { // Сама функция определения падения
speedA = false; // Ставим функцию на паузу
speed1 = CharacterMotor.speed.y; // Записываем значение скорости движения по оси Y от нашего шпиона
yield WaitForSeconds (0.05); // Ждём 0.05 с
speed2 = speed - CharacterMotor.speed.y; //Находим разницу, между настоящей скоростью и скоростью 0.05 секундами ранее
speedA = true; //Включаем функцию. Она повторяется.
}
По моему должно работать.


Блог.

Сообщение отредактировал commandoby - Чт, 31 Май 2012, 19:15
 
СообщениеНа сколько я помню, velocity - это переменная Vector3 (хранит значения скорости по 3 осям). Использовать её можно так: velosity.x , velosity.y , velosity.z - эти переменные float.

Добавлено (31.05.2012, 19:15)
---------------------------------------------
Буду краток:
Открываем CharacterMotor (Standard Assets/Character Controllers/Sources/Scripts/CharacterMotor) и пишем:
Code
static var speed : Vector3; //Переменная "шпион", которая будет принимать значения скорости.
function Update () {
speed = velocity; //Присваиваем нашему шпиону значение скорости.
}
Далее открываем скрипт, висящий на игроке и хранящий в себе значение здоровья:
Code
var health = 100; // Это здоровье
var speed1 = 0.0;   
var speed2 = 0.0;   
var speedA = true;

function Update () {
if (speedA == true) { Speed (); } // Включение функции определения удара
if (speed2 > 20) { health -= 100; } else { //Смертельное падение
if (speed2 > 15) { health -= 50; } else { //Опасное падение
if (speed2 > 10) { health -= 20; } } } // Лёгкое падение
}

function Speed () { // Сама функция определения падения
speedA = false; // Ставим функцию на паузу
speed1 = CharacterMotor.speed.y; // Записываем значение скорости движения по оси Y от нашего шпиона
yield WaitForSeconds (0.05); // Ждём 0.05 с
speed2 = speed - CharacterMotor.speed.y; //Находим разницу, между настоящей скоростью и скоростью 0.05 секундами ранее
speedA = true; //Включаем функцию. Она повторяется.
}
По моему должно работать.

Автор - commandoby
Дата добавления - 31 Май 2012 в 19:15
MrKyzminДата: Сб, 22 Сен 2012, 21:55 | Сообщение # 17
 
Сообщений: 70
Награды: 0
Репутация: 1
Статус: Offline
а куда именно кидать в какую строку

/人◕ ‿‿ ◕人\

Если помог не поленитесь и поставьте +
 
Сообщениеа куда именно кидать в какую строку

Автор - MrKyzmin
Дата добавления - 22 Сен 2012 в 21:55
HunjethДата: Сб, 22 Сен 2012, 23:43 | Сообщение # 18
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
Quote
В общем возникла проблема во время написания скрипта.

Code

var health = 100;
var damage = 10;

function FixedUpdate () {
        magnitude3d = Mathf.Max(Mathf.Max(Mathf.Abs(rigidbody.velociy.x),Mathf.Abs(rigidbody.velocity.y)),Mathf.Abs(rigidbody.velocity.z));
        health = 100 - (damage * magnitude3d);
}


Сообщение отредактировал Hunjeth - Сб, 22 Сен 2012, 23:53
 
Сообщение
Quote
В общем возникла проблема во время написания скрипта.

Code

var health = 100;
var damage = 10;

function FixedUpdate () {
        magnitude3d = Mathf.Max(Mathf.Max(Mathf.Abs(rigidbody.velociy.x),Mathf.Abs(rigidbody.velocity.y)),Mathf.Abs(rigidbody.velocity.z));
        health = 100 - (damage * magnitude3d);
}

Автор - Hunjeth
Дата добавления - 22 Сен 2012 в 23:43
NitroDriveДата: Вт, 19 Мар 2013, 11:05 | Сообщение # 19
 
Сообщений: 6
Награды: 0
Репутация: 0
Статус: Offline
Что-то тема зависла, так и не решили вопрос?
Я вот думаю в гонках тоже сделать, если упал в пропасть, тоже жизни в ноль...


Игры не делают людей злыми. Лаги делают!
 
СообщениеЧто-то тема зависла, так и не решили вопрос?
Я вот думаю в гонках тоже сделать, если упал в пропасть, тоже жизни в ноль...

Автор - NitroDrive
Дата добавления - 19 Мар 2013 в 11:05
seamanДата: Вт, 19 Мар 2013, 11:49 | Сообщение # 20
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Цитата
так и не решили вопрос?

Кто думать не умеет - не решил. Хотя там решать то особо нечего.
 
Сообщение
Цитата
так и не решили вопрос?

Кто думать не умеет - не решил. Хотя там решать то особо нечего.

Автор - seaman
Дата добавления - 19 Мар 2013 в 11:49
Форум Игроделов » UNITY3D » СКРИПТИНГ » [Решено] Отнятие жизни при падении с высоты
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024