skip to main |
skip to sidebar
UNITY: Roll-A-Ball Tutorial
Official Roll-A-Ball Tutorial by Unity3D
http://www.youtube.com/watch?v=lv0SqtSzBxc
Tutorial 01: Setting Up the Game
- Unity primitives are all either 1x1x1 or 1x2x1 in size when created
- Empty Game Objects are used as directories in the Hierarchy
Tutorial 02: Moving the Player
- Rigidbody
- required for physics interaction
- can be created and added directly via "Add Component" in the inspector.
- void Update();
- used for controller inputs, etc.
- void FixedUpdate();
- used for anything physics related
- CTRL + ' when highlighting an object in MonoDevelop will bring up the reference page
- Store "Input.GetAxis" calls in a float variable
- use "rigidbody.Addforce" for physics based movement
- create new Vector3 type variable to store movement
- " Vector3 movement = new Vector3(x, y, z); "
- " rigidbody.AddForce (movement); "
- use " Time.DeltaTime " as frames per second
Tutorial 03: Moving the Camera
- Tying the camera to the Player game object
- not as simple as parenting the camera to the Player object
- add a new script to the Camera object via Add Component
- scripts always get added to the root assets directory, so move it to " scripts "
- create a " GameObject " type public variable called "player" so a field will open up for drag and drop inside of Unity.
- create a Vector3 type private variable called "offset" that the script can alter under the Start() function.
- void LateUpdate();
- follow cameras, procedural animations, gathering last known states
- create reference to player GameObject by dragging in to previously created "player" slot
Tutorial 04: Play Area and Pickup Objects
- Creating environment
- create empty game object as a holder / folder
- reset position back to origin
- create geometry and put it under empty game object for organization
- Creating Pickup items
- create new cube
- lift it, shrink it, and rotate 45 degrees on all axis
- add component: script (for rotating animation)
- not using forces, so we can use " void Update() "
- use lower case "t", " transform.Rotate(new Vector3(15, 30, 45) * Time.DeltaTime); "
- make into Prefab:
- Create "Prefab" Folder
- Drag "Pickup" item from Hierarchy into Prefab folder
- When this is done, a Prefab Item is created
- Item in Hierarchy now shows BLUE
- Create empty GameObject named "Pickups" to hold our pickups in the Hierarchy view
- Spread Pickup items around
- make sure the blue prefab item itself is selected for duplication, not the group node
- change move to "Global" instead of "Local"
Tutorial 05: Collecting and Counting
- In order to count items, we have to create collision detections
- collisions have to be detected to trigger new behaviors
- collisions have to be "tested" to see which object has been pinged
- edit "PlayerController" script
- but before that, let's inspect the player object
- We're interested in the "Sphere Collider"
- In object header:
- turn down arrow (reveals more info)
- icon
- enable/disable checkbox
- types of component
- object sensitive gear gizmo
- icon of little book with question mark (help)
- Use book icon to go to offline Reference
- Offline Reference (PC)
- Component Help
- Switch to Scripting Help
- we want to use "OnTriggerEnter" function
- can be used for detecting object collision, without actual physical collision occuring
- "void OnTriggerEnter(Collider other)"
- references the "other" item we collide with
- "Destroy(other.gameObject);"
- destroys referenced game object that we collided with
- destroyed game objects and all their children are removed from the scene
- In this tutorial, we'll deactivate gameObject instead of destroying it
- Remove the "Destroy" code
- look up "Tag" under "GameObject"
- Tags can be assigned to objects for identification
- Tags must be declared in the "Tag Manager" before using
- look up "SetActive"
- method used to activate or disable objects
- example code:
- if(other.gameObject.tag == "Pickup")
- {
- other.gameObject.SetActive(false);
- }
- Basically checks if other object collided with has a Tag called "Pickup, and if it does, executes the code. In this instance, it tells the other game object to execute "SetActive" method to false.
- In UNITY, select Pickup object and under the inspector, check the TAG list
- add TAG
- under the first element (0), add "Pickup"
- name has to match exactly to the script
- apply tag to prefab
- Turn colliders into "Triggers"
- static objects don't get recalculated
- dynamic objects get recalculated
- must add RigidBody objects
- turn off Use Gravity
- activate "Is Kinematic"
- performane Tidbit:
- UNITY calculates all Static items and holds it in memory cache
- if we rotate a static collider, the cache gets rebuilt globally
- adding RigidBody and turning on "Is Kinematic" excludes items from Static collider cache
- "Is Kinematic" allows for animation through transforms (IE: elevators and moving platforms)
Tutorial 06: Displaying Text
- We need a tool to store collection count, and tool to add on top
- Add these tools to "PlayerController" script
- add private variable "count"
- initialize to zero under Start();
- under "void OnTriggerEnter(Collider other)"
- add: " count = count + 1 "
- Displaying Info via GUI Text:
- Add new empty GameObject: " Display_Text", transform 0,0,0
- Create "GUI Text" gameObject
- Parent to "Display_Text" game object
- Move to " Upper Left "
- 0,0 = lower left
- 1,1 = upper right\
- Set Transform to 0,1,0
- Then use "Pixel Offset" setting in the GUIText
- Under "PlayerController" script:
- add new public "GUIText" variable called "countText"
- this opens up another slot in Unity that allows for drag and drop
- initialize "countText" to:
- "Count: " + count.ToString();
- count.ToString(); must be after "count" has an initialized value
- update "countText" everytime an object is picked up
- under "void OnTriggerEnter(Collider other)"
- add "countText.text = "Count: " + count.ToString();
- create new function instead of typing "countText.text = ....." repeatedly
- void SetCountText()
- {
- countText.text = "Count: " + count.ToString();
- }
- add function call to respective locations of the script
- drag GuiText object into new "PlayerController" script slot
- VOILA!
- Displaying WIN condition:
- create new GUIText object "WinText"
- parent to DisplayText game object
- add reference to PlayerController script:
- create new public GUIText variable: " winText "
- initialize winText.text = ""; // empty text
- under " SetCountText()" function:
- add:
- if (count >= 12)
- {
- winText.text = "YOU WIN!";
- }
- save and return to unity
- drag-associate WinText object to the PlayerSphere reference call (drop it into the field)
Tutorial 07: Publishing the Game
- Unity can build to all to all target platforms
- Open Build Settings
- Current build settings are denoted by the UNITY icon
- Switch build platform by highlighting target platform, and hitting "Switch Platform"
- Add current scene to build by clicking "Add Current", or drag and drop any scenes from Project folder to the "Scenes to Build" field
- include only the scenes needed
- Hit "Build" button
- Create new folder under main project root folder called "Builds"
- Name the build, and Save
No comments:
Post a Comment