Вторник, 19 Марта 2024, 08:54

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [354]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [144]
Статьи о программах для создания игр, уроки и описания.
Софт [39]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [160]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [128]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Игры какого типа вы предпочитаете делать?
Всего ответов: 16668
Главная » Статьи » Создание игр

Unity - Инверсная Кинематика (Pro-версия)
Большинство 3D-анимаций проигрываются путем поворота костей скелета по заданным значениям (ключам). Позиции дочерних костей определяются позициями родительских. Этот метод управления скелетом называется прямая кинематика.

Однако, часто бывает полезно взглянуть на задачу с другой стороны. Можно работать в обратном направлении и задавать позиции родительских костей в зависимости от положения дочерних. Это очень удобно, когда вы хотите, чтобы персонаж касался выбранных игроком объектов или реалистично ходил по неровной поверхности. Этот метод называется Инверсная Кинематика (IK) и доступен в Mecanim для любого человекоподобного персонажа с правильно настроенным скелетом.

Чтобы использовать IK вам нужно разместить на сцене объекты, с которыми ваш персонаж будет взаимодействовать, а затем настроить IK через скрипт, использующий специальные функции для IK-анимации: SetIKPositionWeight, SetIKRotationWeight, SetIKPosition, SetIKRotation, SetLookAtPosition, bodyPosition, bodyRotation.

На картинке выше видно, что персонаж держит в руках цилиндр. Как это сделать?

Нужно разместить на сцене персонажа с настроенным скелетом и добавить к нему скрипт, который будет управлять IK. Назовем его IKCtrl.

Код
using UnityEngine;
using System;
using System.Collections;

[RequireComponent(typeof(Animator))]  

public class IKCtrl : MonoBehaviour {

  protected Animator animator;

  public bool ikActive = false;
  public Transform rightHandObj = null;

  void Start ()  
  {
  animator = GetComponent<Animator>();
  }

  //Возвращаемся к IK
  void OnAnimatorIK()
  {
  if(animator) {

  //Если IK включен, то направляем правую руку к цели  
  if(ikActive) {

  //weight = 1.0 означает, что правая рука будет стремиться к цели с максимальным приоритетом.
  animator.SetIKPositionWeight(AvatarIKGoal.RightHand,1.0f);
  animator.SetIKRotationWeight(AvatarIKGoal.RightHand,1.0f);

  //Направляем правую руку к цели.
  if(rightHandObj != null) {
  animator.SetIKPosition(AvatarIKGoal.RightHand,rightHandObj.position);
  animator.SetIKRotation(AvatarIKGoal.RightHand,rightHandObj.rotation);
  }  

  }

  //Если IK не активен, тогда стремиться к оригинальной позиции.
  else {  
  animator.SetIKPositionWeight(AvatarIKGoal.RightHand,0);
  animator.SetIKRotationWeight(AvatarIKGoal.RightHand,0);  
  }
  }
  }  
}


Создайте цилиндр и разместите его на сцене так, как вам нужно. Далее переместите его из инспектора в "Right Hand Obj" скрипта IKCtrl.

Запустите игру и посмотрите, как персонаж берет и отпускает цилиндр при включении и выключении ikActive.

Источник: КЛИК»

Категория: Создание игр | Добавил: kvestpro (20 Марта 2014) | Автор: Владислав
Просмотров: 13401 | Комментарии: 5 | Рейтинг: 5.0/3 |
Теги: U3D, Unity3D, IK, Mecanim, Инверсная Кинематика, Pro-версия, Unity, Кинематика, Урок
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Unity - Инверсная Кинематика (Pro-версия)», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 5
+3-
1 id0   (20 Марта 2014 21:26) [Материал]
id0C Mecanim не имел толком дела, пользуюсь стандартной анимацией, скажите, а вот надо сделать чтобы персонаж ставил ноги на землю (когда идёт по ступенькам, например, чтобы ноги не проваливались), намного сложнее это сделать? И как это отразится на производительности, если персонажей много?

+3-
2 kvestpro   (20 Марта 2014 21:47) [Материал]
kvestproНе сказать, чтобы это прям легко. На Asset store есть пример.

+2-
3 id0   (20 Марта 2014 22:45) [Материал]
id0Спасибо.

+1-
4 ZeroCool   (23 Апреля 2014 19:53) [Материал]
ZeroCoolпопробуй locomotion system

+1-
5 kvestpro   (27 Апреля 2014 18:23) [Материал]
kvestproОна не работает с Mecanim.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Moai
  • ORTS
  • Torque 3D
  • Apocalyx
  • NeoAxis Engine
  • GemRB
  • Verge
  • GLEngine2D
  • AppSalute Creator
  • G3D Engine
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг