Добавлен
Начал потихоньку ковырять UDK. появился вопрос по кизмету. Как сделать движение объекта относительно его поворота. Так как передвижение по координатам делается легко, то вот с движением объекта относительно его поворота не могу понять как.

Принятый ответ

Sergant1000, краткий гайд тут настрочу.
  • Сам нод - класс, который наследуется от SequenceAction
  • В свойствах можно задать имя нода (параметр ObjName) и категорию (параметр ObjCategory)
  • За момент, когда "сигнал" входит в нод, отвечает событие Activated, основной код выполнения стоит писать в нем
  • За параметры нода отвечает массив VariableLinks, в котором изначально находится параметр Target; очистить массив можно, прописав в свойствах по умолчанию VariableLinks.Empty
  • Объявление параметра выглядит следующим образом
VariableLinks(0)=(ExpectedType=class'SeqVar_Float',LinkDesc="Argument",PropertyName=CosineArgument,bWriteable=true)
Тут ExpectedType - какого типа нод должен приниматься (чаще всего достаточно поменять слово после прочерка на тип), LinkDesc - как будет подписан "вход" параметра на ноде, PropertyName - переменная в классе, в которую будет заноситься внесенная инфа (например, в моем примере в классе должна быть переменная CosineArgument типа Float), bWriteable - можно ли изменять значение этого параметра (можно ставить false для, например, результата).
  • Входные и выходные точки представляют собой массивы bool InputLinks и OutputLinks соответственно.
То есть, синус будет выглядеть где-то так:
class SeqAct_GetCosine extends SequenceAction;

var float CosineArgument;
var float CosineResult;

event Activated()
{
    CosineResult = Cos(CosineArgument);
}

defaultproperties
{
    ObjName="Calc Cosine"
    ObjCategory="Misc"
    VariableLinks.Empty
    VariableLinks(0)=(ExpectedType=class'SeqVar_Float',LinkDesc="Argument",PropertyName=CosineArgument)
    VariableLinks(1)=(ExpectedType=class'SeqVar_Float',LinkDesc="Result",PropertyName=CosineResult)
}
Как-то так, должно работать, у меня сейчас нет UDK, чтобы проверить. Таким же образом можно сделать любые другие вспомогательные ноды.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
23
10 лет назад
0
В теории везде это делается так: берётся угол поворота, от него берутся синус и косинус и множатся на скорость. Таким образом получаются отдельные скорости по осям. И объект перемещается по этим осевым скоростям. Как оно в udk - не знаю.
0
26
10 лет назад
0
Банальное передвижение: используйте нод Get Location and Rotation, берите из него векторы Location и Rotation, получите новый вектор, равный сумме Location и умноженного на определенный коэффициент Rotation, присвойте новое значение позиции через Set Location and Rotation. Осталось придумать, как менять Rotation в зависимости от входных данных. Я уже не помню, есть ли косинусы/арккосинусы, и прочая тригонометрия в Кисмете. Если есть - берете тот же Rotation, берете его координаты, вычисляете по ним любой тригонометрический показатель (косинус, синус, тангенс), по нему - угол, если есть инпут - меняете соответственным образом угол, опять переделываете в тригонометрический показатель, по нему вычисляете компоненты для обновленного вектора Rotation, нодом Set Vector создаете новый вектор и через тот же Set Location and Rotation присваиваете объекту.
0
17
10 лет назад
0
Проблема в том что я не нашел в кизмете, ни синусов, ни косинусов.
0
26
10 лет назад
0
Sergant1000, недостающие ноды можно написать самому, или поискать в интернете уже готовые решения.
0
17
10 лет назад
0
lentinant, мне бы пример.
0
17
10 лет назад
0
lentinant, можешь сделать гайд по созданию нодов. или ткнуть где посмотреть.
0
26
10 лет назад
0
Sergant1000, краткий гайд тут настрочу.
  • Сам нод - класс, который наследуется от SequenceAction
  • В свойствах можно задать имя нода (параметр ObjName) и категорию (параметр ObjCategory)
  • За момент, когда "сигнал" входит в нод, отвечает событие Activated, основной код выполнения стоит писать в нем
  • За параметры нода отвечает массив VariableLinks, в котором изначально находится параметр Target; очистить массив можно, прописав в свойствах по умолчанию VariableLinks.Empty
  • Объявление параметра выглядит следующим образом
VariableLinks(0)=(ExpectedType=class'SeqVar_Float',LinkDesc="Argument",PropertyName=CosineArgument,bWriteable=true)
Тут ExpectedType - какого типа нод должен приниматься (чаще всего достаточно поменять слово после прочерка на тип), LinkDesc - как будет подписан "вход" параметра на ноде, PropertyName - переменная в классе, в которую будет заноситься внесенная инфа (например, в моем примере в классе должна быть переменная CosineArgument типа Float), bWriteable - можно ли изменять значение этого параметра (можно ставить false для, например, результата).
  • Входные и выходные точки представляют собой массивы bool InputLinks и OutputLinks соответственно.
То есть, синус будет выглядеть где-то так:
class SeqAct_GetCosine extends SequenceAction;

var float CosineArgument;
var float CosineResult;

event Activated()
{
    CosineResult = Cos(CosineArgument);
}

defaultproperties
{
    ObjName="Calc Cosine"
    ObjCategory="Misc"
    VariableLinks.Empty
    VariableLinks(0)=(ExpectedType=class'SeqVar_Float',LinkDesc="Argument",PropertyName=CosineArgument)
    VariableLinks(1)=(ExpectedType=class'SeqVar_Float',LinkDesc="Result",PropertyName=CosineResult)
}
Как-то так, должно работать, у меня сейчас нет UDK, чтобы проверить. Таким же образом можно сделать любые другие вспомогательные ноды.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.