Search Unity

  1. Good news ✨ We have more Unite Now videos available for you to watch on-demand! Come check them out and ask our experts any questions!
    Dismiss Notice

[RELEASED] Ultimate Survival - The Complete Survival Template

Discussion in 'Assets and Asset Store' started by AngryPixelUnity, Nov 20, 2016.

Thread Status:
Not open for further replies.
  1. zombieslayer420

    zombieslayer420

    Joined:
    Dec 31, 2016
    Posts:
    31
    kinda you make it to make more items
     
  2. ryandanielbarton

    ryandanielbarton

    Joined:
    Dec 31, 2015
    Posts:
    52
    Yea ill donate 5 dollars for big updates too. I feel like im stealing lol.
     
    Firesoft and TheMessyCoder like this.
  3. Sorrowthief

    Sorrowthief

    Joined:
    Dec 14, 2016
    Posts:
    48
    Id give my 5 bucks as well especially if it will get Ice Creature Control in sooner. For the people asking about adding more animals , once Ice gets in the animals and Npc's system will give you tons of options. It is even set up for four legged Npc's and possibly fliers(not certain on that one). If Ice is certainly gettin an intergration it might be a good idea to grab ice now since there is a bit of a learning curve to it.
     
    siblingrivalry likes this.
  4. siblingrivalry

    siblingrivalry

    Joined:
    Nov 25, 2014
    Posts:
    384
    To be honest, you should be able to get ICE working quite easily yourself with US. I dont want to hijack this thread with ICE tutorials, but there are some great stuff on youtube.
     
  5. siblingrivalry

    siblingrivalry

    Joined:
    Nov 25, 2014
    Posts:
    384
    and another +1 for voluntary donated upgrade price.
    $5 is too low though :)
     
  6. Sorrowthief

    Sorrowthief

    Joined:
    Dec 14, 2016
    Posts:
    48
    Yea maybe for some people but not this old man hehe. I don't really think its getting off topic with US since he has listed it as an up coming feature. I would love a tutorial on how to get it working myself.
     
  7. siblingrivalry

    siblingrivalry

    Joined:
    Nov 25, 2014
    Posts:
    384
    I think there are some linksnto tonanbora's tutirials on the ice forum thread. But i will shoot you a pm with links :)
     
  8. Firesoft

    Firesoft

    Joined:
    Dec 20, 2016
    Posts:
    308
    Btw... did you fix the purlin bug too?
     
  9. txarly

    txarly

    Joined:
    Apr 27, 2016
    Posts:
    197
    Wow, an awesome product, congratulations
    I am playing with it yet, but works really well,

    I would like to give some ideas for the next update

    - integrate a map ,or compass, or just a white map where you can place thinks you find in the game(POI) like buildings or chests
    - weight of objects so the player walks slower or does not run if is so heavy
    - binoculars
    - inventory : a button to sort elements by type,weight,or add tabs for categories
    - inventory: a scrollbar if there are more slots than default
    - AI: activate and deactivate depending the distance from the player
    - AI: the option that when the enemy detects you take some time before attacks or flees, may be playing an animation.It will give more realism

    Thank you very much, no doubt is going to be the FPS asset of reference in the asset store

    txarly
     
    AngryPixelUnity likes this.
  10. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    :( I didn't... unfortunately I forgot, and already submitted 0.11. It'll be solved in 0.2.
    I'm working on new weapons, smooth weapon movement (UFPS-like), once I have something to show I'll make a video. This new FPS system will be way better.

    Thank you for supporting us this early in the asset's development txarly.
    Thanks for the suggestions, some of them will be implemented in 0.2.
    I'll add the compass to Trello. We'd like to implement a minimap too, but we're not yet sure if it fits.
     
    Firesoft likes this.
  11. siblingrivalry

    siblingrivalry

    Joined:
    Nov 25, 2014
    Posts:
    384
    For weights that easy to add already as part of the current system.
    Add custom values to the items in the manager.
     
    AngryPixelUnity likes this.
  12. RETRO_GEEK

    RETRO_GEEK

    Joined:
    Dec 27, 2016
    Posts:
    10
    Is this system fully customisable? e.g. can you graphically change the UI interfaces to make them original looking and suite your own games style?

    Can game components and UI's be excluded from the game if not required? Can the individual UI's screen positions be changed?

    Will this system work with other plugins e.g. weather systems, map generators etc...
     
  13. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Yes, I think the asset is pretty customizable, even now in 0.1. The UI is very easy to change, after you learn a bit how it's working (it's intuitive).

    Yes they can be excluded, with little work. And you can add other systems as well, especially weather & time of day ones, with ease.

    Obviously you'll have to work a bit to achieve what you want, and I can't guarantee it'll work perfectly in every instance, but overall, you won't fight the systems when you'll want to create something new.

    Check out trello here, we have a couple integrations planned, if you'll need them in the future: https://trello.com/c/F22bpVap/73-others
     
  14. RETRO_GEEK

    RETRO_GEEK

    Joined:
    Dec 27, 2016
    Posts:
    10
    Thank you for your prompt reply.
     
  15. Firesoft

    Firesoft

    Joined:
    Dec 20, 2016
    Posts:
    308
    Ohh ok.

    No Problem :)

    I will be waiting ;)
     
    AngryPixelUnity likes this.
  16. pushingpandas

    pushingpandas

    Joined:
    Jan 12, 2013
    Posts:
    1,404
    0.2 will include load and save right? Does it include Ammo Management aswell?
     
  17. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Yes, both of them. I'm working on new weapons and their reload animations at the moment, the gun system will be complete, easier to use, and more flexible in 0.2.
     
    Firesoft likes this.
  18. Dox123

    Dox123

    Joined:
    Mar 8, 2017
    Posts:
    1
    If I buy the version 0.1 with 50 dolars i have to buy again on the 0.2 verion ? Or I had to buy just one time
     
  19. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Once 50$, updates are free
     
    KaVz likes this.
  20. zombieslayer420

    zombieslayer420

    Joined:
    Dec 31, 2016
    Posts:
    31
    i wish i did not have a cold right now
     
  21. jameZee

    jameZee

    Joined:
    Mar 4, 2017
    Posts:
    3
    Just wanted to say; this asset is such a great idea. Keep up the good work guys.

    I'm certainly looking forward to multiplayer. Excuse the pun... but it will be a total game changer! :D
     
  22. KaVz

    KaVz

    Joined:
    Aug 14, 2016
    Posts:
    113
    I finally managed to buy it, but I have a problem, when I import it, my assets are somewhat re-imported and it crashes my RTP terrain shader textures (to pink...), I think it's because it's a complete project, but how to fix that? RTP is so delicate, crashes so easily...

    @Edit
    Okay, fixed it, I did a weird thing, but it worked:
    1. Saved project before importing asset
    2. Imported project
    3. RTP crashed, errors etc.
    4. Closed Unity without saving
    5. Opened Unity
    I have everything from the asset without interfering with RTP scripts, nice! xD
     
    Last edited: Mar 8, 2017
  23. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Nice! Post some screenshots I'm curious.
     
  24. siblingrivalry

    siblingrivalry

    Joined:
    Nov 25, 2014
    Posts:
    384
    Hi, for people who buy directly from version 0.11 (and not from 0.1) have upgrade charges to 0.2 etc?

    I would +1 upvote this
     
  25. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    no charges
     
  26. siblingrivalry

    siblingrivalry

    Joined:
    Nov 25, 2014
    Posts:
    384
    Wow that is generous! Can we do a patreon thing to give donations if we wish to help support extra?
     
    zombieslayer420 and KaVz like this.
  27. KaVz

    KaVz

    Joined:
    Aug 14, 2016
    Posts:
    113
    Yeah, that's cool, because it's not required, but optional for people who wants to support further updates. +1
     
    siblingrivalry likes this.
  28. ryandanielbarton

    ryandanielbarton

    Joined:
    Dec 31, 2015
    Posts:
    52
    Noob Question:

    when i go to Window>Lighting>Scene>Ambient Source it is defaulted to Gradient. I would like to to be Skybox. However ,when I change it to skybox, and then run my scene it reverts back to gradient. Any help?
     
  29. Rui-Figueiredo

    Rui-Figueiredo

    Joined:
    Feb 27, 2014
    Posts:
    3
    Winterbyte312,
    Just checked the "Others" on Trelo. GREAT LIST :)

    I'm really counting the days to get 0.2

    As for the contributions, I'm up for it. Setup some way Paypal or something of your convenience and I'll also do additional contributions for each version you release.

    Your plan is great and It's clear that a lot of us want to contribute because our success will depend on you being successful also.

    Keep up the great work.

    Thank you.
     
    AngryPixelUnity likes this.
  30. Rui-Figueiredo

    Rui-Figueiredo

    Joined:
    Feb 27, 2014
    Posts:
    3
    Winterbyte312,

    I have a question regarding uNature.
    If we want to use the time to work on the terrain using uNature with the goal to later use your integration, is that something we could do and what should we respect in order to ensure it will work out fine when you implement support for it?

    Thanks.
     
  31. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Hi :)

    The uNature integration will come in 0.3, a lot of time until then, I can't give you an exact answer as we don't know how things might change and interact in the future. If you can use / integrate uNature successfully in your project, then go ahead, do it without thinking about the integration. The integration will most probably be just an example showing how to make the uNature's trees and grass work with Ultimate Survival.

    Bottom line is, if you can integrate uNature in your project now, stop thinking about the integration.
     
  32. zombieslayer420

    zombieslayer420

    Joined:
    Dec 31, 2016
    Posts:
    31
    0.2 is gonna be completed in april? that seems really fast

    or does the trello just say when you start working on it
     
  33. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Yes, completed in April, and hopefully accepted faster than 0.1..
     
    uni7y likes this.
  34. KaVz

    KaVz

    Joined:
    Aug 14, 2016
    Posts:
    113
    Yay, got everything to work! + thanks for the tips with Time Of Day!
    I think it looks magical :3 now time to optimize this! (cuz almost 16mil verts/tris is not a good idea. Probably too high grass density (but i love it :C) and speedtree LOD is not configured correctly. Anyway - i'm quite proud of this work. And I need to lower the grass height because it's unplayable.

    https://i.gyazo.com/e74e9968be6a1b477083254001aae6a4.mp4 <- GIF
    https://i.gyazo.com/6ae46bfe26e7c02bd796816425f6a40f.mp4 <- GIF





    Now, time to do some gameplay stuff and play with Ultimate Survival <3
     
    AngryPixelUnity and uni7y like this.
  35. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Jesus Christ, the one with the bow looks insane. Good job, I'm sure you can optimize it a lot. I don't see fog in the screenshots, you have it disabled?
     
  36. KaVz

    KaVz

    Joined:
    Aug 14, 2016
    Posts:
    113
    I'm now tweaking Time of Day system to make better scattering/fog system, so yeah, that's currently disabled. Unity built-in fog is awful. Need to fix also Volumetric Lights, because it's GPU heavy as F*** and don't look good, I will do a graphics settings to lower the samples. A lot of tweaking is needed, but it's going in the good direction.

    PS: If I make really GPU-heavy volumetric lights it looks even more magical, but with 10 fps it's not a good idea.
     
  37. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Great. 2 - 3 million polys is the max you should have in a game like this. Focus on having a certain radius around the player detail-rich, and then cut most of the details down which are farther away.
     
  38. KaVz

    KaVz

    Joined:
    Aug 14, 2016
    Posts:
    113
    Yeah, I need to do a lot of things like occlusion culling but it will take forever to make. I will tweak the Bush or tree LOD settings because they're quite badly configured. I will also use static batching to everything and use precompiled gi and a lot more.
     
    AngryPixelUnity likes this.
  39. sebasfreelance

    sebasfreelance

    Joined:
    Aug 27, 2015
    Posts:
    227
    Personally I like the day and night that brings the asset, you can add clouds and other details of the atmosphere, but if you want one for free I recommend ...

    https://www.assetstore.unity3d.com/en/#!/content/71422

    Apart from being free, is very well and with good results.

    If you could integrate with this asset for me would be great!

    sorry my inglish ;)
     
  40. sebasfreelance

    sebasfreelance

    Joined:
    Aug 27, 2015
    Posts:
    227
    Winterbyte312, is there a way to change the rotation of the player? I have my player at Y = 175.26 and when I give the play the rotation changeds Y to 0.

    thx
     
  41. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    I'm bringing a fix for that in 0.2. I'll send a script that fixes that in a moment.
     
  42. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Replace the MouseLook script's content with this:

    Code (CSharp):
    1. using System;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4.  
    5. namespace UltimateSurvival
    6. {
    7.     /// <summary>
    8.     ///
    9.     /// </summary>
    10.     public class MouseLook : PlayerBehaviour
    11.     {
    12.         [Header("General")]
    13.  
    14.         [SerializeField]
    15.         [Tooltip("The camera root which will be rotated up & down (on the X axis).")]
    16.         private Transform m_LookRoot;
    17.  
    18.         [SerializeField]
    19.         private Transform m_PlayerRoot;
    20.  
    21.         [SerializeField]
    22.         [Tooltip("The up & down rotation will be inverted, if checked.")]
    23.         private bool m_Invert;  
    24.  
    25.         [SerializeField]
    26.         [Tooltip("If checked, a button will show up which can lock the cursor.")]
    27.         private bool m_ShowLockButton = true;
    28.  
    29.         [SerializeField]
    30.         [Tooltip("If checked, you can unlock the cursor by pressing the Escape / Esc key.")]
    31.         private bool m_CanUnlock = true;
    32.  
    33.         [Header("Motion")]
    34.  
    35.         [SerializeField]
    36.         [Tooltip("The higher it is, the faster the camera will rotate.")]
    37.         private float m_Sensitivity = 5f;
    38.  
    39.         [SerializeField]
    40.         [Range(0, 20)]
    41.         private int m_SmoothSteps = 10;
    42.  
    43.         [SerializeField]
    44.         [Range(0f, 1f)]
    45.         private float m_SmoothWeight = 0.4f;
    46.  
    47.         [SerializeField]
    48.         private float m_RollAngle = 10f;
    49.  
    50.         [SerializeField]
    51.         private float m_RollSpeed = 3f;
    52.  
    53.         [Header("Rotation Limits")]
    54.  
    55.         [SerializeField]
    56.         private Vector2 m_DefaultLookLimits = new Vector2(-60f, 90f);
    57.  
    58.         private float m_CurrentRollAngle;
    59.         private bool m_InventoryIsOpen;
    60.  
    61.         private Vector2 m_LookAngles;
    62.  
    63.         private int m_LastLookFrame;
    64.         private Vector2 m_CurrentMouseLook;
    65.         private Vector2 m_SmoothMove;
    66.         private List<Vector2> m_SmoothBuffer = new List<Vector2>();
    67.  
    68.  
    69.         private void Start()
    70.         {
    71.             if(!m_LookRoot)
    72.             {
    73.                 Debug.LogErrorFormat(this, "Assign the look root in the inspector!", name);
    74.                 enabled = false;
    75.             }
    76.  
    77.             InventoryController.Instance.State.AddChangeListener(OnChanged_InventoryState);
    78.  
    79.             Cursor.visible = false;
    80.             Cursor.lockState = CursorLockMode.Locked;
    81.  
    82.             m_LookAngles.y = m_PlayerRoot.localEulerAngles.y;
    83.         }
    84.  
    85.         private void OnChanged_InventoryState()
    86.         {
    87.             m_InventoryIsOpen = !InventoryController.Instance.IsClosed;
    88.  
    89.             if(m_InventoryIsOpen)
    90.             {
    91.                 Cursor.visible = true;
    92.                 Cursor.lockState = CursorLockMode.None;
    93.             }
    94.             else
    95.             {
    96.                 Cursor.visible = false;
    97.                 Cursor.lockState = CursorLockMode.Locked;
    98.             }
    99.         }
    100.  
    101.         private void OnGUI()
    102.         {
    103.             if(!m_ShowLockButton)
    104.                 return;
    105.  
    106.             Vector2 buttonSize = new Vector2(256f, 24f);
    107.  
    108.             // NOTE: While in Unity Editor, pressing Esc will always unlock the cursor.
    109.             if (Event.current.type == EventType.KeyDown && m_CanUnlock)
    110.             {
    111.                 if (Event.current.keyCode == KeyCode.Escape)
    112.                 {
    113.                     Cursor.visible = true;
    114.                     Cursor.lockState = CursorLockMode.None;
    115.                 }
    116.             }  
    117.  
    118.             if(Cursor.lockState == CursorLockMode.None && !m_InventoryIsOpen)
    119.             {
    120.                 if(GUI.Button(new Rect(Screen.width * 0.5f - buttonSize.x / 2f, 16f, buttonSize.x, buttonSize.y), "Lock Cursor (Hit 'Esc' to unlock)"))
    121.                 {
    122.                     Cursor.visible = false;
    123.                     Cursor.lockState = CursorLockMode.Locked;
    124.                 }  
    125.             }
    126.         }
    127.  
    128.         private void Update()
    129.         {
    130.             if(Player.ViewLocked.Is(false) && Cursor.lockState == CursorLockMode.Locked && !Player.Sleep.Active && Player.Health.Get() > 0f)
    131.                 LookAround();
    132.  
    133.             Player.ViewLocked.Set(Cursor.lockState != CursorLockMode.Locked || Player.SelectBuildable.Active);
    134.         }
    135.  
    136.         /// <summary>
    137.         /// Rotates the camera and character and creates a sensation of looking around.
    138.         /// </summary>
    139.         private void LookAround()
    140.         {
    141.             CalculateMouseInput(Time.deltaTime);
    142.  
    143.             m_LookAngles.x += m_CurrentMouseLook.x * m_Sensitivity * (m_Invert ? 1f : -1f);
    144.             m_LookAngles.y += m_CurrentMouseLook.y * m_Sensitivity;
    145.  
    146.             m_LookAngles.x = ClampAngle(m_LookAngles.x, m_DefaultLookLimits.x, m_DefaultLookLimits.y);
    147.      
    148.             m_CurrentRollAngle = Mathf.Lerp(m_CurrentRollAngle, Player.LookInput.Get().x * m_RollAngle, Time.deltaTime * m_RollSpeed);
    149.  
    150.             // Apply the current up & down rotation to the look root.
    151.             m_LookRoot.localRotation = Quaternion.Euler(m_LookAngles.x, 0f, m_CurrentRollAngle);
    152.  
    153.             m_PlayerRoot.localRotation = Quaternion.Euler(0f, m_LookAngles.y, 0f);
    154.  
    155.             Player.LookDirection.Set(m_LookRoot.forward);
    156.         }
    157.  
    158.         /// <summary>
    159.         /// Clamps the given angle between min and max degrees.
    160.         /// </summary>
    161.         private float ClampAngle(float angle, float min, float max)
    162.         {
    163.             if(angle > 360f)
    164.                 angle -= 360f;
    165.             else if(angle < -360f)
    166.                 angle += 360f;
    167.          
    168.             return Mathf.Clamp(angle, min, max);
    169.         }
    170.  
    171.         private void CalculateMouseInput(float deltaTime)
    172.         {
    173.             if (m_LastLookFrame == Time.frameCount)
    174.                 return;
    175.  
    176.             m_LastLookFrame = Time.frameCount;
    177.  
    178.             m_SmoothMove = new Vector2(Input.GetAxisRaw("Mouse Y"), Input.GetAxisRaw("Mouse X"));
    179.  
    180.             m_SmoothSteps = Mathf.Clamp(m_SmoothSteps, 1, 20);
    181.             m_SmoothWeight = Mathf.Clamp01(m_SmoothWeight);
    182.  
    183.             while (m_SmoothBuffer.Count > m_SmoothSteps)
    184.                 m_SmoothBuffer.RemoveAt(0);
    185.  
    186.             m_SmoothBuffer.Add(m_SmoothMove);
    187.  
    188.             float weight = 1f;
    189.             Vector2 average = Vector2.zero;
    190.             float averageTotal = 0f;
    191.  
    192.             for(int i = m_SmoothBuffer.Count - 1; i > 0; i--)
    193.             {
    194.                 average += m_SmoothBuffer[i] * weight;
    195.                 averageTotal += weight;
    196.                 weight *= m_SmoothWeight / (deltaTime * 60f);
    197.             }
    198.              
    199.             averageTotal = Mathf.Max(1f, averageTotal);
    200.             m_CurrentMouseLook = average / averageTotal;
    201.         }
    202.     }
    203. }
    204.  
     
    siblingrivalry likes this.
  43. sebasfreelance

    sebasfreelance

    Joined:
    Aug 27, 2015
    Posts:
    227
    thank you very much! Now it's perfect!
     
    AngryPixelUnity likes this.
  44. bobbybau

    bobbybau

    Joined:
    Feb 28, 2017
    Posts:
    33
    I am getting ready to buy this asset, my only concern and I guess there is never no guarantees is that I fear like other assets it will promise a whole lot but stop working on it and disappear. I have been with a similar quite some time and put money into it and they basically lied to the whole community just to go elsewhere with their own game they have been developing. Do you have a private web forum yet with support or is this the only way to get support is here?

    Also, is there currently Melee with weapons or is it all range?
     
    Last edited: Mar 9, 2017
  45. TacoPlayStudio

    TacoPlayStudio

    Joined:
    Jan 12, 2013
    Posts:
    187
    FANTASTIC ASSET! He was smiling alone watching the videos, kkkk. Bought the same minute. Thanks for sharing. I have some questions, and i apologize for my English which is not good.

    1- In the case of multiplayer, will lob menu be implemented?
    2- Will it be possible to create dedicated servers? If not, do you study integration as some existing asset?
    3- In the case of the construction system. I have one I created, and would like to use it, is it possible to disable your system?
    My system:

    4- I am interested in helping them in the debug, how do I?

    You are helping a lot with this asset, i would like to help them too.
    :)
     
  46. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Hi :) We have a forum yes, but we haven't directed people there yet, if the community grows, we will: http://www.winterbyte.com/forum/

    You're right nobody can guarantee it, if you have doubts, follow the development until you are certain it's worth buying.
     
  47. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    Hi there :) Thank you for your help, great, clean building system you have there. The US's building system is receiving a big update in 0.2, and all the bugs and glitches will disappear.

    1.A menu will be implemented yes
    2.Yes
    3.If you can code, then you can swap it yes
    4.We can't accept any help as the development will most probably get messy.
     
  48. TacoPlayStudio

    TacoPlayStudio

    Joined:
    Jan 12, 2013
    Posts:
    187
    I am very happy with your quick response. And I'm even more happy to know that the next update will be good news. When I mentioned helping, I meant in relation to bug reports if I found hehe. Thank you.
     
    AngryPixelUnity likes this.
  49. AngryPixelUnity

    AngryPixelUnity

    Joined:
    Oct 25, 2016
    Posts:
    816
    About melee weapons, there is a bone club + the tools (axe, pickaxe, etc).
    We'll have a better melee system, animations, and weapons in 0.2: https://trello.com/c/TlEoojPU/79-first-person-stuff
     
  50. TacoPlayStudio

    TacoPlayStudio

    Joined:
    Jan 12, 2013
    Posts:
    187
    I am reviewing the documentation, but I do not understand if I can change the number of slots in the chests, is this only possible with some settings? Or will you require changes to the codes?
    I made a few attempts but without success.
     
Thread Status:
Not open for further replies.
unityunity