Здравствуйте дорогие однофорумчане! Давно не виделись. Извините, что не читал всё выше сказанное, но вот мой вариант (для 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; } } }
Привет друзья я тоже задался таким вопросом и написал скрипт
Код
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(); }
Ну вариант не очень, ведь перс может иметь разный вес и поэтому разное время будет лететь, лучше отсчитывать кол-во координат, которые он пролетел, как у меня. <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>
Я в своей игре (White track) отсчитываю изменение в скорости. Только в моей игре игрок не может умереть от удара, поэтому я отсчитываю скорость по всем координатам, и при сильном ударе об землю или стену камера начинает трястись и темнеть, постепенно угасая. Блог.