[Решено] Отнятие жизни при падении с высоты - Страница 2 - Форум Игроделов
Пт, 17 Май 2024, 04:59 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум Игроделов » UNITY3D » СКРИПТИНГ » [Решено] Отнятие жизни при падении с высоты
[Решено] Отнятие жизни при падении с высоты
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
Форум Игроделов » UNITY3D » СКРИПТИНГ » [Решено] Отнятие жизни при падении с высоты
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024