유니티를 활용해서 비교적 간단하게 인간형 3D 캐릭터 모델을 교체하는 방식으로 변신하는 효과를 연출해봤습니다. 혹시나 관심 있는 분들은 유니티 4.2 버전에서 새 프로젝트를 만드시고 첨부파일 아바타데모 패키지를 가져와서 Game 씬을 실행해보시면 테스트 하실 수 있습니다. 이 방법이 정석인지는 알 수 없으나 구현에는 문제가 없네요. 개인적으로 보유하고 있는 3D 캐릭터 모델이 있다면 FBX 를 유니티로 가져와서 Animation Type 을 Humonoid 로 수정한 후 씬 내에 Player 게임오브젝트 하위에 붙여 넣고 테스트 해볼 수 있습니다.

[아바타데모 패키지] 관련영상:http://youtu.be/pWrIt05jJ3k


[아래는 이 방법을 활용해서 좀더 응용해본 데모를 실행해본 영상들입니다.]







[아바타데모 관련 코드]
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Player : MonoBehaviour {
    private Animator animator;
    private int total = 0;
    private int idx = 0;
    Transform avatarGroup;
    public string[] names;
    public Transform[] models;
    public Avatar[] avatars;

    void Start () {
        InitModels();
    }

    void InitModels()
    {
        animator = GetComponent<Animator>();
        avatarGroup = GameObject.Find("AvatarGroup").transform;
        int i = 0;
        List<Transform> modelList = new List<Transform>();
        foreach (Transform model in transform) modelList.Add(model);
        if (modelList.Count < 1) return;
        models = modelList.ToArray();
        total = models.Length;
        names = new string[total];
        avatars = new Avatar[total];
        for (i = 0; i < total; i++)
        {
            Transform model = models[i];
            names[i] = model.name;
            Animator ctrl = model.GetComponent<Animator>();
            if (ctrl==null) continue;
            avatars[i] = ctrl.avatar;
            Destroy(ctrl);
            if (i == 0) model.active = true;
            else model.active = false;
        }
        for (i = 1; i < total; i++) models[i].transform.parent = avatarGroup;
        animator.avatar = avatars[0];
    }

    void ChangeAvatar()
    {
        if (total < 1) return;
        Transform model = models[idx];
        model.active = false;
        model.parent = avatarGroup;
        animator.avatar = null;
        idx = (idx + 1) % total;
        model = models[idx];
        model.parent = transform;
        model.active = true;
        animator.avatar = avatars[idx];
    }
}

2013/10/27 16:33 2013/10/27 16:33

댓글을 달아 주세요