public class example : MonoBehaviour {private float memberVariable = 0.0F;... public class MyClass: MonoBehaviour{ private int count = 0; private void Start{ // Event public int GetCou
Trang 1Bài 8: T ng quan v l p trình trong Unity
- L p trình Game 2D Bài gi ng 1
Gi ng viên:
1
Trang 3N i dung
Ngôn ng trong Unity
JavaScript
Syntax c a JavaScript trong game
i u khi n GameObject v i JavaScript
Trang 4model
male Female house
…
Game Engine
(UDK, Blender, XNA, Unity…)
Game
(Perfect world, Chibi, Fantasy, SwordMan…)
Trang 5– Công c m c nh c a Unity
– UnityScript Editor
Trang 6Ngôn ng - Biên d ch Script
• Các scripts trong "Standard Assets", "Pro Standard Assets"
ho c "Plugins" c biên d ch tr c tiên
• n các scripts trong "Standard Assets/Editor", "Pro
Standard Assets/Editor" ho c "Plugins/Editor" c biên
d ch ti p sau ó
• n các scripts trong "Editor" c biên d ch ti p
• Các scripts còn l i s c biên d ch
Trang 8public class example : MonoBehaviour {
private float memberVariable = 0.0F;
Trang 9public class example : MonoBe haviour {
}
//boo
class example(MonoBehaviour):
Truy c p t m t class khác trong
project:
//javascript NameFile.golobalVariable
//C#
NameClass.golobalVariable
//Boo NameClass.golobalVariable
Trang 10Ngôn ng - Event
• Ví d : Khi click chu t trái, thì s ki n “OnMouseDown”
c g i
• Bây gi ta vi t o n code:
Debug.Log (“I click mouse-left”);//Javascript
• Khi ó, s ki n c m t hành ng trong Unity g i khi
c x lý
• Các s ki n khác: OnMouseUp, OnMouseOver, Awake,
Start, Update, LastUpdate,…
• Có r t nhi u các s ki n s c gi i thi u ph n ti p theo
Trang 12var value1: Number = 0.0;
var name = “String variable”;
var name: String = “String variable”;
Trang 13Ngôn ng - JavaScript
• Các lo i bi n:
– Undefined , Ví d : var n1;
– Null , Ví d : var n1 = null;
– int , Ví d : var n1: int= 1;
– Number , Ví d : var n1: Number = 0.1;
– String , Ví d : var n1 = “test String”;
– Boolean , Ví d : var n1:Boolean =false;//true
– Array , Ví d : var myArray = [];
– Date , Ví d : var d = new Date(2010,2,1);
Trang 14Ngôn ng - JavaScript
Ví d Giá tr tra l i
rounded to 5 digits
Miêu t
Math.abs(-2.3) 2.3 Giá tr tuy t i : (x < 0) ? -x : x
Math.acos(Math.SQRT1_2) 0.78540 rad = 45° Arccosine
Math.ceil(1.1) 2 Ceiling: round up to smallest integer =
Trang 16Ngôn ng - JavaScript
• Vi t JavaScript trong Unity
– Unity có ch a các GameObjects, m i GameObject có nhi u thành ph n (componets), m i component có
nhi u thu c tính (properties)
– Chúng ta có th vi t code them/xóa các component – Chúng ta có th vi t code thay i giá tr properties
c a c a các component
– Logic:
GameObject Component Property
Trang 17Ngôn ng - JavaScript
Trang 18• Bây gi , ta vi t m t o n code i u khi n gameobject
Trang 19Ngôn ng - JavaScript
• T ng t áp d ng v i các thành ph n khác nh : camera, light, rigidbody, sound, animation, guiText,…
• Ví d :
var other : GameObject;
other.camera.fieldOfView = 45;
Trang 20// Y axis at the same speed
transform.Rotate(Vector3.up * Time.deltaTime, Space.World);
}
Trang 21Ngôn ng - JavaScript
• Class trong JavaScript
– Khai báo b ng cách s d ng t khóa “class” – K th a: s d ng t khóa “extends”
Trang 22Javascript
22
Trang 24Ngôn ng – C#
Có th d ng MS.Net C# vi t m i th trong Unity
Ph i có kinh nghiêm l p trình h ng i t ng OOP
C# c biên d ch nhanh h n JavaScript
C# không gi ng JavaScript v cách biên d ch, JavaScript
th c hi n t ng b c m t còn C# thì không
C# s d ng các l p ph c t p h n
Trang 25Ví d : tên file “MyClass.cs”
Tên class ph i khai báo nh sau:
public class MyClass: MonoBehaviour
{
}
Trang 27Ngôn ng – C#
• Class: bi n variable
• C u trúc s d ng:
private/public/static <type> <name>[=<new type()>];
• Khi khai báo bi n, ph i khai báo lo i bi n
public int count = 0;
private bool flagShow = false;
static string myName = “Langvv”;
}
Trang 28public class MyClass: MonoBehaviour{
private int count = 0;
private void Start(){ // Event
public int GetCount(){ // method
}
Trang 29Ngôn ng – C#
• i u khi n GameObject c a C# gi ng nh JavaScript
• S ki n events trong C# gi ng s ki n trong JavaScript
GameObject Component Property
Trang 30Ngôn ng – C#
• i u khi n transform c a gameobject
using UnityEngine;
using System.Collections;
public class MyClass: MonoBehaviour{
private int count = 0;
void Update(){ //event
Trang 31C#
31
Trang 32}
Trang 33So sánh C# - Javascript
• Các lo i bi n variable
C#: bool, Javascript: boolean
C#: string, Javascript: String
• Khai báo bi n
// C#: the type is always stated when declaring a variable:
public int myPublicInt = 1; // a public var
int myPrivateInt = 2; // **private** access is default, if access is unspecified
public GameObject myObj; // a type is specified, but no value assigned
// Javascript - type specification is not necessary:
var myPublicInt = 1; // **public** access is default, if unspecified
private var myPrivateInt = 2; // a private var
var myObj : GameObject; // a type is specified, but no value assigned
Trang 34So sánh C# - Javascript
• Variables with dynamic type resolution
Ch trong Javascript, các bi n m i có ki u unspecified Ch
x y ra n u b n không gán giá tr trong khi khai báo bi n
Trang 36class MyClass : MonoBehaviour {
public int myVar = 1;
void Start() {
Debug.Log("hello world!");
}
}
Trang 37L p Components
Là l p c b n nh t c tích h p vào các GameObject
L p Component bao g m các thu c tính l u tr nh ng thông tin c b n và quan tr ng nh t i v i m t GameObject nh v trí c a i t ng trong không gian 3D, xoay c a i t ng, tên, tag …v…v
37
Thu c tính Chú thích
transform Thông tin v v trí, xoay
rigidbody Gi l p kh i l ng và tr ng l ng cho GameObject
camera Truy xu t n các thu c tính c a class Camera n u GameObject
c tích h p m t camer light Truy xu t n các thu c tính c a class Light n u GameObject
Trang 38GameObject c tích h p NetworkView
guiTexture Truy xu t n các thu c tính c a class GUITexture n u GameObject
c tích h p GUITexture
collider Truy xu t n các thu c tính c a class Collider n u GameObject
c tích h p Collider ( c dung ki m tra các va ch m )
hingeJoint Truy xu t n các thu c tính c a class HingeJoint n u GameObject
Trang 40L p Components
40
GetComponent Tr v ki u Component c tích h p vào i t ng
GetComponentInChildren Tr v ki u Component c tích h p vào i t ng ho c con
c a i t ng
GetComponentsInChildren Gi ng GetComponentsInChildren nh ng tr v nhi u
Component GetComponents Gi ng GetComponent nh ng tr v nhi u
Component CompareTag i t ng có thu c tag nào không?
Trang 41Truy xu t n thu c tính c a script
41
B t u b ng m t ví d c b n, o n code sau s di chuy n
m t i t ng thông qua input và m t bi n hi u ch nh t c
using UnityEngine;
using System.Collections;
public class Move : MonoBehaviour {
public float speed = 5.0F; //t c c a i t ng
float z = Input GetAxis( "Vertical" ) * Time deltaTime * speed; // t c theo c u trúc ngang
transform.Translate(x,0,z); // di chuy n theo vector (x,0,z)
}
}
Trang 42Truy xu t n thu c tính c a script
42
tính speed c a class Move c public ra ngoài ta có th
hi u ch nh tr c ti p b ng cách click chu t và nh p thông s ,
b n thân các script nên c xây d ng nh m t tool ti n
l i cho vi c hi u ch nh và tránh can thi p vào mã ngu n, ngoài ra còn n gi n hóa vi c s d ng script
Trang 43Truy xu t n thu c tính c a script
43
Trong quá trình phát tri n chúng ta s có nhu c u v vi c
hi u ch nh t c thông qua code, s d ng ph ng th c GetComponent truy xu t n thu c tính c a m t thành
ph n b t k c tích h p trong i t ng
using UnityEngine;
using System.Collections;
public class SetSpeed : MonoBehaviour {
// Use this for initialization
Trang 44Truy xu t n thu c tính c a script
44
i t ng v i script Move, thu c tính gameObject s truy
xu t n i t ng ch a 2 script này và thông qua ph ng
th c GetComponent truy xu t n m t thành ph n b t
k c tích h p vào i t ng, c th ây là script Move
Chú ý: T i script C# không th truy xu t n script Javascript thông qua ph ng th c GetComponent
Trang 45g i khi script giai o n kh i t o, th ng c dùng thi t l p ho c t i d li u ban u cho các Component
Trang 46này s c th c thi khi i t ng ch a nó bao g m m t Collider và va ch m v i m t Collider ho c Rigidbody c a m t
i t ng khác
này s c th c thi khi chu t c a ng i ch i click vào m t
i t ng có tích h p thành ph n GUIElement ho c Collider
Trang 47Các ph ng th c
c b n
47
Trang 48Debugging
48
Unity cung c p l p Debug h tr l p trình viên theo dõi
và ki m soát các l i, ây chúng ta quan tâm n ph ng
Trang 49public class SetSpeed : MonoBehaviour {
// Use this for initialization
Trang 51public class Example : MonoBehaviour {
void Awake() { myTransform = transform;
}
void Update () { myTransform.Translate(0,0,0);
} }
Trang 52 ti t ki m kho n th i gian ó nên s d ng thành ph n
c a GameObject thông qua bi n t nh
Trang 54public class Example : MonoBehaviour {
private Vector3 [] positions;
}
Trang 55using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour {
public Transform target;
Trang 56StartCoroutine( "TestDistance" );
} IEnumerable TestDistance() {
while (true) {
if ( Vector3 Distance(transform.position, target.position) > 100) {
Debug Log( "Khong lam gi" );
} yield return new WaitForSeconds (2);
} } }
Trang 57T i u hóa mã ngu n:
57
Yield và Coroutine
sau m i l n l p do tác ng c a yield, vi c xét kho ng cách
gi a ng i ch i và k ch s c th c thi 2 giây 1 l n, ti t
ki m c nhi u chi phí và gi m nh công vi c cho h
th ng
Trang 58Giao di n Scene,
Inspector, menu
58
Trang 59K t lu n
Ngôn ng trong Unity
JavaScript
Syntax c a JavaScript trong game
i u khi n GameObject v i JavaScript
Trang 60THANK YOU!