Есть ещё одна бредовая идея: сделать анимацию/морфинг для одной вершины, которая будет сопоставлена с вершиной, или реализовать самому интерполяцию (с кривыми как вариант) по ключевым положениям вершин (кажется это можно провернуть в редакторе, заранее вызывая SkinnedMeshRenderer.BakeMesh для разных значений морфинга, тогда будет меньше вычислений в рантайм).
Добавлено (03 октября 2016, 21:44) --------------------------------------------- Пока искал инфу URGINSAN ответил, в первом абзаце как раз об этом, но подробнее.
Сообщение отредактировал Lertmind - Понедельник, 03 Октября 2016, 21:47
uslucifer, я давал ссылку State Machine Behaviours, последний раздел про это "Communication between MonoBehaviours and StateMachineBehaviours". Основная мысль: state machine behaviour - asset, поэтому не может хранить ссылки на объекты сцены, но может получить или они могут быть переданы. Примеры кода там есть.
Добавлено (03 октября 2016, 20:00) --------------------------------------------- beril, математический курс по векторной алгебре или конкретно для разработчиков игр? На каком языке и важны ли субтитры? Так же стоит уточнить, что понимается под векторной алгеброй, я понял как о разделе линейной алгебры. И неплохо было бы указать какой объём должно покрывать.
Сообщение отредактировал Lertmind - Понедельник, 03 Октября 2016, 20:05
Тебе стоит уточнить, именно Game Maker 8, а не 8.1? Видел упоминания, что в старых версиях (7.0) были проблемы с синхронизацией и её обычно вовсе отключали. Попробуй включить вертикальную синхронизацию принудительно в настройках видеокарты для твоей игры.
uslucifer, Варианты: 1. Через добавление события в конце анимации. В указанном методе вызовешь Destroy() или произведёшь другие деструктивные действия. Using Animation Events. 2. Использование coroutine: * Как в пример для Animation.clip, где просто указывается время анимации. Для Animator надо написать что-то такое:
Код
yield return new WaitForSeconds(myAnimator.GetCurrentAnimatorStateInfo(0).length); // Удаляем объект // ...
* Написание своей сопрограммы:
Код
public class WaitForEndAnimation : CustomYeildInstruction { private Animator animator;
public override bool keepWaiting { get { return animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1.0f; } }
public WaitForEndAnimation(Animator animator) { this.animator = animator; } }
IEnumerator Start() { yield return new WaitForEndAnimation(myAnimator); // Удаляем объект // ... }
Нет, не равносилен, логика абсолютно разная. И нужда, как раз была обусловлена необходимостью из за логики вычеслений.
Я не учёл, что твой код предполагает под $db_rareItem = 0 вероятность 1%, а под $db_rareItem = 99 вероятность 100% (оператор '>=' запутывает) и подумал, что ты ошибся, поэтому я рассчитывал на [0, 100]. Если брать твой код как есть, то равносильный код:
Проверил статистически, можно доказать и математически. Если не понимаешь, почему код равносилен, советую изучить матчасть.
Цитатаmaker-rus ()
Замечайте после того, как вникните в особенности языка
В библиотеках нормальных языков есть random() для промежутка [0, 1). Лучше воспринимать как шутку, так как для С и C++ такое недоразумение также присутствует.
Цитатаmaker-rus ()
в данном случае можно и с целыми числами работать и не прибигать к тому, что потом вылезит боком.
Для меня так удобней, а генерировать числа от 0 до 99999 чтобы задать вероятность 0.125% считаю нелепым, хотя и возможным. Не знаю про какие проблемы ты намекаешь.
Цитатаmaker-rus ()
А если он захочет на конкретный предмет выставить определнный процент выпадания?
* Во-первых, редкость намекает, что вероятность для каждой категории одинаковая. В "4. Случайно выбираешь предмет с выбранной редкостью." я не указал, но предполагается, что будет применён фильтр или вычисления характеристик предмета, чтобы игрок 5-ого уровня не получил предмет для 40-ого. * Во-вторых, как я написал, это один из вариантов и конечно он зависит от механики, так что нет смысла добавлять мысленно к моему алгоритму функционал, который сам же решаешь неэффективным методом, и жаловаться на это. Не говоря о том, что сам автор ещё не понимает как у него будет организована система предметов или не счёл важным нас посвятить в неё. * В-третьих, если ты разбираешься в высоконагруженных приложениях, то почему не предложил нормальный вариант? В логике твоего совета мы знаем какой предмет надо выкинуть, но не знаем частоту выпадения и обращаемся за ней в базу. Может ты предполагал, что будет выбор по всем предметам базы на основе их вероятностей, но твой код и слова на это не указывают.
Сообщение отредактировал Lertmind - Четверг, 29 Сентября 2016, 19:59
Какой мощности? Недавно был рекорд в 600 Гбит/с, защита от такой атаки стоит сотни тысяч долларов в год. Так что без указания мощности, такие высказывания - враньё.
Сообщение отредактировал Lertmind - Четверг, 29 Сентября 2016, 04:49
Так что нет нужды в лишнем сложении. Замечу, что лучше хранить во float от 0 до 1, тогда можно легко задавать, допустим, 0.125%:
Код
if (random() < 0.00125) { "ok" }
По какой-то нелепости в php нет случайного числа для промежутка [0, 1) и приходится писать костыли, впрочем никогда не считал PHP нормальным языком.
Добавлено (29 сентября 2016, 00:46) --------------------------------------------- DeadDay, вот тебе вариант: 1. В БД указываешь не вероятность, а редкость (5 возможных значений). 2. Когда происходит событие (бой, кража, ...) случайно определяешь выпадет ли предмет вообще. 3. Для каждой редкости свои вероятности, значит выбираешь редкость предмета с помощью алгоритма выбора предметов с разными вероятностями. Этот алгоритм известен всем, например вариант у Unity:
Код
float Choose (float[] probs) { float total = 0;
foreach (float elem in probs) { total += elem; }
float randomPoint = Random.value * total;
for (int i= 0; i < probs.Length; i++) { if (randomPoint < probs[i]) { return i; } randomPoint -= probs[i]; } return probs.Length - 1; }
import random def random_pick(some_list, probabilities): x = random.uniform(0, 1) cumulative_probability = 0.0 for item, item_probability in zip(some_list, probabilities): cumulative_probability += item_probability if x < cumulative_probability: break return item
4. Случайно выбираешь предмет с выбранной редкостью.
valera_za, у неактивного объекта не вызывается Start(), пока он не активируется. Также Update(), FixedUpdate(), OnGUI() не вызываются пока он неактивный, а отключение GameObject прерывает сопрограммы. Так что надо управлять объектом через другой активный объект. В общем-то, в твоём коде нет ошибки, просто в herolala2 нельзя указывать объект на котором этом скрипт и нельзя держать это скрипт на неактивном объекте.
Сообщение отредактировал Lertmind - Среда, 28 Сентября 2016, 23:43
alexsilent, это же официальная документация, там всегда есть код на JS.
Добавлено (28 сентября 2016, 22:56) --------------------------------------------- Тот раздел в Scripting PropertyDrawer. Заметь, что я давал EditorGUILayout.BeginHorizontal для Custom Editor, у PropertyDrawer такое нельзя использовать. Разберёшься по примерам.
При чём здесь форум, открываем документацию Vector3.Lerp: Interpolates between the vectors a and b by the interpolant t. The parameter t is clamped to the range [0, 1]. Если нужна экстраполяция используй Vector3.LerpUnclamped.
JackNazaryan, можно догадаться, что игра эта http://gcup.ru/forum/9-81849-1, а так как в JS генерировать не вариант, то код будет на PHP. Самый интересный вопрос в расстановке вероятностей. В Diablo-похожих играх уникальные только у боссов или за какие-то определённые действия, для остальных правильно подобранные коэффициенты.
Сообщение отредактировал Lertmind - Среда, 28 Сентября 2016, 10:02
TLT, вместо смайлов вставляется html-код для смайла, а надо чтобы код был неизменным: если в коде >( , то и должно отображаться >( . Так же, как и сказал ShortKedr, будет плодиться html-мусор после каждого изменения сообщения, так как он будет находить символы смайла в атрибуте alt.
Сообщение отредактировал Lertmind - Понедельник, 26 Сентября 2016, 02:35
Spaceship, потому что это код на UnityScript (JavaScript), а не C#. Сохраняй с расширением js (playerhealth.js).
Добавлено (25 сентября 2016, 19:07) --------------------------------------------- Советую выбросить в лес этот устаревший урок и не писать на JS. Находи новые уроки.
Если было, извините. Заметил, что на текст отмеченный кодом действуют смайлы, такого раньше кажется не было. Приходится каждый раз отключать смайлы. Пример: 1. Должно быть: gameObject.GetComponent<Camera> (); // Без пробела после '>' 2. Это нормально: gameObject.GetComponent<Camera ); 3. Плохо:
URGINSAN, там new не нужен (необязателен), а вот запятой не хватает.
Добавлено (25 сентября 2016, 17:55) --------------------------------------------- Вот правильный код:
Код
private var player_health_max : int = 100; private var player_health_min : int = 100; private var player_health : int = 100; private var player_death : boolean = false;
function Update () { if (player_health >=player_health_max) { player_health = player_health_max; }
black_gui, My_character_controller и MouseLook должны существовать, иначе будет ошибка об отсутствии.
Добавлено (25 сентября 2016, 18:06) --------------------------------------------- Кстати, желательно использовать #pragma strict для js, хотя само использование js нежелательно.
Сообщение отредактировал Lertmind - Воскресенье, 25 Сентября 2016, 18:07