Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Medieval Male Customisable Character - Arteria3d BasePack RELEASED

Discussion in 'Assets and Asset Store' started by arteria, Feb 13, 2012.

  1. arteria

    arteria

    Joined:
    May 31, 2007
    Posts:
    2,189
    PROMOTION 1

    IM offering 5 trial versions of this pack today. Email Steve at arteria3d@live.co.uk

    These lucky 5 can test the pack out, evaluate. After 5 days you either stop using it, or pay for the kit at a discounted $115
     
  2. Rajmahal

    Rajmahal

    Joined:
    Apr 20, 2011
    Posts:
    2,101
    Nice archer animations. With the new animations this pack is a lot more versatile. If you want to add anything further, I would suggest a 2 handed weapon animations and dual weapon animations. However, even now, it covers the most typical three RPG archetypes (archer, wizard, warrior).
     
  3. Legacy

    Legacy

    Joined:
    Oct 11, 2011
    Posts:
    651
    We still need some swimming :) a guy can wish cant he lol. But overall the new pack is looking better but i do think you should rethink the splitting meshes part and make a base naked character mesh(with underwear) and release clothing packs that can be used with it. If you didnt look yet, the unity 4 release will be offering a new character animation system that allows you to use any animation from another rig with the same rigging convention. There is obviously much more to it such as blend maps for animation etc but the way i have described building the base character kit will fit the new animation system perfectly.
     
  4. arteria

    arteria

    Joined:
    May 31, 2007
    Posts:
    2,189
    If i do make such a aystem it wont be for a long time. This base character has took an immense ammount of man hours, and more importantly is the need for the female(that i actually started with the idea for physics use. so i may continue on that path).
    There is a swimming animation with this character.. can you not see it?

    Best

    Steve
     
  5. Legacy

    Legacy

    Joined:
    Oct 11, 2011
    Posts:
    651
    Yup there is one but its only a forward swimming animation haha theres no idle or backwards or side to side etc. :p also for cloth simulation check this out: http://forum.unity3d.com/threads/14...ysics-plugin-now-available-on-the-Asset-Store
     
  6. Rajmahal

    Rajmahal

    Joined:
    Apr 20, 2011
    Posts:
    2,101
    In my opinion, the female version of this should be the next priority. With both together, you have what you need to make a full game. A male base by itself is still very limited as you would need to find female models in the same style. Having a male and female base character in a similar style and with a comprehensive animation set is the only way to make this pack useful for most games.
     
  7. Rajmahal

    Rajmahal

    Joined:
    Apr 20, 2011
    Posts:
    2,101
    Just started playing with the new version. Excellent work ... it is a remarkable product for the price. Great job.
     
  8. makeshiftwings

    makeshiftwings

    Joined:
    May 28, 2011
    Posts:
    3,350
    The new face looks really good. I'll be checking this out later today hopefully.
     
  9. makeshiftwings

    makeshiftwings

    Joined:
    May 28, 2011
    Posts:
    3,350
    I've got a chance to play with it and I have to say it looks much better! The problem meshes and clipping are much better and there doesn't seem to be as much twisting around the waist in the run animation on the torsos. One problem I did notice is that the hairs don't fit on the new head mesh; the back of the head clips through the hair. It could probably be solved by just scaling up the hair meshes a bit. Also, the unity package only has diffuse material set for everything, so you have to manually change the materials to bumped and drag in their bump maps from the folder, and since the specular's in a separate map instead of the diffuse alpha channel, you'd need a custom shader to add the spec maps (or use some kind of photoshop batch script to merge the spec into the alpha channel of all the diffuse maps).

    Here's a script based on siflandolly's from earlier in the thread but bugfixed and updated for the new outfits, for anyone using this to see some combinations in action. To use, drag the BaseMedMale(r2June) prefab into your scene, then click the checkbox on it to disable and choose "Disable All Children". Then click it again to enable but choose "Enable only this". Then enable just the Bip01 skeleton. Drag this script onto the main BaseMedMale(r2June) prefab. It stats with the Leather armor equipped. Pressing F2 - F7 will show a few different outfits, while pressing F1 will equip a random piece to each slot.

    Code (csharp):
    1.  
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4.  
    5. public class SwapArteriaPieces : MonoBehaviour
    6. {
    7.     private List<GameObject> torso, boots, arms, helmet, hair, legs, shoulder, wrist, gloves, bicep, trs;
    8.  
    9.     private List<GameObject> merc,
    10.                              elven,
    11.                              innkeeper,
    12.                              leather,
    13.                              miner,
    14.                              merchant,
    15.                              farmer,
    16.                              templar,
    17.                              guild,
    18.                              noble,
    19.                              republic,
    20.                              silveral,
    21.                              plate,
    22.                              thief,
    23.                              stormlands,
    24.                              mage,
    25.                              roman;
    26.  
    27.     private GameObject baseHands, baseArms, baseHead;
    28.  
    29.  
    30.     private void Start()
    31.     {
    32.         LoadClothing();
    33.         WearBaseHead(); //always want base head active
    34.         WearOutfit(leather);  //outfit to start with
    35.     }
    36.  
    37.     private void Update()
    38.     {
    39.         if (Input.GetKeyDown(KeyCode.F1))
    40.         {
    41.             RandomEquip();
    42.         }
    43.  
    44.         if (Input.GetKeyDown(KeyCode.F2))
    45.         {
    46.             WearOutfit(silveral);
    47.             WearBaseHands();
    48.             WearBaseArms();
    49.         }
    50.  
    51.         if (Input.GetKeyDown(KeyCode.F3))
    52.         {
    53.             WearOutfit(leather);
    54.         }
    55.  
    56.         if (Input.GetKeyDown(KeyCode.F4))
    57.         {
    58.             WearOutfit(miner);
    59.             WearBaseHands();
    60.         }
    61.  
    62.         if (Input.GetKeyDown(KeyCode.F5))
    63.         {
    64.             WearOutfit(guild);
    65.             WearBaseHands();
    66.         }
    67.  
    68.         if (Input.GetKeyDown(KeyCode.F6))
    69.         {
    70.             WearOutfit(mage);
    71.             WearBaseArms();
    72.             WearBaseHands();
    73.         }
    74.  
    75.         if (Input.GetKeyDown(KeyCode.F7))
    76.         {
    77.             WearOutfit(roman);
    78.             WearBaseHands();
    79.         }
    80.     }
    81.  
    82.     private static void DisableItem(IEnumerable<GameObject> items)
    83.     {
    84.         foreach (var g in items)
    85.         {
    86.             //g.GetComponent<SkinnedMeshRenderer>().enabled = false;
    87.             g.active = false;
    88.         }
    89.     }
    90.  
    91.     private static void WearItem(IEnumerable<GameObject> items, string name)
    92.     {
    93.         Debug.Log("-->" + name);
    94.         foreach (var g in items)
    95.         {
    96.             if (g.name == name)
    97.             {
    98.                 //g.GetComponent<SkinnedMeshRenderer>().enabled = true;
    99.                 g.active = true;
    100.             }
    101.         }
    102.     }
    103.  
    104.     private void WearBaseHands()
    105.     {
    106.         baseHands.active = true;
    107.     }
    108.  
    109.     private void WearBaseArms()
    110.     {
    111.         baseArms.active = true;
    112.     }
    113.  
    114.     private void WearBaseHead()
    115.     {
    116.         baseHead.active = true;
    117.     }
    118.  
    119.     private void WearOutfit(IEnumerable<GameObject> items)
    120.     {
    121.         DisableAll();
    122.         foreach (var g in items)
    123.         {
    124.             g.active = true;
    125.         }
    126.     }
    127.  
    128.     private void DisableAll()
    129.     {
    130.         baseHands.active = false;
    131.         baseArms.active = false;
    132.  
    133.         DisableItem(boots);
    134.         DisableItem(hair);
    135.         DisableItem(helmet);
    136.         DisableItem(legs);
    137.         DisableItem(shoulder);
    138.         DisableItem(torso);
    139.         DisableItem(wrist);
    140.         DisableItem(arms);
    141.         DisableItem(gloves);
    142.         DisableItem(trs);
    143.         DisableItem(bicep);
    144.  
    145.         //special to get rid of extra mage parts - robe and sash
    146.         DisableItem(mage);
    147.     }
    148.  
    149.     private void RandomEquip()
    150.     {
    151.         DisableAll();
    152.        
    153.         int random = Random.Range(0, gloves.Count);
    154.         WearItem(gloves, gloves[random].name);
    155.  
    156.         random = Random.Range(0, arms.Count);
    157.         WearItem(arms, arms[random].name);
    158.        
    159.         random = Random.Range(0, torso.Count);
    160.         WearItem(torso, torso[random].name);
    161.  
    162.         random = Random.Range(0, boots.Count);
    163.         WearItem(boots, boots[random].name);
    164.        
    165.         random = Random.Range(0, legs.Count);
    166.         WearItem(legs, legs[random].name);
    167.  
    168.         random = Random.Range(0, shoulder.Count);
    169.         WearItem(shoulder, shoulder[random].name);
    170.  
    171.         random = Random.Range(0, helmet.Count);
    172.         WearItem(helmet, helmet[random].name);
    173.  
    174.         random = Random.Range(0, wrist.Count);
    175.         WearItem(wrist, wrist[random].name);
    176.  
    177.         random = Random.Range(0, bicep.Count);
    178.         WearItem(bicep, bicep[random].name);
    179.  
    180.         // Leaving out hair and transparencies since these usually don't match up when random
    181.         //random = Random.Range(0, hair.Count);
    182.         //WearItem(hair, hair[random].name);
    183.  
    184.         //random = Random.Range(0, trs.Count);
    185.         //WearItem(trs, trs[random].name);
    186.     }
    187.  
    188.    
    189.  
    190.     private void LoadClothing()
    191.     {
    192.         gloves = new List<GameObject>();
    193.         torso = new List<GameObject>();
    194.         boots = new List<GameObject>();
    195.         hair = new List<GameObject>();
    196.         legs = new List<GameObject>();
    197.         shoulder = new List<GameObject>();
    198.         helmet = new List<GameObject>();
    199.         wrist = new List<GameObject>();
    200.         arms = new List<GameObject>();
    201.         trs = new List<GameObject>();
    202.         bicep = new List<GameObject>();
    203.        
    204.         guild = new List<GameObject>();
    205.         noble = new List<GameObject>();
    206.         elven = new List<GameObject>();
    207.         merc = new List<GameObject>();
    208.         innkeeper = new List<GameObject>();
    209.         merchant = new List<GameObject>();
    210.         leather = new List<GameObject>();
    211.         miner = new List<GameObject>();
    212.         farmer = new List<GameObject>();
    213.         templar = new List<GameObject>();
    214.         republic = new List<GameObject>();
    215.         silveral = new List<GameObject>();
    216.         plate = new List<GameObject>();
    217.         thief = new List<GameObject>();
    218.         stormlands = new List<GameObject>();
    219.         mage = new List<GameObject>();
    220.         roman = new List<GameObject>();
    221.  
    222.         foreach (Transform child in transform)
    223.         {
    224.             var obj = child.gameObject;
    225.  
    226.             //base
    227.             if (obj.name.ToLower().StartsWith("basehands"))
    228.             {
    229.                 baseHands = obj;
    230.                 continue;
    231.             }
    232.  
    233.             if (obj.name.ToLower().StartsWith("basearms"))
    234.             {
    235.                 baseArms = obj;
    236.                 continue;
    237.             }
    238.  
    239.             if (obj.name.ToLower().StartsWith("head"))
    240.             {
    241.                 baseHead = obj;
    242.                 continue;
    243.             }
    244.  
    245.  
    246.             //outfit types
    247.             if (obj.name.ToLower().StartsWith("plate"))
    248.             {
    249.                 plate.Add(obj);
    250.             }
    251.  
    252.             if (obj.name.ToLower().StartsWith("thief"))
    253.             {
    254.                 thief.Add(obj);
    255.             }
    256.  
    257.             if (obj.name.ToLower().StartsWith("silveral"))
    258.             {
    259.                 silveral.Add(obj);
    260.             }
    261.  
    262.             if (obj.name.ToLower().StartsWith("noble"))
    263.             {
    264.                 noble.Add(obj);
    265.             }
    266.  
    267.             if (obj.name.ToLower().StartsWith("republic"))
    268.             {
    269.                 republic.Add(obj);
    270.             }
    271.  
    272.             if (obj.name.ToLower().StartsWith("farmer"))
    273.             {
    274.                 farmer.Add(obj);
    275.             }
    276.  
    277.             if (obj.name.ToLower().StartsWith("guild"))
    278.             {
    279.                 guild.Add(obj);
    280.             }
    281.  
    282.             if (obj.name.ToLower().StartsWith("templar"))
    283.             {
    284.                 templar.Add(obj);
    285.             }
    286.  
    287.             if (obj.name.ToLower().StartsWith("elven"))
    288.             {
    289.                 elven.Add(obj);
    290.             }
    291.  
    292.             if (obj.name.ToLower().StartsWith("miner"))
    293.             {
    294.                 miner.Add(obj);
    295.             }
    296.  
    297.             if (obj.name.ToLower().StartsWith("merchant"))
    298.             {
    299.                 merchant.Add(obj);
    300.             }
    301.  
    302.             if (obj.name.ToLower().StartsWith("leather"))
    303.             {
    304.                 leather.Add(obj);
    305.             }
    306.  
    307.             if (obj.name.ToLower().StartsWith("merc")  !obj.name.ToLower().StartsWith("merchant"))
    308.             {
    309.                 merc.Add(obj);
    310.             }
    311.  
    312.             if (obj.name.ToLower().StartsWith("innkeeper"))
    313.             {
    314.                 innkeeper.Add(obj);
    315.             }
    316.  
    317.             if (obj.name.ToLower().StartsWith("storm"))
    318.             {
    319.                 stormlands.Add(obj);
    320.             }
    321.  
    322.             if (obj.name.ToLower().StartsWith("mage"))
    323.             {
    324.                 mage.Add(obj);
    325.             }
    326.  
    327.             if (obj.name.ToLower().StartsWith("rom"))
    328.             {
    329.                 roman.Add(obj);
    330.             }
    331.            
    332.             //body parts
    333.             if (obj.name.ToLower().Contains("trs"))
    334.             {
    335.                 trs.Add(obj);
    336.                 continue;
    337.             }
    338.  
    339.             if (obj.name.ToLower().Contains("bicep"))
    340.             {
    341.                 bicep.Add(obj);
    342.             }
    343.  
    344.             if (obj.name.ToLower().Contains("gloves"))
    345.             {
    346.                 gloves.Add(obj);
    347.             }
    348.  
    349.             if (obj.name.ToLower().Contains("arms"))
    350.             {
    351.                 arms.Add(obj);
    352.             }
    353.  
    354.             //if (go.name.ToLower().Contains("earring") ||
    355.             //    go.name.ToLower().Contains("scar") ||
    356.             //    go.name.ToLower().Contains("eyepatch"))
    357.             //{
    358.             //    earRings.Add(go);
    359.             //}
    360.  
    361.             if (obj.name.ToLower().Contains("torso"))
    362.             {
    363.                 torso.Add(obj);
    364.             }
    365.  
    366.             if (obj.name.ToLower().Contains("boot") ||
    367.                 obj.name.ToLower().Contains("shoe"))
    368.             {
    369.                 boots.Add(obj);
    370.             }
    371.  
    372.             if (obj.name.ToLower().Contains("hair"))
    373.             {
    374.                 hair.Add(obj);
    375.             }
    376.  
    377.             if (obj.name.ToLower().Contains("legs"))
    378.             {
    379.                 legs.Add(obj);
    380.             }
    381.  
    382.             if (obj.name.ToLower().Contains("wrist"))
    383.             {
    384.                 wrist.Add(obj);
    385.             }
    386.  
    387.             if (obj.name.ToLower().Contains("shoulder"))
    388.             {
    389.                 shoulder.Add(obj);
    390.             }
    391.  
    392.             if (obj.name.ToLower().Contains("helmet") ||
    393.                 obj.name.ToLower().Contains("hood") ||
    394.                 obj.name.ToLower().Contains("hat"))
    395.             {
    396.                 helmet.Add(obj);
    397.             }
    398.         }
    399.     }
    400. }
     
    Last edited: Jun 28, 2012
  10. Legacy

    Legacy

    Joined:
    Oct 11, 2011
    Posts:
    651
    Hey Steve,

    You asked me to post on this thread :), so as i was stating in the other thread having more than 1 skinned mesh renderer per character is EXTREMELY bad for performance. You can however from what i studied in unitys customizable character demo project compress all of the mesh renderers into a single mesh renderer at runtime which saves a ton of performance.

    Also you asked about the races i was talking about, you could easily do elves, orcs, feline humanoid, lizard humanoid etc because the only things that are really different with those races are the head, tails, feet, and hands. Also another improvement to the base character would to make him more muscular as he looks rather scrawny haha :p. I can probably help you with a c# class that takes all of the mesh renderers and combines them into a single mesh renderer at run time as i need that for the game im building anyhow. I will let you know when its finished.

    Regards,

    Edward Fraser
     
  11. DirtyHippy

    DirtyHippy

    Joined:
    Jul 17, 2012
    Posts:
    224
    Some of you seemed to have done this already so I am asking. I'm trying to separate out the unity package for this into separate meshes for each object, but the package seems to include everything already parented to the character (assuming for the use case where people would drop the entire thing in and deactive non-used pieces). My engine I ported from Ogre supports piecing these pieces together, and had this working with the sci-fi character pack, where I exported each mesh with bones and shared the animations with the root (this is how Ogre does it).

    I've only been using Unity for about 2 months, but from what I can tell I need to have each armor piece mesh imported with its own bones, and then at run-time combine them together into a single skinnedmeshrenderer. I was hoping I could do this with the current package by dragging the child armor pieces from the character prefab onto separate pre-fabs. But the child pieces are set to bring in their animations from the root on import. I would rather avoid having to bring up the FBX, grab each armor piece, and export it out to a separate fbx as this is workflow is not tenable as the source package changes in the future.

    So, to save myself some investigation time, I am asking. I had this working in Ogre perfectly - I'm just looking for some direction here to minimize workflow. I'm not worried about the coding involved with the stitching but just need some insight on how to break the unity package apart.
     
  12. PrimeDerektive

    PrimeDerektive

    Joined:
    Dec 13, 2009
    Posts:
    3,090
  13. IAMWil

    IAMWil

    Joined:
    Nov 22, 2010
    Posts:
    15
    I am a life time member and am awaiting the member links to these base model packs as they are not in the current member links that I have. I have emailed a total of 3 times (once 8 days ago to msn email, once today to msn email, and once today to arteria email). Eagerly awaiting a reply! :p

    Danny
    dewilson83@gmail.com
     
  14. arteria

    arteria

    Joined:
    May 31, 2007
    Posts:
    2,189
    I recived two emails from you. One last week of which i emailed you the links, and within seconds of just recieving your email today. Please check

    Steve
     
  15. IAMWil

    IAMWil

    Joined:
    Nov 22, 2010
    Posts:
    15
    Aha! They filtered off into a group.. I apologize! Thank you so much.. I also have a proposition for you soon. Willing to offer my assistance with animations. I use blender to rig and animate. Just something I've been thinking about :)
     
  16. IAMWil

    IAMWil

    Joined:
    Nov 22, 2010
    Posts:
    15
    A quick side note: I've been very pleased with the services Steve has offered for such a modest fee. I recommend his services to anyone looking for quality on a budget!!
     
  17. karim1993

    karim1993

    Joined:
    Aug 26, 2014
    Posts:
    1
    how can buy this asset ?