Есть несколько способов сделать подобные вещи, но мне больше нравится этот подход, потому что технические художники легко взаимодействуют с ним (все, что ему нужно - это специальное имя на объекте). Вы можете сделать так, чтобы ваш скрипт персонажа верхнего уровня сканировал его дочерние элементы и искал объекты с указанным вами соглашением об именах.
foreach(Transform child in gameObject.GetComponentsInChildren<Transform>()) {
if( child.name == "AttachmentPointOrWhatever" ) {
myEffectsObject.transform.parent = child;
myEffectsObject.transform.localPosition = Vector3.zero;
}
}
Это работает, потому что Unity будет обновлять позиции костей на основе вашей импортированной анимации, поэтому объект эффектов будет следовать за точкой, которую вы импортировали с вашей анимацией.
Что касается создания анимации, то я из Maya и 3ds Max, но идея должна быть одинаковой для блендера: добавьте дополнительные кости для точек привязки и убедитесь, что они привязаны к вашей модели (или добавили весу кожи или какому-либо термину в Блендере). У них не должно быть весов на любых вершинах, но они должны быть в наборе связывания, чтобы Unity распознавала их как часть вашей анимации и правильно анимировала точки.