KEMBAR78
Lecture 2: C# Programming for VR application in Unity | PDF
Lecture 2: C# Programming 

by Making Gold Miner Game
Dr. Kobkrit Viriyayudhakorn

iApp Technology Limited

kobkrit@iapp.co.th
ITS488 (Digital Content Creation with Unity - Game and VR Programming)
Troubleshooting
• Confuse? Read a manual at https://docs.unity3d.com/2017.1/
Documentation/Manual/UnityManual.html

• Get any problem? Google it: "DOING ANYTHING in unity"

Review: Writing Code in Unity
Right click at Project Window Name it as "ConsolePrinter"
Start writing a code
• Double Click at the ConsolePrinter.cs

• The MonoDevelop-Unity IDE will be show up and you can make the first
program.
Code structure
Printing a Text
Save and Go back to Unity
Create
a New
Game
Object
Right click Select
Rename + Enter
Inspect Window

on the right.
Attaching Script to A Game Object
1. Drag the
ConsolePrinter
script and drop
onto
ConsolePrinterGO
in Hierarchy
Window

2. Or Drag onto 

Inspector
Window
Start Running
• Click on Run Button

• Switch to Console Window, you will see "Hello World!" text.

Print Statement
Output Console
Variable #1: int
Output Console
Variable #2: int & float & string
Output Console
Variable #3: int & float oper.
Output Console
Variable #4: string & bool oper.
Output Console
Type Represents Range Default
Value
bool Boolean value True or False FALSE
byte 8-bit unsigned integer 0 to 255 0
char 16-bit Unicode character U +0000 to U +ffff '0’
decimal 128-bit precise decimal values with
28-29 significant digits
(-7.9 x 1028
to 7.9 x 1028
) / 100 to 28 0.0M
double 64-bit double-precision floating point
type
(+/-)5.0 x 10-324
to (+/-)1.7 x 10308
0.0D
float 32-bit single-precision floating point
type
-3.4 x 1038
to + 3.4 x 1038
0.0F
int 32-bit signed integer type -2,147,483,648 to 2,147,483,647 0
long 64-bit signed integer type -9,223,372,036,854,775,808 to
9,223,372,036,854,775,807
0L
sbyte 8-bit signed integer type -128 to 127 0
short 16-bit signed integer type -32,768 to 32,767 0
uint 32-bit unsigned integer type 0 to 4,294,967,295 0
ulong 64-bit unsigned integer type 0 to 18,446,744,073,709,551,615 0
ushort 16-bit unsigned integer type 0 to 65,535 0
if-else oper.
Output Console
Game Planning
• You are a gold miner and you want to find
a gold pit.

• You can move up, down, left, and right.

• Movement is a fixed distance.

• After each turn, your distance from the
gold pit is displayed.

• You win when you get the gold pit.

• Your score is how many turns it took.
Rough Pseudo Code
• Set Start Location

• Calculate distance from Gold pit.

• Print the distance 

• Read player’s move

• Update location from the Gold pit.

• Repeat.
Start Writing a Game Logic
Output Console
If we change loc = 10.3
Output Console
Rough Pseudo Code
• Set Start Location

• Calculate distance from Gold pit.

• Print the distance 

• Read player’s move

• Update location from the Gold pit.

• Repeat.
Input.GetKeyDown
Reading User Input
Output Console 

(After press left arrow couple times)
Make sure you select the Game tab

Before pressing the left key. ->
Adding more Keydown
Output Console 

(After press left+right arrow couple times)
* Make sure you select the Game tab

Before pressing the left key.
Update Location
Output Console
Variable Scope: loc
Scope of loc
Make it class variable
Scope of loc
Move the variable declaration from within

"Start()" Method to within "GoldMiner" class.

(Outer the "Start()" method)
Output Console
Class variable assignment
• Can not be the product from the
computation.

• Can be a constant or not
assignment at all.

• You can re-assign the class
variable in any function body.
Do Distance Calculation when a key is pressed.
Output Console
Now it is playable!
Too much duplicate code!
• Using a method /
function for repeatedly
run code.

• Make code much
shorter. Easier to
manage the code
structure.
Function!
• Return nothing, just
print the message out.

• Use "void" return type.

• Call it when you want to
re-calculate the
distance.

• Call it when you want to
print out the distance
result.
Create calculateDistance Function
Completed Game for 1D world.
Keep pressing
right arrow

Programming C# for 2D world
Vectors
X
(4,3)
y=3
x=4
(0,0)
Vectors Addition
a
b
a+b(0,0)
Vectors Reduction
a
b
a+b
-b
a-b
(0,0)
Finding Distance of Two Vectors
Gold

Miner
(0,0)
Gold

Pit
- Gold Miner + Gold Pit
Objects and Class
Class Car
Class = Template
Object = Product
new
Methods and Attributes
Converting from 1d to 2d
• Using the Vector2 instead of float (Don’t forget the new keyword)

• Update distance to be pathToGoldPit Vector2

• Compute the distance by using Vector2 magnitude property.

• Remove all non make-sense code (written for 1d world).
Converting from 1d to 2d
the magnitude of vector = the length of the vector
Converting from 1d to 2d
Since we could not compare less than and greater than in the Vector2 class,

the code in the block need to be removed, otherwise, the complication errors.
Update the location in Vector2
X Y
Testing
Haha! We forgot Up and Down button. We can not win!
Public variables
Inspector Panel
All public variable will be debuggable in the Inspector Panel.
You can change the value and 

see the change in real time!
Exercise I
• Implement Up and Down button, so the player can completed the game.

• Starting code is located at https://github.com/kobkrit/vr2017class/blob/
master/exercise1.cs
Glossary 1
Name Meaning Example
Value Numbers, text, etc. “Hello world”, 3.14f, 1
Type The “shape” of the value. int, float, string
Variable
The correctly typed box for the
values.
int anInteger;
Statement A command to the computer. print("hello")
Expression
A command that evaluates to a
value.
homeLocation - location

"Distance:" + distance
Glossary 2
Name Meaning Example
Method
A factory which something to
input to get output.
Input.GetKeyDown(...)
Arguments The inputs to a method KeyCode.RightArrow
Return value The output of a method if(Input.GetKeyDown(...))
Operation
Like a method but with an
operator rather than a name.
Often ‘infix’.
1 + 2
Glossary 3
Name Meaning Example
Object
A collection of variables with
values and methods that act on
those variables.
The actual house.
Class
The blueprint of the variables and
methods.
An architect's drawing of a
house.
Instantiation
The process of making an object
from a class.
new Vector2(2.0f, 3.0f)
Instance
Same as an object. Often used to
say “an instance of a class X”.
The actual house according to
drawings X.
Homework
• Can we print out the location into the console? 

• If we have multiple gold pits?

• If we have traps?

• When an user fells to the traps, GAME OVER!

Lecture 2: C# Programming for VR application in Unity

  • 1.
    Lecture 2: C#Programming 
 by Making Gold Miner Game Dr. Kobkrit Viriyayudhakorn iApp Technology Limited kobkrit@iapp.co.th ITS488 (Digital Content Creation with Unity - Game and VR Programming)
  • 2.
    Troubleshooting • Confuse? Reada manual at https://docs.unity3d.com/2017.1/ Documentation/Manual/UnityManual.html • Get any problem? Google it: "DOING ANYTHING in unity"

  • 3.
    Review: Writing Codein Unity Right click at Project Window Name it as "ConsolePrinter"
  • 4.
    Start writing acode • Double Click at the ConsolePrinter.cs • The MonoDevelop-Unity IDE will be show up and you can make the first program.
  • 5.
  • 6.
    Printing a Text Saveand Go back to Unity
  • 7.
    Create a New Game Object Right clickSelect Rename + Enter Inspect Window
 on the right.
  • 8.
    Attaching Script toA Game Object 1. Drag the ConsolePrinter script and drop onto ConsolePrinterGO in Hierarchy Window
 2. Or Drag onto 
 Inspector Window
  • 9.
    Start Running • Clickon Run Button • Switch to Console Window, you will see "Hello World!" text.

  • 10.
  • 11.
  • 12.
    Variable #2: int& float & string Output Console
  • 13.
    Variable #3: int& float oper. Output Console
  • 14.
    Variable #4: string& bool oper. Output Console
  • 15.
    Type Represents RangeDefault Value bool Boolean value True or False FALSE byte 8-bit unsigned integer 0 to 255 0 char 16-bit Unicode character U +0000 to U +ffff '0’ decimal 128-bit precise decimal values with 28-29 significant digits (-7.9 x 1028 to 7.9 x 1028 ) / 100 to 28 0.0M double 64-bit double-precision floating point type (+/-)5.0 x 10-324 to (+/-)1.7 x 10308 0.0D float 32-bit single-precision floating point type -3.4 x 1038 to + 3.4 x 1038 0.0F int 32-bit signed integer type -2,147,483,648 to 2,147,483,647 0 long 64-bit signed integer type -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 0L sbyte 8-bit signed integer type -128 to 127 0 short 16-bit signed integer type -32,768 to 32,767 0 uint 32-bit unsigned integer type 0 to 4,294,967,295 0 ulong 64-bit unsigned integer type 0 to 18,446,744,073,709,551,615 0 ushort 16-bit unsigned integer type 0 to 65,535 0
  • 16.
  • 17.
    Game Planning • Youare a gold miner and you want to find a gold pit. • You can move up, down, left, and right. • Movement is a fixed distance. • After each turn, your distance from the gold pit is displayed. • You win when you get the gold pit. • Your score is how many turns it took.
  • 18.
    Rough Pseudo Code •Set Start Location • Calculate distance from Gold pit. • Print the distance • Read player’s move • Update location from the Gold pit. • Repeat.
  • 19.
    Start Writing aGame Logic Output Console
  • 20.
    If we changeloc = 10.3 Output Console
  • 21.
    Rough Pseudo Code •Set Start Location • Calculate distance from Gold pit. • Print the distance • Read player’s move • Update location from the Gold pit. • Repeat.
  • 22.
  • 23.
    Reading User Input OutputConsole 
 (After press left arrow couple times) Make sure you select the Game tab
 Before pressing the left key. ->
  • 24.
    Adding more Keydown OutputConsole 
 (After press left+right arrow couple times) * Make sure you select the Game tab
 Before pressing the left key.
  • 25.
  • 26.
  • 27.
    Make it classvariable Scope of loc Move the variable declaration from within "Start()" Method to within "GoldMiner" class.
 (Outer the "Start()" method) Output Console
  • 28.
    Class variable assignment •Can not be the product from the computation. • Can be a constant or not assignment at all. • You can re-assign the class variable in any function body.
  • 29.
    Do Distance Calculationwhen a key is pressed. Output Console Now it is playable!
  • 30.
    Too much duplicatecode! • Using a method / function for repeatedly run code. • Make code much shorter. Easier to manage the code structure. Function!
  • 31.
    • Return nothing,just print the message out. • Use "void" return type. • Call it when you want to re-calculate the distance. • Call it when you want to print out the distance result. Create calculateDistance Function
  • 32.
    Completed Game for1D world. Keep pressing right arrow

  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
    Finding Distance ofTwo Vectors Gold
 Miner (0,0) Gold
 Pit - Gold Miner + Gold Pit
  • 38.
    Objects and Class ClassCar Class = Template Object = Product new
  • 39.
  • 40.
    Converting from 1dto 2d • Using the Vector2 instead of float (Don’t forget the new keyword) • Update distance to be pathToGoldPit Vector2 • Compute the distance by using Vector2 magnitude property. • Remove all non make-sense code (written for 1d world).
  • 41.
    Converting from 1dto 2d the magnitude of vector = the length of the vector
  • 42.
    Converting from 1dto 2d Since we could not compare less than and greater than in the Vector2 class, the code in the block need to be removed, otherwise, the complication errors.
  • 43.
    Update the locationin Vector2 X Y
  • 44.
    Testing Haha! We forgotUp and Down button. We can not win!
  • 45.
    Public variables Inspector Panel Allpublic variable will be debuggable in the Inspector Panel. You can change the value and 
 see the change in real time!
  • 46.
    Exercise I • ImplementUp and Down button, so the player can completed the game. • Starting code is located at https://github.com/kobkrit/vr2017class/blob/ master/exercise1.cs
  • 47.
    Glossary 1 Name MeaningExample Value Numbers, text, etc. “Hello world”, 3.14f, 1 Type The “shape” of the value. int, float, string Variable The correctly typed box for the values. int anInteger; Statement A command to the computer. print("hello") Expression A command that evaluates to a value. homeLocation - location "Distance:" + distance
  • 48.
    Glossary 2 Name MeaningExample Method A factory which something to input to get output. Input.GetKeyDown(...) Arguments The inputs to a method KeyCode.RightArrow Return value The output of a method if(Input.GetKeyDown(...)) Operation Like a method but with an operator rather than a name. Often ‘infix’. 1 + 2
  • 49.
    Glossary 3 Name MeaningExample Object A collection of variables with values and methods that act on those variables. The actual house. Class The blueprint of the variables and methods. An architect's drawing of a house. Instantiation The process of making an object from a class. new Vector2(2.0f, 3.0f) Instance Same as an object. Often used to say “an instance of a class X”. The actual house according to drawings X.
  • 50.
    Homework • Can weprint out the location into the console? • If we have multiple gold pits? • If we have traps? • When an user fells to the traps, GAME OVER!