Добро пожаловать на сайт "Game Creating CommUnity"
Здравствуйте, уважаемый пользователь!

Возможно, вы впервые на этом сайте и мы очень надеемся, что вам у нас понравится. Администрация сайта сделает всё возможное, чтобы ваше пребывание на сайте было максимально комфортным. Спасибо за внимание!

P.S. Данное окно вас больше не потревожит
[Решено] Отнятие жизни при падении с высоты - Страница 2 - Форум Игроделов
Пт, 18 Июл 2025, 23:42 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
[Решено] Отнятие жизни при падении с высоты
AIDENДата: Ср, 26 Июн 2013, 16:51 | Сообщение # 21
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
Я уже гдето отвечал на такой вопрос? Да ладно, держы :
Скрипт C# - PlayerFallDamage :

Код
 
 
using UnityEngine;  
   
using System.Collections;  
   
using System.Collections.Generic;  

   
public class PlayerFallDamage : MonoBehaviour {  

   
RaycastHit uHit;  
   
CharacterController uCharControler;  
   
public float uHealth = 100.0f;  
   
public float fallDamageCoef = 1.0f;  
   
float lastVelocity = 0.0f;  
   
float velocityLimit = -15.0f;  
   
private bool uGUIEnable = false;  

   
void fDEBUG (){  
   GUI
.Label (new Rect (1, 1, 100, 100), "Health: " + uHealth);  
   
}  

   
void fGroundet () { //Функция расчета урона от падения  
   
if (uCharControler.isGrounded) {  
   
if (lastVelocity < velocityLimit) {  
   
float damage = -lastVelocity * fallDamageCoef;  
   
Damage(damage);  
   lastVelocity
= 0.0f;  
   
};  
   
} else  
   lastVelocity
= uCharControler.velocity.y;  
   
}  
   
float lastShot=0;  
   
int i = 1;  

   
void Damage(float damage) {  
   uHealth
-= damage;  
   
}  

   
Vector2 VC = Vector2.zero;  

   
void DrawGUI() {  
   GUI
.EndScrollView();  
   
}  

   
void OnGUI () {  
   
#region DrawLabel  
   
Ray uCastRay = new Ray (Camera.mainCamera.transform.TransformPoint (0, 0, 0.5f), Camera.mainCamera.transform.TransformDirection (new Vector3 (0, 0, 5)));  
   
#endregion DrawLabel  

   fDEBUG
();  
   
if(uGUIEnable == true)DrawGUI();  
   
}  

   
void Start () {  
   uCharControler
= (CharacterController)GetComponent ("CharacterController");  
   
}  

   
void Update () {  
   fGroundet
();  
   
}  
   
}  
 



Моя игра - Collect Fruit
 
СообщениеЯ уже гдето отвечал на такой вопрос? Да ладно, держы :
Скрипт C# - PlayerFallDamage :

Код
 
 
using UnityEngine;  
   
using System.Collections;  
   
using System.Collections.Generic;  

   
public class PlayerFallDamage : MonoBehaviour {  

   
RaycastHit uHit;  
   
CharacterController uCharControler;  
   
public float uHealth = 100.0f;  
   
public float fallDamageCoef = 1.0f;  
   
float lastVelocity = 0.0f;  
   
float velocityLimit = -15.0f;  
   
private bool uGUIEnable = false;  

   
void fDEBUG (){  
   GUI
.Label (new Rect (1, 1, 100, 100), "Health: " + uHealth);  
   
}  

   
void fGroundet () { //Функция расчета урона от падения  
   
if (uCharControler.isGrounded) {  
   
if (lastVelocity < velocityLimit) {  
   
float damage = -lastVelocity * fallDamageCoef;  
   
Damage(damage);  
   lastVelocity
= 0.0f;  
   
};  
   
} else  
   lastVelocity
= uCharControler.velocity.y;  
   
}  
   
float lastShot=0;  
   
int i = 1;  

   
void Damage(float damage) {  
   uHealth
-= damage;  
   
}  

   
Vector2 VC = Vector2.zero;  

   
void DrawGUI() {  
   GUI
.EndScrollView();  
   
}  

   
void OnGUI () {  
   
#region DrawLabel  
   
Ray uCastRay = new Ray (Camera.mainCamera.transform.TransformPoint (0, 0, 0.5f), Camera.mainCamera.transform.TransformDirection (new Vector3 (0, 0, 5)));  
   
#endregion DrawLabel  

   fDEBUG
();  
   
if(uGUIEnable == true)DrawGUI();  
   
}  

   
void Start () {  
   uCharControler
= (CharacterController)GetComponent ("CharacterController");  
   
}  

   
void Update () {  
   fGroundet
();  
   
}  
   
}  
 


Автор - AIDEN
Дата добавления - 26 Июн 2013 в 16:51
VolkOrievithДата: Пн, 01 Июл 2013, 22:18 | Сообщение # 22
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Здравствуйте дорогие однофорумчане! smile Давно не виделись. Извините, что не читал всё выше сказанное, но вот мой вариант (для CharacterController'a):
Код
 
 
var HitPoints = 100.0; // Жизни
 
var DamageFromFall = 0.0; // урон от падения (не надо устанавливать)
 
var DamageFromFallMyltiply = 0.0; // множитель урона от падения (чем больше число, тем больше урон)
 
var MinDamageFallHeight = 0.0; // если расстояние до земли больше этого числа, то урон больше ноля (я устанавливал 20)
 
var MinDifferenceFallPosition = 0.0; // если расстояние до земли больше MinDamageFallHeight, то начинается отсчет разници transform.position.y между началом падения и приземлением, и если разница больше этого числа, то урон больше ноля.
 
private var StartFallPosition = 0.0;
 
var GrHit : RaycastHit;

 
function Update () {
 
if (Physics.Raycast(transform.position + Vector3(0,0.5,0), -transform.up, GrHit)){
 
if (GrHit.distance > 2.2){
 
IsGrounded = false;
 
}else{
 
IsGrounded = true;
 
}
 
if (GrHit.distance >= MinDamageFallHeight){
 
if (DamageFromFall < GrHit.distance * DamageFromFallMyltiply)
 
DamageFromFall = GrHit.distance * DamageFromFallMyltiply;
 
if (StartFallPosition < transform.position.y)
 
StartFallPosition = transform.position.y;
 
}else if (DamageFromFall > 0.0 && IsGrounded){
 
if (MinDifferenceFallPosition <= StartFallPosition - transform.position.y)
 
HitPoints -= DamageFromFall;
 
DamageFromFall = 0.0;
 
}
 
}
 
}
 
СообщениеЗдравствуйте дорогие однофорумчане! smile Давно не виделись. Извините, что не читал всё выше сказанное, но вот мой вариант (для CharacterController'a):
Код
 
 
var HitPoints = 100.0; // Жизни
 
var DamageFromFall = 0.0; // урон от падения (не надо устанавливать)
 
var DamageFromFallMyltiply = 0.0; // множитель урона от падения (чем больше число, тем больше урон)
 
var MinDamageFallHeight = 0.0; // если расстояние до земли больше этого числа, то урон больше ноля (я устанавливал 20)
 
var MinDifferenceFallPosition = 0.0; // если расстояние до земли больше MinDamageFallHeight, то начинается отсчет разници transform.position.y между началом падения и приземлением, и если разница больше этого числа, то урон больше ноля.
 
private var StartFallPosition = 0.0;
 
var GrHit : RaycastHit;

 
function Update () {
 
if (Physics.Raycast(transform.position + Vector3(0,0.5,0), -transform.up, GrHit)){
 
if (GrHit.distance > 2.2){
 
IsGrounded = false;
 
}else{
 
IsGrounded = true;
 
}
 
if (GrHit.distance >= MinDamageFallHeight){
 
if (DamageFromFall < GrHit.distance * DamageFromFallMyltiply)
 
DamageFromFall = GrHit.distance * DamageFromFallMyltiply;
 
if (StartFallPosition < transform.position.y)
 
StartFallPosition = transform.position.y;
 
}else if (DamageFromFall > 0.0 && IsGrounded){
 
if (MinDifferenceFallPosition <= StartFallPosition - transform.position.y)
 
HitPoints -= DamageFromFall;
 
DamageFromFall = 0.0;
 
}
 
}
 
}

Автор - VolkOrievith
Дата добавления - 01 Июл 2013 в 22:18
CoMMoNДата: Сб, 14 Сен 2013, 14:55 | Сообщение # 23
Нет аватара
 
Сообщений: 11
Награды: 0
Репутация: 0
Статус: Offline
VolkOrievith, а как это на C# будет смотреться? чота я уже голову сломал переводя на сишарп
 
СообщениеVolkOrievith, а как это на C# будет смотреться? чота я уже голову сломал переводя на сишарп

Автор - CoMMoN
Дата добавления - 14 Сен 2013 в 14:55
ProfikДата: Чт, 24 Июл 2014, 18:12 | Сообщение # 24
 
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Привет друзья я тоже задался таким вопросом и написал скрипт
Код
 
 
var MinDamageDistance = 10;
 
var DamageCoef = 1;
 
var HealthTXT : GUIText;
 
var Health = 100;

 
private var CharControler : CharacterController;
 
private var Damage = 0.0;
 
private var PosY : float;
 
private var RazY : float;
 
private var GrHit : RaycastHit;
 
private var IsGrounded = false;
 
private var CanWrite = true;

 
function Update()
 
{
 
if (Physics.Raycast(transform.position + Vector3(0,0.5,0), -transform.up, GrHit)){  
   
if (GrHit.distance > 2.2){  
   
IsGrounded = false;  
   
}else{  
   
IsGrounded = true;  
   
}
 
}  
 
FallDamage();
 
HealthTXT.text = Health.ToString();
 
}

 
function FallDamage()
 
{
 
if(!IsGrounded)
 
{
   
if(CanWrite)
   
{
   
PosY = transform.position.y;
   
CanWrite = false;
   
}
   
RazY = PosY - transform.position.y;  
   
if(RazY > MinDamageDistance)
   
{
   
Damage = (RazY - MinDamageDistance) * (DamageCoef + 1);
   
}
 
} else if (IsGrounded)
 
{
   
CanWrite = true;
   
if(Damage>0)
   
{
   
PosY = transform.position.y;
   
Debug.Log(Damage);
   
Health -= Damage;
   
Damage = 0;
   
}
 
}
 
}
 


<iframe src="https://www.indiegogo.com/project/black-skull-pirate-adventure-and-action-game/embedded/8232738" width="222px" height="445px" frameborder="0" scrolling="no"></iframe>
 
СообщениеПривет друзья я тоже задался таким вопросом и написал скрипт
Код
 
 
var MinDamageDistance = 10;
 
var DamageCoef = 1;
 
var HealthTXT : GUIText;
 
var Health = 100;

 
private var CharControler : CharacterController;
 
private var Damage = 0.0;
 
private var PosY : float;
 
private var RazY : float;
 
private var GrHit : RaycastHit;
 
private var IsGrounded = false;
 
private var CanWrite = true;

 
function Update()
 
{
 
if (Physics.Raycast(transform.position + Vector3(0,0.5,0), -transform.up, GrHit)){  
   
if (GrHit.distance > 2.2){  
   
IsGrounded = false;  
   
}else{  
   
IsGrounded = true;  
   
}
 
}  
 
FallDamage();
 
HealthTXT.text = Health.ToString();
 
}

 
function FallDamage()
 
{
 
if(!IsGrounded)
 
{
   
if(CanWrite)
   
{
   
PosY = transform.position.y;
   
CanWrite = false;
   
}
   
RazY = PosY - transform.position.y;  
   
if(RazY > MinDamageDistance)
   
{
   
Damage = (RazY - MinDamageDistance) * (DamageCoef + 1);
   
}
 
} else if (IsGrounded)
 
{
   
CanWrite = true;
   
if(Damage>0)
   
{
   
PosY = transform.position.y;
   
Debug.Log(Damage);
   
Health -= Damage;
   
Damage = 0;
   
}
 
}
 
}
 

Автор - Profik
Дата добавления - 24 Июл 2014 в 18:12
bahaДата: Пт, 25 Июл 2014, 10:52 | Сообщение # 25
Нет аватара
 
Сообщений: 37
Награды: 0
Репутация: 1
Статус: Offline
а если проверять время проведенное в воздухе? Я лично так сделал.
 
Сообщениеа если проверять время проведенное в воздухе? Я лично так сделал.

Автор - baha
Дата добавления - 25 Июл 2014 в 10:52
ProfikДата: Пт, 25 Июл 2014, 11:54 | Сообщение # 26
 
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Цитата baha ()
а если проверять время проведенное в воздухе?

Ну вариант не очень, ведь перс может иметь разный вес и поэтому разное время будет лететь, лучше отсчитывать кол-во координат, которые он пролетел, как у меня.


<iframe src="https://www.indiegogo.com/project/black-skull-pirate-adventure-and-action-game/embedded/8232738" width="222px" height="445px" frameborder="0" scrolling="no"></iframe>
 
Сообщение
Цитата baha ()
а если проверять время проведенное в воздухе?

Ну вариант не очень, ведь перс может иметь разный вес и поэтому разное время будет лететь, лучше отсчитывать кол-во координат, которые он пролетел, как у меня.

Автор - Profik
Дата добавления - 25 Июл 2014 в 11:54
commandobyДата: Пт, 25 Июл 2014, 12:49 | Сообщение # 27
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
Я в своей игре (White track) отсчитываю изменение в скорости. Только в моей игре игрок не может умереть от удара, поэтому я отсчитываю скорость по всем координатам, и при сильном ударе об землю или стену камера начинает трястись и темнеть, постепенно угасая.

Блог.
 
СообщениеЯ в своей игре (White track) отсчитываю изменение в скорости. Только в моей игре игрок не может умереть от удара, поэтому я отсчитываю скорость по всем координатам, и при сильном ударе об землю или стену камера начинает трястись и темнеть, постепенно угасая.

Автор - commandoby
Дата добавления - 25 Июл 2014 в 12:49
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025
Войти Зарегистрироваться