анимации по осям X Y

Импорт текстур, моделей, звуков и пр.

анимации по осям X Y

Сообщение Kristof 01 сен 2010, 15:03

День добрый, впервые сталкнулся с проблеммой анимации по осям X - Y.
Делал все по 3DPlatform Tutorial, экспортил анимацию как в .max так и в .fbx форматах, так как указано в UserGuide.
Вся анимация проигрывается нормально, за исключением ее отображения по осям:

Если я нажимаю идти вперед, движения происходит вперед, но анимация идет по оси Y, выходит что чар идет вперед боком.
Тоже касается и стрелок left, right, down, в общем так отображается любая из анимаций персонажа, с Lercz всё впорядке.

Пробавал выравнивать анимацию в максе по осям, тот же резултат.

В чем может выть проблемма подскажите пожалуйста.
Kristof
UNIт
 
Сообщения: 83
Зарегистрирован: 10 ноя 2009, 07:19

Re: анимации по осям X Y

Сообщение Neodrop 01 сен 2010, 15:10

Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: анимации по осям X Y

Сообщение Serge 01 сен 2010, 15:12

И из документации (которую нужно читать) http://unity3d.com/support/documentation/Manual/HOWTO-FixZAxisIsUp.html
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: анимации по осям X Y

Сообщение Kristof 01 сен 2010, 17:42

Спасибо, помогло, теперь все нормально.
Второй вариант в моём случае не помог.
Kristof
UNIт
 
Сообщения: 83
Зарегистрирован: 10 ноя 2009, 07:19

Re: анимации по осям X Y

Сообщение Kristof 02 сен 2010, 03:42

Serge писал(а):И из документации (которую нужно читать) http://unity3d.com/support/documentation/Manual/HOWTO-FixZAxisIsUp.html


Еть вопрос по поводу примера из документации.
Там говорится, что мол создайте пустой объект переташите туда вашу модель с анимацией и вращийте как хотите, скрипты ставьте на объект который создали.

Только вот в этом случае одна загвоздка.
К примеру 2 скрипта ThirdPersonController и ThirdPersonPlayerAnimation, если я ставлю как написано по выше указанной ссылке, никакая анимацие не отображается. Ели же скавлу непосредственно на персонажа, все работает нормально. В чем может дыть загвоздка?

И можноли задать для ThirdPersonController параметр var Character : Transform; если я задаю то анимация не подхватывается. видимо там еще чет надо дописать или изменить, в скрипте ThirdPersonController.

а вот с этим скриптом подхватывается, но от дико глючный, и там CrossFade
Синтаксис:
Используется javascript
// this script adds two things to the default FPS walker
// - It adds movement forward by holding down both mouse keys
// - and it adds auto animation changing between idle, walk and run
// After adding this script to your controller, drag the character model to Target

var speed = 6.0; // standard running speed
var walkSpeed = .8; // walk speed adjust both for your charcter so feet don't slide on ground
var jumpSpeed = 8.0;
var gravity = 20.0;
var Character : Transform;

private var moveDirection = Vector3.zero;
private var grounded : boolean = false;
// a flag to determine idle vs walking/running (so animations do not get started over and over)
private var walking : boolean = false;
// a flag to init idle animation at beginning
private var startup : boolean = true;
// a flag to determine walking vs running
private var running : boolean = true;

function FixedUpdate() {
if (grounded) {
// We are grounded, so recalculate movedirection directly from axes
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

// if both mouse buttons are down, move forward
if (Input.GetMouseButton(0) && Input.GetMouseButton(1))
{
moveDirection.z = 1;
}

moveDirection = transform.TransformDirection(moveDirection);
if(running == true){
moveDirection *= speed;
} else {
moveDirection *= walkSpeed;
}

if (Input.GetButton ("Jump")) {
moveDirection.y = jumpSpeed;
}

// auto toggle between idle and walking animations - based on run / walk switch
if(Character){
// toggle between walk and run with <left shift> R
if(Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.R)){
if(running == true) {
running = false;
if(walking == true) Character.animation.CrossFade("share_walk");
} else {
running = true;
if(walking == true) Character.animation.CrossFade("share_run");
}
}
if(startup == true){
startup = false;
Character.animation.Play("share_wite");
}
if((moveDirection == Vector3.zero)&&(walking == true)){
walking = false;
Character.animation.CrossFade("share_wite");
} else {
if((moveDirection != Vector3.zero)&&(walking == false)){
walking = true;
if(running == true){
Character.animation.CrossFade("share_run");
} else {
Character.animation.CrossFade("share_walk");
}
}
}
}
}

// Apply gravity
moveDirection.y -= gravity * Time.deltaTime;

// Move the controller
var controller : CharacterController = GetComponent(CharacterController);
var flags = controller.Move(moveDirection * Time.deltaTime);
grounded = (flags & CollisionFlags.CollidedBelow) != 0;
}
Последний раз редактировалось Kristof 02 сен 2010, 12:49, всего редактировалось 2 раз(а).
Kristof
UNIт
 
Сообщения: 83
Зарегистрирован: 10 ноя 2009, 07:19

Re: анимации по осям X Y

Сообщение Kristof 02 сен 2010, 03:51

Просто менять оси в максе это конечно хорошо, и не так уж геморно, но вот некотарой анимации етот способ не помогает, ели движения костей плавают в разные углы сцены, в итоге посли смены позиции позиции костей выходит полная белеберда, а с нуля делать анимацию полный ...

Вот посему второй вариант какраз в тему. но увы он не работает, покрайней мере со скриптами которые идут туториалах.

Может надо какую функцию или параметр прописать?
Kristof
UNIт
 
Сообщения: 83
Зарегистрирован: 10 ноя 2009, 07:19

Re: анимации по осям X Y

Сообщение Serge 02 сен 2010, 05:25

Для начала научитесь выкладывать код так, чтобы его можно было прочитать, для это нужно использовать тег syntax.
Еще раз внимательно прочитайте, и переведите - Whenever writing scripts that make use of the y-axis as up, attach them to the Parent empty GameObject. Где здесь написанно –
скрипты ставьте на объект, который создали
?
Скрипт с анимацией нужно оставить на исходном объекте, скрипты перемещения на созданном. Насчет параметра нечего не понял. Приведенный скрипт в данном виде смотреть не стал.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: анимации по осям X Y

Сообщение Kristof 02 сен 2010, 12:46

Serge писал(а):Для начала научитесь выкладывать код так, чтобы его можно было прочитать, для это нужно использовать тег syntax.
Еще раз внимательно прочитайте, и переведите - Whenever writing scripts that make use of the y-axis as up, attach them to the Parent empty GameObject. Где здесь написанно –
скрипты ставьте на объект, который создали
?
Скрипт с анимацией нужно оставить на исходном объекте, скрипты перемещения на созданном. Насчет параметра нечего не понял. Приведенный скрипт в данном виде смотреть не стал.


1- Саздал Empty запихнул в него goblin объект (сотоит из нескольких мешей и костей, на нем же анимация)
2 - Empty назвал Player, в него заложил скрипты ThirdPersonController и ThirdPersonPlayerAnimation, соттветственно в ThirdPersonPlayerAnimation прописал название своей анимации, далее камера на сцену, и т.д.

В итоге анимация которая стоит на объекте goblin отображается нормально, но скрипты ThirdPersonController и ThirdPersonPlayerAnimation объектом goblin не управляют,


Тот код что я выложил , нашел в интернете, породие на ThirdPersonPlayerAnimation, такм для вывода анимации используется команды
"Character.animation.CrossFade("share_walk");", и в параметре var Character : Transform; задается объект который воспроизводит эту анимацию, но увы скрипт работает грусно. Можно сказать что там там единственное что работает это переключение walk - run, и обект ходит только во направлению вперед.
Kristof
UNIт
 
Сообщения: 83
Зарегистрирован: 10 ноя 2009, 07:19

Re: анимации по осям X Y

Сообщение Neodrop 02 сен 2010, 12:59

Лучше пройдите 3D Platform tutorial. Сразу всё станет много яснее.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: анимации по осям X Y

Сообщение Kristof 02 сен 2010, 15:14

Neodrop писал(а):Лучше пройдите 3D Platform tutorial. Сразу всё станет много яснее.

Спасибо, на четвертый раз голова заболит, там ничего интересного. Наверное я не правильно вопрос сформулировал.

Изображение

Что нужно прописать в скрипте ThirdPersonPlayerAnimation чтобы он оказывал влияние непосредственно на объект 3DSMAX
В данном случае он влияет на обект Player, компоненту Animations я на него добавил, чтоб скрипт ThirdPersonPlayerAnimation не ругался, мол нет анимации. ThirdPersonPlayerAnimation не видит анимацию объекта 3DSMAX (F_Player). в итоге по локации ходит бревно в разные стороны:)

И вообще такое возможно?
Так как тот скрипт, что я выкладывал, он оказывает влияние на объект 3DSMAX (F_Player) через var Character : Transform;
Kristof
UNIт
 
Сообщения: 83
Зарегистрирован: 10 ноя 2009, 07:19

Re: анимации по осям X Y

Сообщение Neodrop 02 сен 2010, 17:12

Кстати, у вас устаревшая версия Антареса, о чём показывает синяя кнопочка Get New Version

Касательно вопроса : я не помню на вскидку, но разве для работы этих скриптов, к объекту не должен быть добавлен Character Controller ? :-?
А не, он у вас там есть...
Тогда проще всего - прицепите к посту пакадж сцены для примера.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: анимации по осям X Y

Сообщение Kristof 02 сен 2010, 18:09

Вот выкладываю пакадж, на примере Lertz, сразу говорю, если скрипты поставить на Леца все будет впорядке, поскольку у него на анимации откоса нет, ходить будет правельно. Суть всего етого заключается в том, чтобы заставить вертется лубой обект с его анимацией как угодно, и скрипты взаимодействовали с этим объектом.
http://www.rapidshare.ru/1619332
Kristof
UNIт
 
Сообщения: 83
Зарегистрирован: 10 ноя 2009, 07:19

Re: анимации по осям X Y

Сообщение Kristof 07 сен 2010, 11:25

Решено !
Синтаксис:
Используется javascript
var animationModel : Transform;
var energyBlastCoH : AudioClip;

// @TODO: change these to reflect new naming system, change functions to call animations from Combat.js
private var readySword : AnimationState;
private var readyElementalCannon : AnimationState;

var rightForearmNode : Transform;
var leftForeArmNode : Transform;

@System.NonSerializedAttribute
public var myAnimation : Animation;
function GetAnimation() { return myAnimation; }

function Awake () {
        myAnimation = animationModel.animation;
       
        myAnimation.wrapMode = WrapMode.Loop;
        myAnimation.Stop();
       
        myAnimation["idle"].layer = 0;
        myAnimation["run"].layer = 0;
        myAnimation["run"].speed = 1.5;
        myAnimation["fall"].layer = 0;
        myAnimation["land"].layer = 1;
        myAnimation["land"].speed = 2;

        readySword = myAnimation["readySword"];
        readySword.layer = 8;
        readySword.weight = 1;
        readySword.blendMode = AnimationBlendMode.Additive;
       
        readyElementalCannon = myAnimation["readyElementalCannon"];
        readyElementalCannon.layer = 8;
        readyElementalCannon.weight = 1;
        readyElementalCannon.blendMode = AnimationBlendMode.Additive;
       
        myAnimation["smallSwordSlash"].layer = 1;
        myAnimation["smallSwordSlash"].speed = 2.5;
        myAnimation["bigSwordSlash"].layer = 10;
        myAnimation["bigSwordSlash"].speed = 2;
       
        myAnimation["shootArcane"].layer = 10;
        myAnimation["shootArcane"].speed = 2;
       
        myAnimation["hit"].layer = 15;
        myAnimation["hit"].blendMode = AnimationBlendMode.Additive;
        myAnimation["hit"].wrapMode = WrapMode.Once;
}

function Update()
{              
        if (PlayerControls.isFalling)
        {
                myAnimation.CrossFade("fall", .2);
        }
        else if (PlayerControls.isMoving)
        {
                myAnimation.CrossFade("run", .1);
        }
        else
        {
                myAnimation.CrossFade("idle", .1);
        }
}

function EndFall()
{
        myAnimation.CrossFade("land", .1);
}

function EndAnimation(animClip : String, time : float)
{
        yield new WaitForSeconds(time);
        myAnimation.Stop(animClip);
}

function ReadySword()
{
        myAnimation.CrossFade("readySword");
}

function Attack_Sword()
{
        myAnimation.CrossFade("smallSwordSlash",.1);
        yield WaitForSeconds(myAnimation["smallSwordSlash"].length/2.5);
        myAnimation.Stop("smallSwordSlash");
}

function Ready_ArcaneCannon()
{
        myAnimation.CrossFade("readyElementalCannon");
}

function Attack_ArcaneCannon()
{
        myAnimation.CrossFade("shootArcane",.1);
        yield WaitForSeconds(myAnimation["shootArcane"].length/2);
        myAnimation.Stop("shootArcane");
}

function Die()
{
        myAnimation.Stop();
        Destroy(myAnimation);
        Destroy(this);
}

function Hit()
{
        animationModel.animation.CrossFade("hit", .3);
}
 
Kristof
UNIт
 
Сообщения: 83
Зарегистрирован: 10 ноя 2009, 07:19


Вернуться в Медиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3