Official link
Official link: https://learn.unity.com/project/chu-ji-bian-cheng?uv=4.x
Don't say much, just post the code.
1. Script as behavior component
What are the scripts in Unity? Learn about the behavioral components of Unity scripts and how to create these scripts and attach them to objects.
using UnityEngine; using System.Collections; public class ExampleBehaviourScript : MonoBehaviour { void Update() { if (Input.GetKeyDown(KeyCode.R)) { GetComponent<Renderer> ().material.color = Color.red; } if (Input.GetKeyDown(KeyCode.G)) { GetComponent<Renderer>().material.color = Color.green; } if (Input.GetKeyDown(KeyCode.B)) { GetComponent<Renderer>().material.color = Color.blue; } } }
2. Variables and functions
What are variables and functions? How do they store and process information for us?
using UnityEngine; using System.Collections; public class VariablesAndFunctions : MonoBehaviour { int myInt = 5; void Start () { myInt = MultiplyByTwo(myInt); Debug.Log (myInt); } int MultiplyByTwo (int number) { int ret; ret = number * 2; return ret; } }
3. Conventions and grammar
Understand some basic conventions and syntax for writing code: dot operators, semicolons, indents, and comments.
using UnityEngine; using System.Collections; public class BasicSyntax : MonoBehaviour { void Start () { Debug.Log(transform.position.x); if(transform.position.y <= 5f) { Debug.Log ("I'm about to hit the ground!"); } } }
4.IF statement
How to use IF statements to set conditions in code.
using UnityEngine; using System.Collections; public class IfStatements : MonoBehaviour { float coffeeTemperature = 85.0f; float hotLimitTemperature = 70.0f; float coldLimitTemperature = 40.0f; void Update () { if(Input.GetKeyDown(KeyCode.Space)) TemperatureTest(); coffeeTemperature -= Time.deltaTime * 5f; } void TemperatureTest () { // If the temperature of coffee is higher than the hottest drinking temperature if(coffeeTemperature > hotLimitTemperature) { // ... Perform this operation. print("Coffee is too hot."); } // If not, but the temperature of coffee is lower than the coldest drinking temperature else if(coffeeTemperature < coldLimitTemperature) { // ... Perform this operation. print("Coffee is too cold."); } // If neither, then else { // ... Perform this operation. print("Coffee is just right."); } } }
5. Circulation
How to repeat operations in code using For, While, do While, and For Each loops.
ForLoop
using UnityEngine; using System.Collections; public class ForLoop : MonoBehaviour { int numEnemies = 3; void Start () { for(int i = 0; i < numEnemies; i++) { Debug.Log("Creating enemy number: " + i); } } }
WhileLoop
using UnityEngine; using System.Collections; public class WhileLoop : MonoBehaviour { int cupsInTheSink = 4; void Start () { while(cupsInTheSink > 0) { Debug.Log ("I've washed a cup!"); cupsInTheSink--; } } }
DoWhileLoop
using UnityEngine; using System.Collections; public class DoWhileLoop : MonoBehaviour { void Start() { bool shouldContinue = false; do { print ("Hello World"); }while(shouldContinue == true); } }
ForeachLoop
using UnityEngine; using System.Collections; public class ForeachLoop : MonoBehaviour { void Start () { string[] strings = new string[3]; strings[0] = "First string"; strings[1] = "Second string"; strings[2] = "Third string"; foreach(string item in strings) { print (item); } } }
6. Scope and access modifiers
Understand the scope and accessibility of variables and functions.
ScopeAndAccessModifiers
using UnityEngine; using System.Collections; public class ScopeAndAccessModifiers : MonoBehaviour { public int alpha = 5; private int beta = 0; private int gamma = 5; private AnotherClass myOtherClass; void Start () { alpha = 29; myOtherClass = new AnotherClass(); myOtherClass.FruitMachine(alpha, myOtherClass.apples); } void Example (int pens, int crayons) { int answer; answer = pens * crayons * alpha; Debug.Log(answer); } void Update () { Debug.Log("Alpha is set to: " + alpha); } }
AnotherClass
using UnityEngine; using System.Collections; public class AnotherClass { public int apples; public int bananas; private int stapler; private int sellotape; public void FruitMachine (int a, int b) { int answer; answer = a + b; Debug.Log("Fruit total: " + answer); } private void OfficeSort (int a, int b) { int answer; answer = a + b; Debug.Log("Office Supplies total: " + answer); } }
7. Wake and Start
How to use the two initialization functions of Unity, wake and Start.
using UnityEngine; using System.Collections; public class AwakeAndStart : MonoBehaviour { void Awake () { Debug.Log("Awake called."); } void Start () { Debug.Log("Start called."); } }
8.Update and FixedUpdate
How to use the Update and FixedUpdate functions to change each frame and the difference between them.
using UnityEngine; using System.Collections; public class UpdateAndFixedUpdate : MonoBehaviour { void FixedUpdate () { Debug.Log("FixedUpdate time :" + Time.deltaTime); } void Update () { Debug.Log("Update time :" + Time.deltaTime); } }
9. Vector mathematics
Introduction to vector mathematics and information about point products and cross products.
// No code
10. Enable and disable components
How to enable and disable components through scripts at run time.
using UnityEngine; using System.Collections; public class EnableComponents : MonoBehaviour { private Light myLight; void Start () { myLight = GetComponent<Light>(); } void Update () { if(Input.GetKeyUp(KeyCode.Space)) { myLight.enabled = !myLight.enabled; } } }
11. Activate game object
How to use SetActive and activeSelf/activeInHierarchy to process the active state of game objects in the scene separately and in the hierarchical view.
ActiveObjects
using UnityEngine; using System.Collections; public class ActiveObjects : MonoBehaviour { void Start () { gameObject.SetActive(false); } }
CheckState
using UnityEngine; using System.Collections; public class CheckState : MonoBehaviour { public GameObject myObject; void Start () { Debug.Log("Active Self: " + myObject.activeSelf); Debug.Log("Active in Hierarchy" + myObject.activeInHierarchy); } }
12.Translate and Rotate
How to use the two transform functions Translate and Rotate to change the position and rotation of non rigid objects.
using UnityEngine; using System.Collections; public class TransformFunctions : MonoBehaviour { public float moveSpeed = 10f; public float turnSpeed = 50f; void Update () { if(Input.GetKey(KeyCode.UpArrow)) transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime); if(Input.GetKey(KeyCode.DownArrow)) transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime); if(Input.GetKey(KeyCode.LeftArrow)) transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime); if(Input.GetKey(KeyCode.RightArrow)) transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime); } }
13.Look At
How to use the LookAt function to make the transformation component of one game object face the transformation component of another game object.
using UnityEngine; using System.Collections; public class CameraLookAt : MonoBehaviour { public Transform target; void Update () { transform.LookAt(target); } }
14. Linear interpolation
When making games, sometimes linear interpolation can be performed between two values. This is done through the Lerp function.
// In this example, result = 4 float result = Mathf.Lerp (3f, 5f, 0.5f); Vector3 from = new Vector3 (1f, 2f, 3f); Vector3 to = new Vector3 (5f, 6f, 7f); // Here result = (4, 5, 6) Vector3 result = Vector3.Lerp (from, to, 0.75f); void Update () { light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f * Time.deltaTime); }
15.Destroy
How to delete GameObjects and components at run time using the Destroy() function.
DestroyBasic
using UnityEngine; using System.Collections; public class DestroyBasic : MonoBehaviour { void Update () { if(Input.GetKey(KeyCode.Space)) { Destroy(gameObject); } } }
DestroyOther
using UnityEngine; using System.Collections; public class DestroyOther : MonoBehaviour { public GameObject other; void Update () { if(Input.GetKey(KeyCode.Space)) { Destroy(other); } } }
DestroyComponent
using UnityEngine; using System.Collections; public class DestroyComponent : MonoBehaviour { void Update () { if(Input.GetKey(KeyCode.Space)) { Destroy(GetComponent<MeshRenderer>()); } } }
16.GetButton and GetKey
This tutorial demonstrates how to get buttons or keys for input in the Unity project, and how to modify the behavior of these axes or through the Unity Input Manager.
KeyInput
using UnityEngine; using System.Collections; public class KeyInput : MonoBehaviour { public GUITexture graphic; public Texture2D standard; public Texture2D downgfx; public Texture2D upgfx; public Texture2D heldgfx; void Start() { graphic.texture = standard; } void Update () { bool down = Input.GetKeyDown(KeyCode.Space); bool held = Input.GetKey(KeyCode.Space); bool up = Input.GetKeyUp(KeyCode.Space); if(down) { graphic.texture = downgfx; } else if(held) { graphic.texture = heldgfx; } else if(up) { graphic.texture = upgfx; } else { graphic.texture = standard; } guiText.text = " " + down + "\n " + held + "\n " + up; } }
ButtonInput
using UnityEngine; using System.Collections; public class ButtonInput : MonoBehaviour { public GUITexture graphic; public Texture2D standard; public Texture2D downgfx; public Texture2D upgfx; public Texture2D heldgfx; void Start() { graphic.texture = standard; } void Update () { bool down = Input.GetButtonDown("Jump"); bool held = Input.GetButton("Jump"); bool up = Input.GetButtonUp("Jump"); if(down) { graphic.texture = downgfx; } else if(held) { graphic.texture = heldgfx; } else if(up) { graphic.texture = upgfx; } else { graphic.texture = standard; } guiText.text = " " + down + "\n " + held + "\n " + up; } }
17.GetAxis
How to get axis based input for games in Unity and how to modify these axes through Input Manager.
AxisExample
using UnityEngine; using System.Collections; public class AxisExample : MonoBehaviour { public float range; public GUIText textOutput; void Update () { float h = Input.GetAxis("Horizontal"); float xPos = h * range; transform.position = new Vector3(xPos, 2f, 0); textOutput.text = "Value Returned: "+h.ToString("F2"); } }
AxisRawExample
using UnityEngine; using System.Collections; public class AxisRawExample : MonoBehaviour { public float range; public GUIText textOutput; void Update () { float h = Input.GetAxisRaw("Horizontal"); float xPos = h * range; transform.position = new Vector3(xPos, 2f, 0); textOutput.text = "Value Returned: "+h.ToString("F2"); } }
DualAxisExample
using UnityEngine; using System.Collections; public class DualAxisExample : MonoBehaviour { public float range; public GUIText textOutput; void Update () { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); float xPos = h * range; float yPos = v * range; transform.position = new Vector3(xPos, yPos, 0); textOutput.text = "Horizontal Value Returned: "+h.ToString("F2")+"\nVertical Value Returned: "+v.ToString("F2"); } }
18.OnMouseDown
How to detect mouse clicks on colliders or GUI elements.
using UnityEngine; using System.Collections; public class MouseClick : MonoBehaviour { void OnMouseDown () { rigidbody.AddForce(-transform.forward * 500f); rigidbody.useGravity = true; } }
19.GetComponent
How to use the GetComponent function to process properties of other scripts or components.
UsingOtherComponents
using UnityEngine; using System.Collections; public class UsingOtherComponents : MonoBehaviour { public GameObject otherGameObject; private AnotherScript anotherScript; private YetAnotherScript yetAnotherScript; private BoxCollider boxCol; void Awake () { anotherScript = GetComponent<AnotherScript>(); yetAnotherScript = otherGameObject.GetComponent<YetAnotherScript>(); boxCol = otherGameObject.GetComponent<BoxCollider>(); } void Start () { boxCol.size = new Vector3(3,3,3); Debug.Log("The player's score is " + anotherScript.playerScore); Debug.Log("The player has died " + yetAnotherScript.numberOfPlayerDeaths + " times"); } }
AnotherScript
using UnityEngine; using System.Collections; public class AnotherScript : MonoBehaviour { public int playerScore = 9001; }
YetAnotherScript
using UnityEngine; using System.Collections; public class YetAnotherScript : MonoBehaviour { public int numberOfPlayerDeaths = 3; }
20.DeltaTime
What is Delta Time? How can it be used to smooth and interpret values in the game?
using UnityEngine; using System.Collections; public class UsingDeltaTime : MonoBehaviour { public float speed = 8f; public float countdown = 3.0f; void Update () { countdown -= Time.deltaTime; if(countdown <= 0.0f) light.enabled = true; if(Input.GetKey(KeyCode.RightArrow)) transform.position += new Vector3(speed * Time.deltaTime, 0.0f, 0.0f); } }
21. Data type
Understand the important differences between value and reference data types to better understand how variables work.
using UnityEngine; using System.Collections; public class DatatypeScript : MonoBehaviour { void Start () { //Value type variable Vector3 pos = transform.position; pos = new Vector3(0, 2, 0); //Reference type variable Transform tran = transform; tran.position = new Vector3(0, 2, 0); } }
22. Category
How to use classes to store and organize information, and how to create constructors to handle various parts of the class.
SingleCharacterScript
using UnityEngine; using System.Collections; public class SingleCharacterScript : MonoBehaviour { public class Stuff { public int bullets; public int grenades; public int rockets; public Stuff(int bul, int gre, int roc) { bullets = bul; grenades = gre; rockets = roc; } } public Stuff myStuff = new Stuff(10, 7, 25); public float speed; public float turnSpeed; public Rigidbody bulletPrefab; public Transform firePosition; public float bulletSpeed; void Update () { Movement(); Shoot(); } void Movement () { float forwardMovement = Input.GetAxis("Vertical") * speed * Time.deltaTime; float turnMovement = Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime; transform.Translate(Vector3.forward * forwardMovement); transform.Rotate(Vector3.up * turnMovement); } void Shoot () { if(Input.GetButtonDown("Fire1") && myStuff.bullets > 0) { Rigidbody bulletInstance = Instantiate(bulletPrefab, firePosition.position, firePosition.rotation) as Rigidbody; bulletInstance.AddForce(firePosition.forward * bulletSpeed); myStuff.bullets--; } } }
Inventory
using UnityEngine; using System.Collections; public class Inventory : MonoBehaviour { public class Stuff { public int bullets; public int grenades; public int rockets; public float fuel; public Stuff(int bul, int gre, int roc) { bullets = bul; grenades = gre; rockets = roc; } public Stuff(int bul, float fu) { bullets = bul; fuel = fu; } // Constructor public Stuff () { bullets = 1; grenades = 1; rockets = 1; } } // Create an instance (object) of the Stuff class public Stuff myStuff = new Stuff(50, 5, 5); public Stuff myOtherStuff = new Stuff(50, 1.5f); void Start() { Debug.Log(myStuff.bullets); } }
MovementControls
using UnityEngine; using System.Collections; public class MovementControls : MonoBehaviour { public float speed; public float turnSpeed; void Update () { Movement(); } void Movement () { float forwardMovement = Input.GetAxis("Vertical") * speed * Time.deltaTime; float turnMovement = Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime; transform.Translate(Vector3.forward * forwardMovement); transform.Rotate(Vector3.up * turnMovement); } }
Shooting
using UnityEngine; using System.Collections; public class Shooting : MonoBehaviour { public Rigidbody bulletPrefab; public Transform firePosition; public float bulletSpeed; private Inventory inventory; void Awake () { inventory = GetComponent<Inventory>(); } void Update () { Shoot(); } void Shoot () { if(Input.GetButtonDown("Fire1") && inventory.myStuff.bullets > 0) { Rigidbody bulletInstance = Instantiate(bulletPrefab, firePosition.position, firePosition.rotation) as Rigidbody; bulletInstance.AddForce(firePosition.forward * bulletSpeed); inventory.myStuff.bullets--; } } }
23.Instantiate
How to use Instantiate to create clones of preforms during runtime.
UsingInstantiate
using UnityEngine; using System.Collections; public class UsingInstantiate : MonoBehaviour { public Rigidbody rocketPrefab; public Transform barrelEnd; void Update () { if(Input.GetButtonDown("Fire1")) { Rigidbody rocketInstance; rocketInstance = Instantiate(rocketPrefab, barrelEnd.position, barrelEnd.rotation) as Rigidbody; rocketInstance.AddForce(barrelEnd.forward * 5000); } } }
RocketDestruction
using UnityEngine; using System.Collections; public class RocketDestruction : MonoBehaviour { void Start() { Destroy (gameObject, 1.5f); } }
24. Array
Use arrays to group variables together for easy management.
using UnityEngine; using System.Collections; public class Arrays : MonoBehaviour { public GameObject[] players; void Start () { players = GameObject.FindGameObjectsWithTag("Player"); for(int i = 0; i < players.Length; i++) { Debug.Log("Player Number "+i+" is named "+players[i].name); } } }
25.Invoke
The Invoke function can be used to schedule method calls at a later time. In this video, you will learn how to use the Invoke, InvokeRepeating, and CancelInvoke functions in Unity scripts.
InvokeScript
using UnityEngine; using System.Collections; public class InvokeScript : MonoBehaviour { public GameObject target; void Start() { Invoke ("SpawnObject", 2); } void SpawnObject() { Instantiate(target, new Vector3(0, 2, 0), Quaternion.identity); } }
InvokeRepeating
using UnityEngine; using System.Collections; public class InvokeRepeating : MonoBehaviour { public GameObject target; void Start() { InvokeRepeating("SpawnObject", 2, 1); } void SpawnObject() { float x = Random.Range(-2.0f, 2.0f); float z = Random.Range(-2.0f, 2.0f); Instantiate(target, new Vector3(x, 2, z), Quaternion.identity); } }
26. Enumeration
Enumeration can be used to create a collection of related constants. In this video, you will learn how to declare and use enumerations in your code.
public class EnumScript : MonoBehaviour { enum Direction {North, East, South, West}; void Start () { Direction myDirection; myDirection = Direction.North; } Direction ReverseDirection (Direction dir) { if(dir == Direction.North) dir = Direction.South; else if(dir == Direction.South) dir = Direction.North; else if(dir == Direction.East) dir = Direction.West; else if(dir == Direction.West) dir = Direction.East; return dir; } }
27.Switch statement
The switch statement is similar to simplifying conditions. Such statements are useful when you want to compare a single variable with a series of constants. In this video, you will learn how to write and use switch statements.
using UnityEngine; using System.Collections; public class ConversationScript : MonoBehaviour { public int intelligence = 5; void Greet() { switch (intelligence) { case 5: print ("Why hello there good sir! Let me teach you about Trigonometry!"); break; case 4: print ("Hello and good day!"); break; case 3: print ("Whadya want?"); break; case 2: print ("Grog SMASH!"); break; case 1: print ("Ulg, glib, Pblblblblb"); break; default: print ("Incorrect intelligence level."); break; } } }