void OnAgeChanged(Age.Update update) { _age = Mathf.FloorToInt(age.Data.Age); if (update.Age.HasValue) { _age = Mathf.FloorToInt(update.Age.Value); } float growUpAge = age.Data.GrowUpAge; if (update.GrowUpAge.HasValue) { growUpAge = update.GrowUpAge.Value; } if (_age >= growUpAge) { transform.localScale = _originScale; return; } transform.localScale = _originScale * (SimulationSettings.NPCChildhoodMinWeekness + (_age / growUpAge) * (1 - SimulationSettings.NPCChildhoodMinWeekness)); }
// Start is called before the first frame update void Start() { allAnimals.Add(_entityId.Id, this); _id = _entityId.Id; var update = new DinoAiData.Update { CurrentAiState = aiDataReader.Data.CurrentAiState }; OnAiDataChanged(update); var update2 = new Age.Update { Age = age.Data.Age }; OnAgeChanged(update2); var update3 = new DinoAttrs.Update { }; OnAttrsChanged(update3); }
private bool IfShouldDie() { // No.1 如果已经死了,就啥都不干了 if (!IsAlive) { return(true); } // No.2 恢复健康 // BUG:如果服务器算不过来,而导致[UnityGameLogic] Worker disconnected // 这时候health,age等变量会被置空,从而抛出异常。这是正常现象。 // 应该去查找为什么会与服务器断开链接,往往是因为计算量太大了,算不过来了而导致的本问题。Sep.7.2019, Liu Gang. _curHealth = health.Data.CurrentHealth; _maxHealth = health.Data.MaxHealth; if (_curHealth + ScriptableAnimalStats.liveCost < _maxHealth) {// 健康的恢复速度是粮食消耗速度的一半,不能大于或者粮食消耗的速度,否则就不会饿死了 _curHealth += ScriptableAnimalStats.liveCost / 2; } // No.3 消耗粮食 float cost = ScriptableAnimalStats.liveCost * _deltaTime; _curFood = attrsWriter.Data.CurrentFood; if (_curFood >= cost) { _curFood -= cost; } else { _curFood = 0; _curHealth -= cost - _curFood;// 粮食不够,就消耗健康 } var update = new DinoAttrs.Update { CurrentFood = _curFood, }; attrsWriter.SendUpdate(update); var update3 = new Health.Update { CurrentHealth = _curHealth }; health.SendUpdate(update3); // No.4 年龄增加 float lastAge = age.Data.Age; float nowAge = age.Data.Age + _deltaTime; float growupAge = age.Data.GrowUpAge; _age = Mathf.FloorToInt(nowAge); // 仅用于显示 var update2 = new Age.Update { Age = nowAge }; age.SendUpdate(update2); if (_age >= growupAge && lastAge < growupAge) {// 成人以后,血量恢复至原始大小 GrowUp(); } // No.5 判断是否该死了 if (_curHealth <= 0) { Die(); return(true); } return(false); }