- начни с курсов по c# от ITVDN, когда проедешь все три их курса и успешно сдашь тестирование, можешь к Юнити переходить. Но желательно еще годик другой c# прогером в какой то компании поработать, что бы опыта набраться
У меня как то так на StrangeIoCе Основной скрипт с логикой
Код
using UnityEngine; using System.Collections;
namespace NegativeEffects { //кровотечение public class Blooding : INegativeEffects { private static Blooding _blooding;
public static Blooding BloodingEffect { get { return _blooding ?? (_blooding = new Blooding()); } }
public NegativeEffectsType EffectType { get {return NegativeEffectsType.Blooding;} }
//запуск логики public void Add(GameObject go, EffectLevel damage) { if (go.CompareTag(ManagerTag.Enemy)) { var logic = go.AddComponent<EnemyBloodingLogic>();
logic.StartCoroutine(logic.TakeDamage(damage)); } else if (go.CompareTag(ManagerTag.Player)) { var logic = go.AddComponent<PlayerBloodingLogic>();
logic.StartCoroutine(logic.TakeDamage(damage)); } else { if (GeneraGameSetting._GeneraGameSetting.BuildVersion == BuildVersion.Debug) DebugConsole.Log("[Blooding] Передан нейтральный обьект или обьект имеющий инной тег", 3); } }
//запуск логики public void Add(GameObject go, int count, int damage) {
if (go.CompareTag(ManagerTag.Enemy)) { var logic = go.AddComponent<EnemyBloodingLogic>();
logic.StartCoroutine(logic.TakeDamage(count, damage)); } else if (go.CompareTag(ManagerTag.Player)) { var logic = go.AddComponent<PlayerBloodingLogic>();
logic.StartCoroutine(logic.TakeDamage(count, damage)); } else { if (GeneraGameSetting._GeneraGameSetting.BuildVersion == BuildVersion.Debug) DebugConsole.Log("[Blooding (custom)] Передан нейтральный обьект или обьект имеющий инной тег", 3); } } } }
public class PlayerBloodingLogic : MonoBehaviour { private const float DAMAGE_EVERY_SECONDS = 3f;
#region Кровотечение (кастомное)
//кастомный эффект Кровотечение public IEnumerator TakeDamage(int damage, int count) { while (count > 0) { //нанесение урона PlayerParams.HealthState(damage, HealthStateDamageType.Damage); //дебаг if (GeneraGameSetting._GeneraGameSetting.BuildVersion == BuildVersion.Debug) Debug.Log("[Эффект Кровотечение(кастомный) ] " + PlayerParams._PlayerParams.gameObject.name + " получил " + damage + " урона");
count--;
yield return new WaitForSeconds(DAMAGE_EVERY_SECONDS); }
Destroy(this); }
#endregion
#region Кровотечение
//уровни эффекта Кровотечение public IEnumerator TakeDamage(EffectLevel level) { int count; //количество ударов int damage; //дамаг
switch (level) { //1 уровень Кровотечения case EffectLevel.One: count = 5; damage = 7; while (count > 0) { PlayerParams.HealthState(damage, HealthStateDamageType.Damage); //дебаг if (GeneraGameSetting._GeneraGameSetting.BuildVersion == BuildVersion.Debug) Debug.Log("[Эффект Кровотечение ] " + PlayerParams._PlayerParams.gameObject.name + " получил " + damage + " урона");
count--;
yield return new WaitForSeconds(5f); } break; //2 уровень Кровотечения case EffectLevel.Two: count = 7; damage = 25; while (count > 0) { PlayerParams.HealthState(damage, HealthStateDamageType.Damage); //дебаг if (GeneraGameSetting._GeneraGameSetting.BuildVersion == BuildVersion.Debug) Debug.Log("[Эффект Кровотечение ] " + PlayerParams._PlayerParams.gameObject.name + " получил " + damage + " урона");
count--;
yield return new WaitForSeconds(3f); } break; //3 уровень кровотечения case EffectLevel.Three: count = 10; damage = 40; while (count > 0) { PlayerParams.HealthState(damage, HealthStateDamageType.Damage); //дебаг if (GeneraGameSetting._GeneraGameSetting.BuildVersion == BuildVersion.Debug) Debug.Log("[Эффект Кровотечение ] " + PlayerParams._PlayerParams.gameObject.name + " получил " + damage + " урона");
using UnityEngine; using System.Collections; using strange.extensions.context.impl;
/*=========================================== = Класс-контролер для управления заклинаниями = и наложением негативных эффектов =============================================*/
//список заклинаний Школы Огня public enum FireMagicSpell { FireClot, FireBall, FeedFire, FireWall, Meteor }
public class NegativeEffectsAndSpellControl : ContextView {
public static NegativeEffectsAndSpellControl NegativeEffectsAndSpell { get { if (!_negativeEffectsAndSpellControl) { _negativeEffectsAndSpellControl = FindObjectOfType<NegativeEffectsAndSpellControl>() as NegativeEffectsAndSpellControl; }
return _negativeEffectsAndSpellControl; } }
#endregion
private void Awake() { this.context = new NegativeEffectsAndSpellContext(this); context.Start(); }
//ДЛЯ ТЕСТОВ public void Update() { //if (Input.GetButtonDown("Fire1")) //{ // var ray = Camera.main.ScreenPointToRay(Input.mousePosition); // EarthMagicStoneBallController.EarthStoneBallControl.CreateSpell(ray);
//} //else if (Input.GetKeyDown(KeyCode.A)) //{ // FireMagicFeedFireController.FireFeedControl.CreateSpell(); //} }
-делаешь иерархию нормальную -делаешь каждый баф отдельным компонентом со своей логикой -делаешь контроллер , который будет накладывать эти баффы -через котроллер просто добавляешь к обьекту через AddComponent нужный бафф со всей его логикой, дальше он уже независимо от других компонентов будет работать ну в общем MVC
А если сделать что-то такое? Для уровня устанавливаешь максимальное кол-во очков. Так же для уровня устанавливаешь сложность: легко, средне, сложно. %max_score% - максимальное кол-во очков. %time% - время прохождения в секундах. %difficult% - сложность (лёгко 1, средне 2, сложно 3)
Формула: %max_score% - (%time% / %difficult%)
Возьмём уровень, средней сложности, максимум 1000 очков. Игрок прошёл за 120 сек.
Да, у меня как раз нечто подобное сейчас. Видать это лучший вариант) Всем спс за внимание, походу оставлю все как есть
Можно запустить таймер в самом начале уровня. И при финишном событии ставим следующие условия: скажем если натикало 60 сек или больше - дать 2 очка, 50 - 40 сек - 5 очков, и т.д. Если не определенное количество очков нужно, а прямая зависимость от времени, то так же оперируешь с значением таймера, запущенного вначале.
Я так и делаю ) У меня так для каждого уровня я в ручную устанавливаю некое среднее значение скорости прохождения уровня, а потом когда получаю значения игроков, перевожу уже в очки. Я думал может есть какая то формула, что бы все одной строкой сделать
Привет Может есть кто из геймдизов тут, таккова задача. В игре процедурно генерированные подземелья, нужно в конце начислять очки и учитывать время за которое игрок прошел данж. Вопрос нужна формула зависимости очков от времени прохождения уровня, чем меньше затрачено времени на прохождения , тем больше начисляется очков. единственное, что мне пришло в голову - это для каждого уровня добавить среднее время необходимое на его прохождение и от этого времени уже отталкиваться
b_eat, у тебя часом комп не отключался во время компиляции проекта? Если во время компиляции комп отрубается по каким то причинам(свет отрубило, перегрелся и т.д), то скорей всего хана проекту, он уже нормально в вебжл потом работать не будет
репутацию "движка для школьников и инди-аутистов" - что за вздор, какая еще репутация? вообще не припомню какие то критические баги, если ты юзаешь бетки всякие и сырые сборки твои проблемы .... движок для школьников и набора команд теперь UE4