User Tools

Site Tools


getting_started

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
getting_started [2023/01/29 11:13] nkassaigetting_started [2023/02/21 09:00] (current) nkassai
Line 3: Line 3:
 **Author:** <Nathan Kassai> Email: <kassan@unlv.nevada.edu> <!-- replace with your email address --> **Author:** <Nathan Kassai> Email: <kassan@unlv.nevada.edu> <!-- replace with your email address -->
 \\ \\
-**Date:** Last modified on <01/28/2023>+**Date:** Last modified on <01/29/2023>
 \\ \\
 **Keywords:** <Unity, Tutorial, Step-by-Step> **Keywords:** <Unity, Tutorial, Step-by-Step>
Line 16: Line 16:
   * Understanding the layout and some key terminology   * Understanding the layout and some key terminology
   * Writing our first "Hello World" script   * Writing our first "Hello World" script
 +  * Final Words
 +  * Refresher Questions
  
 ===== Prerequisites ===== ===== Prerequisites =====
Line 28: Line 30:
 ==== Brief introduction to Unity  ==== ==== Brief introduction to Unity  ====
  
-On June 8th, 2005, the popular game engine we all know and love today, Unity, was released. Originally, Unity was solely designed to be just a game enginea collection of tools, libraries, and assets to prototype a 2D/3D game. Why as a roboticist then would you benefit from learning Unity?  Well, over the course of its existence, Unity expanded from a mere game engine to a platform capable of virtually anything! Virtual/Augmented reality applications, generating 3D visualization tools, film production, generating browser/console applications, touch screen applications, and more recently, robotic simulations and teleoperation!  +On June 8th, 2005, the popular game engine we all know and love today, Unity, was released. Originally, Unity was solely designed to be just a game enginea collection of tools, libraries, and assets to prototype a 2D/3D game. Why as a roboticist then would you benefit from learning Unity?  Well, over the course of its existence, Unity expanded from a mere game engine to a platform capable of virtually anything! Virtual/Augmented reality applications, generating 3D visualization tools, film production, generating browser/console applications, touch screen applications, and more recently, robotic simulations and teleoperation! 
- +
-(Maybe include video here of compilation of project used in the lab with Unity)+
  
 In this crash course, I plan on teaching you the basics of Unity: understanding how Unity works, learning how to write scripts to implement custom behaviors, general terminology, etc. With these basics, by the end of the course, we will then learn how to send joint data to a robotic arm using ROS!    In this crash course, I plan on teaching you the basics of Unity: understanding how Unity works, learning how to write scripts to implement custom behaviors, general terminology, etc. With these basics, by the end of the course, we will then learn how to send joint data to a robotic arm using ROS!   
Line 49: Line 49:
 {{ :unityhub.png?nolink&800 |}} {{ :unityhub.png?nolink&800 |}}
  
-Once you have reached this page, you may either log in with the DASL Unity account, or you may choose to make your own. +Once you have reached this page, you may either login with the DASL Unity account, or you may choose to make your own. 
  
 After logging in, it will ask if you would like to install the latest Unity editor. Press **Skip Installation** (we will be downloading an earlier Unity Editor version). Finally, Unity will ask you to activate a personal license, press **Agree and Get Personal Edition License**. After logging in, it will ask if you would like to install the latest Unity editor. Press **Skip Installation** (we will be downloading an earlier Unity Editor version). Finally, Unity will ask you to activate a personal license, press **Agree and Get Personal Edition License**.
Line 76: Line 76:
  
  
-{{ :unityscene.png?nolink&800 |}}+{{ :unityscenebare.png?nolink&800 |}}
  
-Now that Unity has been fully installed, its time we take a look at the layout of Unity.+Now that Unity has been fully installed, it'time we take a look at the layout of Unity.
 ===== Installing Visual Studio ===== ===== Installing Visual Studio =====
  
Line 87: Line 87:
 Once it gets to this page, scroll all the way down until you see **Game Development**, then select Game Development with Unity. After that, hit install. Once it gets to this page, scroll all the way down until you see **Game Development**, then select Game Development with Unity. After that, hit install.
  
-(Add Image here) 
  
 ===== Understanding the Layout and Some Key Terminology ===== ===== Understanding the Layout and Some Key Terminology =====
  
  
-Congrats! You've loaded up into your first project. Now, before we do anything else, lets talk about what is currently on screen.+Congrats! You've loaded up into your first project. Now, before we do anything else, let'talk about what is currently on screen.
  
 {{ :unityscene.png?nolink&800 |}} {{ :unityscene.png?nolink&800 |}}
Line 98: Line 97:
  
   - **Scene Window**: In this center rectangle, we have the Scene Window. This gives us a view as to what is located inside this current Unity Scene. For instance, as we add to this scene later on, you can visualize what you're adding through this window. If you wanted to see what the player sees, click on the tab right next to Scene.   - **Scene Window**: In this center rectangle, we have the Scene Window. This gives us a view as to what is located inside this current Unity Scene. For instance, as we add to this scene later on, you can visualize what you're adding through this window. If you wanted to see what the player sees, click on the tab right next to Scene.
-  - **Hierarchy**: On the left side, you can see two objects, Main Camera, and Directional Light. What the Unity Hierarchy does is neatly organizes all of your **Game Objects** in one area. As you add new objects to your scene, the hierarchy will expand+  - **Hierarchy**: On the left side, you can see two objects, Main Camera, and Directional Light. What the Unity Hierarchy does is neatly organizes all of your **Game Objects** in one area. Every object added to this scene will show up in the Hierarchy
   - **Inspector**: Right now, the inspector is empty; let's change that! Click on the Main Camera, and watch the inspector fill up with information. The inspector allows you to monitor what **Components** are added to each of your game objects.   - **Inspector**: Right now, the inspector is empty; let's change that! Click on the Main Camera, and watch the inspector fill up with information. The inspector allows you to monitor what **Components** are added to each of your game objects.
   - **Project Management**: Down below, we have the project manager. This area is simply used to store and access all assets added to your Unity project! Those assets could be music files, 3D models, images, materials, etc.    - **Project Management**: Down below, we have the project manager. This area is simply used to store and access all assets added to your Unity project! Those assets could be music files, 3D models, images, materials, etc. 
Line 119: Line 118:
   * A script which detects that the cube has collided with something   * A script which detects that the cube has collided with something
  
-The words **Script** and **Behavior** are synonymous with each other in Unity, however, the proper term for it is a **Component**.  +The proper term for these special types of scripts are called **Components**.  
-A component is a script which defines the behavior of a game object. Previously while we were looking at the inspector for the Main Camera, we saw two components: Camera and Audio Listener. These two components are scripts written by Unity developers which allow us to define what a Camera is! Thankfully, Unity provides a large amount of components free to use without having to code! +A component is a script that contains some sort of behavior for a game object. Previously while we were looking at the inspector for the Main Camera, we saw two components: Camera and Audio Listener. These two components are scripts written by Unity developers that allow us to define what a Camera is! Thankfully, Unity provides a large number of components free to use without having to code! 
  
-Lets try and get a cube to fall! To do this, we must first add the cube game object to the Hierarchy. To do so, bring your mouse to the Hierarchy, right-click, hover over 3D object, and then select Cube. +Let'try and get a cube to fall! To do this, we must first add the cube game object to the Hierarchy. To do so, bring your mouse to the Hierarchy, right-click, hover over 3D object, and then select Cube. 
  
 +{{ :addcubetoscene.png?nolink&800 |}}
  
-(Add image)+Once the cube spawns in, click on it in the Hierarchy. As you can see in the inspector, there are different components that define what makes up this cube.  
 +If you were to hit play now, nothing happens; the cube stays suspended in the air.  
 +Well, let's fix that by adding a new component to our cube called, **Rigid Body**. This allows our game object to experience external forces (including gravity!). To do so, go to the inspector and click on **Add Component**; a text box will appear with a large list of components. Type in Rigid Body and hit enter (or click on itto add it to the Cube. 
  
-As you can see in the inspector, there are different components that define what makes up this cube.  +{{ :addrigidbody.png?nolink&800 |}} 
-Now, if you were to hit play now, nothing happens; the cube stays suspended in the air.  + 
-Well, let's fix that by adding a new component to our cube called, **Rigid Body**. This allows our game object to experience external forces (including gravity!). Now, hit play again, and watch as the cube falls forever. +Now, hit play again, and watch as the cube falls forever. 
  
 Go ahead and spend some time playing with the other components and add other game objects to the scene!  Go ahead and spend some time playing with the other components and add other game objects to the scene! 
Line 154: Line 156:
 All we need to do to create our first script is to right-click in our project management area, create, and then C# script.  All we need to do to create our first script is to right-click in our project management area, create, and then C# script. 
  
-(image needed here)+{{ :csharpscriptcreate.png?nolink&800 |}}
  
 For this script, call it **HelloPrint**.  For this script, call it **HelloPrint**. 
Line 160: Line 162:
 Next, double-click the HelloPrint script and wait for it to load in Visual Studio. It should look like this after it has loaded: Next, double-click the HelloPrint script and wait for it to load in Visual Studio. It should look like this after it has loaded:
  
-(image needed here)+{{ :csharpcode.png?nolink&800 |}}
  
 At first, it can be pretty intimidating, as there is already some code written for you without a clear reason why. For this tutorial, I will explain what each line does at a higher level, but next tutorial, I will explain in depth what each line is actually doing.  At first, it can be pretty intimidating, as there is already some code written for you without a clear reason why. For this tutorial, I will explain what each line does at a higher level, but next tutorial, I will explain in depth what each line is actually doing. 
  
 +  - These lines allow us to call C# and Unity functions to implement in our code.
 +  - This line defines a new Class called HelloPrint **Note: The name of this class MUST be the same as the file you created, if not, there will be errors when trying to apply this component to a game object.** Additionally, we are inheriting another class called MonoBehavior. Inheriting MonoBehavior makes this script become a component and gives us access to a plethora of functions that a component might need. **If you write a script and forget to inherit MonoBehavior, you would not be able to add it as a component.**
 +  - Start and Update are special types of functions. As seen by the comments, Start is a function that is called right before the first frame update. In other words, when you hit play, before the first frame is played, this function is called, and whatever code is inside it will run. However, this function is called once for every script that it is attached to. Update however is called once per frame. If your Unity scene is running at 60 FPS, this function and all code written inside it will be called 60 times per second. 
 +
 +Let's add a line of code to the start function so that once we hit play on the Unity scene, the phrase, "Hello World!", will be displayed in the console. 
 +
 +To do so, type in the following line in between the curly braces as seen below: 
 +
 +Debug.Log("Hello World!");
 +
 +{{ :debuglog.png?nolink&800 |}}
 +
 +Once you do this, hit Ctrl + s to save your script, and head back over to your Unity scene. 
 +
 +Now, if we hit play and switch over to the console tab, we can see that nothing printed out. Remember, this script is now a component; in order for the script to run, we must add it to a pre-existing game object. 
 +
 +Let's add this to our cube. Click on our Cube in the inspector, press Add Component, and type in the name of the script we just wrote **HelloPrint**, then press enter.
 +
 +Finally, switch over to the console tab and hit play.
 +
 +{{ :printhello.png?nolink&1000|}}
 +
 +
 +Congratulations! You have written your first Script in Unity! 
 +
 +===== Final Words =====
 +
 +I hope you're excited about this course in Unity as you will learn a great deal about the plethora of features that this platform has to offer (both in game development and especially in robotics/teleoperation). In the next session, we will talk a little bit more about the scripting language and go over some basic programming practices. 
 +
 +
 +===== Refresher Questions =====
 +At the end of each session, I like to ask questions to make sure you were able to understand all of the information provided. I'll either ask you to write a program that goes over what was taught in this session or simply ask true/false and or multiple-choice questions. **These are not homework assignments!**
  
 +  - What is a Game Object?
 +  - What is a Component?
 +  - What is the difference between the Start and Update functions?
 +  - What scripting language does Unity use?
 +  - Write a script that will print "Hello!" on every frame.
  
 \\ \\
getting_started.1675019617.txt.gz · Last modified: by nkassai