Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 60 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
60
Dung lượng
687,17 KB
Nội dung
Bài 8: T ng quan v l p trình Unity Gi ng viên: - L p trình Game 2D Bài gi ng 1 M C TIÊU Gi i thi u chung Ngôn ng Unity L p components Truy xu t thu c tính c a script Các ph ng th c c b n Debugging T i u hóa mã ngu n N i dung Ngôn ng Unity JavaScript Syntax c a JavaScript game i u n GameObject v i JavaScript C# Syntax c a C# game i u n GameObject v i C# So sánh C# JavaScript L p components Truy xu t thu c tính c a script Các ph ng th c c b n Debugging T i u hóa mã ngu n Ngôn ng – GameEngine gì? • Là ph n m m xây d ng, l p trình lên game • Có th giao ti p v i ph n m m khác • Giúp cho vi c t o game m t cách nhanh chóng image audio model wood Ice bg hit Music talk male Female house … Game Engine (UDK, Blender, XNA, Unity…) Game (Perfect world, Chibi, Fantasy, SwordMan…) Ngôn ng • Unity ch y Mono framework • Unity h tr ngôn ng : – JavaScript – C# – Boo • M t vài ph n m m vi t cho Unity – Notepad, Notepad++, MS Word – MS Net – Công c m c nh c a Unity – UnityScript Editor Ngôn ng - Biên d ch Script • Các scripts "Standard Assets", "Pro Standard Assets" ho c "Plugins" c biên d ch tr c tiên • n scripts "Standard Assets/Editor", "Pro Standard Assets/Editor" ho c "Plugins/Editor" c biên d ch ti p sau ó • n scripts "Editor" c biên d ch ti p • Các scripts l i s c biên d ch Ngôn ng – Bi n variable • Member Variables – Cách khai báo bi n: //JavaScript var memberVariable = 0.0; //C# public class example : MonoBehaviour { public float memberVariable = 0.0F; } //boo class example(MonoBehaviour): public memberVariable as single = 0.0F Ngôn ng – Bi n variable • Các bi n Private – Các bi n c khai báo v i t khóa Private //JavaScript private var memberVariable = 0.0; //C# public class example : MonoBehaviour { private float memberVariable = 0.0F; } //boo class example(MonoBehaviour): private memberVariable as single = 0.0F Ngôn ng – Bi n variable • Bi n Global – T o m t bi n global b ng cách s d ng t khóa static – //JavaScript static var globalVariable = 0.0; Truy c p t m t class khác project: //C# public class example : MonoBehaviour { //javascript NameFile.golobalVariable static float globalVariable = 0.0F; } //C# NameClass.golobalVariable //boo class example(MonoBehaviour): //Boo static globalVariable as singleNameClass.golobalVariable = 0.0F Ngôn ng - Event • Ví d : Khi click chu t trái, 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 Unity g i c x lý • Các s ki n khác: OnMouseUp, OnMouseOver, Awake, Start, Update, LastUpdate,… • Có r t nhi u s ki n s c gi i thi u ph n ti p theo Các ph ng th c c b n Start(): c g i th c hi n tr c ph ng th c Update() nh ng l i sau Awake(), Khác c b n gi a Start() Awake() ph ng th c Start() ch c g i script không b ình ch ho t ng (enabled) OnCollisionEnter(): Nh ng o n code thu c ph ng th c s c th c thi i t ng ch a bao g m m t Collider va ch m v i m t Collider ho c Rigidbody c a m t i t ng khác OnMouseDown(): Nh ng o n code thu c ph ng th c s c th c thi 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 46 Các ph ng th c c b n 47 Debugging Unity cung c p l p Debug h tr l p trình viên theo dõi ki m soát l i, ây quan tâm n ph ng th c Debug.Log() Ph ng th c Log() cho phép ng i dùng g i m t thông tin n Unity Console nh m m c ích: • Ch ng minh r ng o n mã ang c th c hi n • Báo cáo tình tr ng hi n t i c a bi n Tr l i ví d v l p SetSpeed, ki m tra t c c a i t ng m i ng i ch i t ng t c 48 Debugging Tr l i ví d v l p SetSpeed, ki m tra t c m i ng i ch i t ng t c c a using UnityEngine; using System.Collections; public class SetSpeed : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKey(KeyCode.U)) { Move moveScript = gameObject.GetComponent;// truy xu t moveScript.speed += 0.5F;// t ng t c Debug.Log(moveScript.speed); } } } it ng n l p Move 49 T i u hóa mã ngu n: S d ng thành ph n c a GameObject thông qua bi n t nh: Nh ã tìm hi u m c trên, b n thân m t GameObject c tích h p s n thành ph n l u tr thông tin c a chúng không gian 3D, ây s l y ví d c th v i thành ph n transform using UnityEngine; using System.Collections; public class Example : MonoBehaviour { void Update () { transform.Translate(0,0,0); } } 50 T i u hóa mã ngu n: S d ng thành ph n c a GameObject thông qua bi n t nh: o n mã c s a l i nh sau: using UnityEngine; using System.Collections; public class Example : MonoBehaviour { private Transform myTransform; void Awake() { myTransform = transform; } void Update () { myTransform.Translate(0,0,0); } } 51 T i u hóa mã ngu n: S d ng thành ph n c a GameObject thông qua bi n t nh: M i g i m t thành ph n b t k c a GameObject, h th ng Unity s t n th i gian t qua thành ph n c tích h p GameObject cu i tr v k t qu thích h p, 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 52 T i u hóa mã ngu n: S d ng m ng t nh Các l p ArrayList hay Array r t d s d ng, có th d dàng thêm m t ph n t vào m ng s d ng ph ng th c, nh ng chi phí ph i tr h th ng th c hi n i u ó r t cao Thay v y, vi c s d ng m ng c c u trúc s n s gi m b t công vi c cho h th ng, ph n t m ng có ki u dài c a m ng ã c xác nh t tr c, ch m t th i gian xác nh dài m ng c n thi t, bù l i ti t ki m c m t kho n chi phí l n 53 T i u hóa mã ngu n: S d ng m ng t nh Chú ý: H n ch s d ng for, foreach, nên s d ng while t ct c t i u using UnityEngine; using System.Collections; public class Example : MonoBehaviour { private Vector3[] positions; void Awake() { positions= new Vector3[100]; int i = 0; while (i < 100) { positions[i] = Vector3.zero; i++; } } } 54 T i u hóa mã ngu n: Hi u ch nh t n s s d ng ph ng th c tv n : Khi ng i ch i xa, k ch s tr ng thái ng t m th i Gi i thích: o n mã s xét kho ng cách gi a ng i ch i k ch t i m i frame, nh ng i u ó không c n thi t, trung bình m t giây h th ng ch y t 30 n 40 khung hình, chi phí b l n nh ng hi u qu l i không cao using UnityEngine; using System.Collections; public class Example : MonoBehaviour { public Transform target; void Update () { if (Vector3.Distance(transform.position, target.position) > 100) return; } } 55 T i u hóa mã ngu n: Yield Coroutine Các Coroutine cho phép ình tr hay làm tr vi c th c thi m t o n mã ho c m t ph ng th c, áp d ng x lý v n nêu using UnityEngine; using System.Collections; public class Example : MonoBehaviour { public Transform target; void Start() { StartCoroutine("TestDistance"); } IEnumerable TestDistance() { while (true) { if (Vector3.Distance(transform.position, target.position) > 100) { Debug.Log("Khong lam gi"); } yield return new WaitForSeconds(2); } } } 56 T i u hóa mã ngu n: Yield Coroutine Gi i thích: Vi c th c thi vòng l p while s b ch m l i giây sau m i l n l p tác ng c a yield, vi c xét kho ng cách gi a ng i ch i k ch s c th c thi giây l n, ti t ki m c nhi u chi phí gi m nh công vi c cho h th ng 57 Giao di n Scene, Inspector, menu 58 K t lu n Ngôn ng Unity JavaScript Syntax c a JavaScript game i u n GameObject v i JavaScript C# Syntax c a C# game i u n GameObject v i C# So sánh C# JavaScript L p components Truy xu t thu c tính c a script Các ph ng th c c b n Debugging T i u hóa mã ngu n 59 THANK YOU! [...]... 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 Ngôn ng - JavaScript Ngôn ng - JavaScript i u khi n gameobject • Bây gi , ta vi... using UnityEngine; using System.Collections; public class MyClass: MonoBehaviour{ private int count = 0; private void Start(){ // Event count = 100; } public int GetCount(){ //method return count; } } Ngôn ng – C# • i u khi n GameObject c a C# gi ng nh JavaScript GameObject Component Property • S ki n events trong C# gi ng s ki n trong JavaScript Ngôn ng – C# • i u khi n transform c a gameobject using UnityEngine;... chuy n trên tr c x function Update() { gameObject.transform.position.x += 1; } • H N • C M H S S R T B Ngô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; Ngôn ng - JavaScript • Ví d code: “SetRotateObj.js” function Update() { //set gameobject move to (0,0,0) transform.position... - JavaScript Math Ví d Math.abs(-2.3) Math.acos(Math.SQRT1_2) Math.ceil(1.1) Giá tr tra l i rounded to 5 digits 2.3 0. 785 40 rad = 45° 2 Miêu t Math.cos(Math.PI/4) Math.exp(1) Math.floor(1.9) 0.70711 2.7 183 1 Math.max(1, -2) Math.min(1, -2) Math.pow(-3, 2) 1 -2 9 Math.random() 0.170 68 Math.round(1.5) 2 Làm tròn (e.g 1.5 rounds to 2) Math.sin(Math.PI/4) Math.sqrt(49) Math.tan(Math.PI/4) 0.70711 7 1 Sine... khóa “using” • Th vi n s d ng ph i có trên Mono ho c th viên Net • Ví d : using UnityEngine; using System.Collections; public class MyClass: MonoBehaviour { } Ngôn ng – C# • Class: bi n variable • C u trúc s d ng: private/public/static [=]; • Khi khai báo bi n, ph i khai báo lo i bi n • Ví d : using UnityEngine; using System.Collections; public class MyClass: MonoBehaviour { public... MyJavaScriptClass extends MonoBehaviour { // member variable // method } Javascript 22 Ngôn ng – C# • C# – Cú pháp trong C# • Class • Variable • Method – i u khi n GameObject v i C# Ngô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 C# ng it ng OOP 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... gameobject using UnityEngine; using System.Collections; public class MyClass: MonoBehaviour{ private int count = 0; void Update(){ //event gameObject.transform.position.x += 1; } void OnMouseDown(){ count +=1; Debug.Log(“Get count = ”+count); } } C# 31 So sánh C# - Javascript • V Unity Script Directives // Javascript example @script AddComponentMenu ("Transform/Follow Transform") class FollowTransform extends... 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 So sánh C# - Javascript...Ngôn ng - JavaScript • Ph n 1: JavaScript – Bi n và các lo i bi n (variable) – Hàm (Function) – S kiên (Event) – L p (Class) – i u khi n m t GameObject b ng JavaScript Ngôn g - JavaScript • Khai báo bi n: var [: Type] [= ]; Ví d : var n1; var n: int = 0; var value1 = 0.0; var value1: Number = 0.0; var name = “String variable”; ... Math.cos(Math.PI/4) Math.exp(1) Math.floor(1.9) 0.70711 2.7 183 Math.max(1, -2 ) Math.min(1, -2 ) Math.pow (-3 , 2) -2 Math.random() 0.170 68 Math.round(1.5) Làm tròn (e.g 1.5 rounds to 2) Math.sin(Math.PI/4)... : var d = new Date(2010,2,1); Ngôn ng - JavaScript Math Ví d Math.abs (-2 .3) Math.acos(Math.SQRT1_2) Math.ceil(1.1) Giá tr tra l i rounded to digits 2.3 0. 785 40 rad = 45° Miêu t Math.cos(Math.PI/4)... singleNameClass.golobalVariable = 0.0F Ngôn ng - Event • Ví d : Khi click chu t trái, 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