logo
Khóa học lập trình game server - smartfox - game đa người chơi Học lập trinh game online 3dvietpro Sửa chữa và thiết kế website .net
Welcome Guest! To enable all features please Đăng nhập or Đăng ký.

Thông báo

Icon
Error

Tùy chọn
Xem
Xem bài viết cuối Go to first unread
admin  
#1 Đã gửi : 03/12/2014 lúc 11:16:41(UTC)
admin

Danh hiệu: Administration

Nhóm:
Gia nhập: 19-08-2014(UTC)
Bài viết: 145

Được cảm ơn: 7 lần trong 6 bài viết
Chương trình làm ô tô 3D chuyển động được ứng dụng nhiều trong các game đua xe 3D, ngoài ra làm chuyển động ô tô 3d trên địa hình được ứng dụng vào trong lĩnh vực mô phỏng như các bài tập lái xe, kiểm tra các thiết bị của động cơ. Trong phần này nhóm 3DVietpro trình bày với các bạn các bước tạo một ô tô 3D chuyển động.

Bước 1: Các bạn vào phần Asset của unity tìm kiếm từ khóa sau “Toturial car” và download về máy của mình và chạy chương trình:


UserPostedImage


Hình 4.1.1. Giao diện chương trình đua xe ô tô được import từ Asset Unity

Bước 2: Các bạn tách mô hình Oto trong hình 4.1 ra một project riêng, để thực hiện tách các bạn lưu ý vấn đề sau:
- Vào thư mục gốc của project tìm đến \Assets\Models\Car
- Xuất hiện file “Materials” và “catamount.fbx”, các bạn thực hiện kéo vào cửa sổ Project của project mới tạo. Trong đó “Materials” là map của ô tô, còn fbx là mô hình 3D của ô tô.
Bước 3: Khi thực hiện kéo ô tô hiển thị không có màu sắc, các bạn click vào các phần của Oto sẽ hiện hình như dưới:



UserPostedImage

Hình 4.1.2. Thành phần của ô tô được gắn map

Nếu phần “Material” trong hình trên không có, thì các bạn tìm trong thư mục Materials vừa Import để phù hợp.



UserPostedImage

Hình 4.1.3. Lựa chọn bánh xe phía trước bên tay trái

UserPostedImage

Hình 4.1.4. Tách bánh xe

Bước 4: Click đúp vào bánh xe, sau đó vào Game Object chọn Create Empty, khi chọn xong bạn sẽ thấy xuất hiện một điểm nằm ở trung tâm bánh xe và đó chính là điểm Game Object vừa rồi bạn tạo.

Bước 5: Đặt tên cho đối tượng Game Object trong Bước 4 , như hình 4.1.3. Chúng ta đặt là WheelFL_col

Bước 6: Click vào “WheelFL_col” trong phần Inspector chọn Add Component tìm đến Wheel Collider, khi bạn lựa chọn sẽ hiển thị như sau:


UserPostedImage

Hình 4.1.6. Wheel Collider được lựa chọn


UserPostedImage

Hình 4.1.7. Hình sau khi được lựa chọn xong, vạch màu xanh chính là Wheel Collider

Bước 7: Bạn thực hiện tương tự như các bước 4,5,6 với các bánh xe còn lại

Bước 8: Viết lênh cho bánh xe chuyển động bằng cách tạo ra một file C#, sau đó bạn kéo vào chiếc xe.

- Chúng ta khai báo dòng lệnh sau là Public

// Biến để thực hiện làm chuyển động bánh xe
public Transform WheelFL;
public Transform WheelFR;
public Transform WheelRL;
public Transform WheelRR;

//Biến để thực hiện làm chuyển động Collider
public WheelCollider WheelFL_col;
public WheelCollider WheelFR_col;
public WheelCollider WheelRL_col;
public WheelCollider WheelRR_col;

- Khai báo tốc độ và góc quay bánh trước của xe

public float speed =40f;
public float angle=60f;

- Để thực hiện làm chuyển động, như thực tế đã cho thấy là chúng ta phải dùng lực đẩy 2 bánh sau đi và bánh trước chỉ có nhiệm vụ quay góc làm bánh lái cho xe chạy theo các hướng được điều khiển. Các bạn viết hàm sau trong Update:

WheelRL_col.motorTorque = speed * Input.GetAxis("Vertical");
WheelRR_col.motorTorque = speed * Input.GetAxis("Vertical");

//WheelFL_col.motorTorque = speed * Input.GetAxis("Vertical");
//WheelFR_col.motorTorque = speed * Input.GetAxis("Vertical");

- Tạo góc quay cho bánh trước

WheelFL_col.steerAngle = angle * Input.GetAxis ("Horizontal");
WheelFR_col.steerAngle = angle * Input.GetAxis ("Horizontal");

- Trong Update các bạn viết thêm hàm sau để quay bánh xe:

WheelRL.Rotate (speed*Input.GetAxis("Vertical"),0,0);
WheelRR.Rotate (speed* Input.GetAxis("Vertical"),0,0);
WheelFL.Rotate (speed*Input.GetAxis("Vertical"),0,0);
WheelFR.Rotate (speed * Input.GetAxis ("Vertical"), 0, 0);

Và để chính xác với tốc độ quay chúng ta có thể thay biến speed bằng dòng lệnh sau:

“WheelFL_col.rpm/60*360”

- Để bánh trước có thể làm bánh lái chúng ta dùng dòng lệnh sau:

WheelFL.localEulerAngles = new Vector3(WheelFL.localEulerAngles.x,
angle * Input.GetAxis("Horizontal"), WheelFL.localEulerAngles.z);

WheelFR.localEulerAngles = new Vector3(WheelFL.localEulerAngles.x,
angle * Input.GetAxis("Horizontal"), WheelFL.localEulerAngles.z);

Thế là chúng ta đã viết lệnh chuyển động cho bánh xe, bây giờ các bạn chỉ cần gán các đối tượng Public cho các biến được khai báo và chạy chương trình:


UserPostedImage

Hình 4.1.8. Kéo các đối tượng vào các biến của xe 3D


UserPostedImage

Bước 9: Kết quả chạy

Như vậy trong phần này nhóm 3dvietpro đã hướng dẫn các bạn làm xe chuyển động bằng cách sử dụng Wheel Collider. Các bạn lưu ý một số thuộc tính sau của Wheel Collider:
1. motorTorque : Tạo động lực cho bánh xe
2. steerAngle : Tạo góc cho bánh

Để lấy vận tốc của xe các bạn thực hiện lệnh sau:

“rigidbody.velocity.magnitude * 3.6f”

Vận tốc * thời gian (3.6f) = Số km/h

Sửa bởi người viết 14/05/2015 lúc 12:16:15(UTC)  | Lý do: Chưa rõ

Bạn bình luận ngay tại đây
lamquan679  
#2 Đã gửi : 21/08/2015 lúc 04:09:06(UTC)
lamquan679

Danh hiệu: Newbie

Nhóm: Registered
Gia nhập: 19-07-2015(UTC)
Bài viết: 9
Viet Nam
Đến từ: việt nam

Admin giải thích em với. E cũng làm như admin. Nhưng có 1 điều là kết quả không như ý muốn. Không hiểu sao 2 bánh trước xe chuyển động rất buồn cười. Em quan sát kĩ và đã kiểm tra, 2 bánh sau chuyển động góc quay quanh trục X cứ đến 90 độ hoặc 270 độ là bị giật lùi. Nghĩa là xe đang tiến thì quay đến 90 hoặc 270 thì quay giật lùi mặc dù xe đang tiến. Và khi chuyển động chậm thì bánh xe không quay mà đứng yên chỉ có 2 bánh sau là quay tốt theo đúng thực tứ. Em đã kiểm tra : Nguyên nhân là ở câu lệnh gắn cho bánh xe làm bánh hướng :
WheelFL.localEulerAngles = new Vector3 (WheelFL.localEulerAngles.x,angle*Input.GetAxis ("Horizontal"), WheelFL.localEulerAngles.z);

WheelFR.localEulerAngles = new Vector3 (WheelFR.localEulerAngles.x,angle*Input.GetAxis ("Horizontal"), WheelFR.localEulerAngles.z);

Khi bỏ 2 lệnh này đi thì bánh xe quay tiến lùi rất ngon nhưng lại không quay khi bẻ lái.
Mà không thể bỏ 2 lệnh này được vì nó giúp quay bánh xe nhưng khi đó chuyển động quay của bánh xe lại không được như ý muốn mà bị như hiện tượng trên.
Mong admin giải thích dùm
admin  
#3 Đã gửi : 24/02/2016 lúc 10:08:12(UTC)
admin

Danh hiệu: Administration

Nhóm:
Gia nhập: 19-08-2014(UTC)
Bài viết: 145

Được cảm ơn: 7 lần trong 6 bài viết
Bạn dùng lệnh sau để xoay bánh trước

WheelFL.localEulerAngles = new Vector3(WheelFL.localEulerAngles.x, WheelFL_col.steerAngle - WheelFL.localEulerAngles.z, WheelFL.localEulerAngles.z);

WheelFR.localEulerAngles = new Vector3(WheelFR.localEulerAngles.x, WheelFR_col.steerAngle - WheelFR.localEulerAngles.z, WheelFR.localEulerAngles.z);
Bạn bình luận ngay tại đây
Tbs12801  
#4 Đã gửi : 03/05/2016 lúc 09:35:14(UTC)
Tbs12801

Danh hiệu: Member

Nhóm: Registered
Gia nhập: 02-05-2016(UTC)
Bài viết: 11

Chào mọi người mình muốn xin làm quen mình tên là Linh mình ở hải phòng
Ai đang xem chủ đề này?
Guest
Di chuyển  
Bạn không thể tạo chủ đề mới trong diễn đàn này.
Bạn không thể trả lời chủ đề trong diễn đàn này.
Bạn không thể xóa bài của bạn trong diễn đàn này.
Bạn không thể sửa bài của bạn trong diễn đàn này.
Bạn không thể tạo bình chọn trong diễn đàn này.
Bạn không thể bỏ phiếu bình chọn trong diễn đàn này.

Powered by YAF 2.1.0 | YAF © 2003-2024, Yet Another Forum.NET
Thời gian xử lý trang này hết 0.193 giây.