C++ – Jake Tee https://jakesto.com Game Dev Blog Sat, 05 Nov 2022 13:43:06 +0000 en-US hourly 1 https://wordpress.org/?v=6.8.1 https://jakesto.com/wp-content/uploads/2022/07/cropped-pngwing.com_-32x32.png C++ – Jake Tee https://jakesto.com 32 32 194548219 Cơ bản networking https://jakesto.com/co-ban-networking-phan-1/?utm_source=rss&utm_medium=rss&utm_campaign=co-ban-networking-phan-1 Sun, 30 Oct 2022 12:59:55 +0000 https://jakesto.com/?p=968 Phần 1

Trong phần này mình sẽ đi qua 2 khái niệm cơ bản đó là mô hình mạngquyền mạng.

Để tóm gọn, thì mô hình mạng phổ biến đó là Client-Server, với Server sẽ là trung tâm chính quản lí và lưu trữ dữ liệu gốc, sau đó gửi thông tin tới các người dùng. Mọi hoạt động thay đổi các giá trị online đều phải được thông qua bởi Server.

Với role, thì các Actor trong thế giới, luôn có 2 role đó là Local RoleRemote Role. Trong đó, từ phía các Actor, Remote Role sẽ luôn là Role_Authority bởi các Actor có trạng thái online luôn được sở hữu bởi Server. Trong khi Local Role sẽ phụ thuộc vào đối tượng.

Nếu Actor được điều khiển bởi chính người chơi, Local Role sẽ là Role_AutonomousProxy, và với các đối tượng khác sẽ là Role_SimulatedProxy.

Phần 2

Trong phần 2, mình đi qua khái niệm của Remote Procedural Call. Bao gồm các loại:

  • Server Execute: rpc gọi từ dưới client lên server để yêu cầu thực thi một sự kiện hay hành động
  • Client Execute: rpc gọi từ server về phía đối tượng client cụ thể để thực thi một sự kiện hay hành động
  • NetMulticast: rpc gọi từ server tới tất cả đối tượng client trong vùng không gian cho phép để thực thi một sự kiện hay hành động

Phần 3

Trong phần cuối, mình đi qua:

  • OnRep: thuộc tính bắt buộc các sự kiện đi kèm của một giá trị khi có thay đổi.
  • So sánh OnRep và Multicast: OnRep sẽ luôn được gọi khi client trong vùng không gian hỗ trợ hoặc khi vừa có kết nối tới Server. Multicast chỉ gọi một lần tại thời điểm cụ thể và sẽ bị quên đi.
  • Reliable và Unreliable: Reliable là thuộc tính của RPC cho phép Engine ưu tiên để gửi đi, và Unreliable là ngược lại.
]]>
968
101 Tips – Thay đổi biến trong sequencer https://jakesto.com/101-tips-thay-doi-bien-trong-sequencer/?utm_source=rss&utm_medium=rss&utm_campaign=101-tips-thay-doi-bien-trong-sequencer Tue, 15 Jun 2021 17:19:14 +0000 https://jakesto.com/?p=788 Chúng ta có một actor, với một biến là số tiền (Money) trong tài khoản (dạng integer) như sau

và được set Instance Editable để có thể sửa đổi giá trị trên các instance đã được đặt trong world.

Giả sử ta muốn rằng, trong Sequencer, ta muốn thay đổi giá trị đó theo các khung thời gian cụ thể. Thông thường cách nhanh nhất đó là ta tìm kiếm các kí hiệu + để thêm key vào sequencer:

Tuy nhiên, trong trường hợp của Money, ta không thể thay đổi được.

Cách để có thể làm xuất hiện dấu + đó là:

Blueprints

Tạo một hàm với tên theo cú pháp “Set” + tên của biến, trong trường hợp này là SetMoney, nhận đầu vào như trên

Như vậy ta đã có thể thêm key vào Sequencer được rồi

C++

Với C++, trong thông số trong UPROPERTY, ta chỉ cần thêm tham biến Interp

UPROPERTY(EditAnywhere, BlueprintReadWrite, Interp)
int32 Money

Như vậy đã xong!

]]>
788
Blueprints hay C++ https://jakesto.com/blueprints-hay-c/?utm_source=rss&utm_medium=rss&utm_campaign=blueprints-hay-c Sun, 02 May 2021 13:36:40 +0000 https://jakesto.com/?p=784
Nguồn : http://awforsythe.com/

Gần đây mình có tìm được một bài phân tích rất chi tiết về vấn đề này, mọi người có thể tham khảo qua để có thể quyết định được cho dự án của mình 😀
Một fact nho nhỏ đó là tựa game Valorant cũng dùng blueprint rất nhiều nhá, không phải hoàn toàn là c++ đâu.

Link bài viết

Ngoài ra cũng có video của tác giả để cho anh em nào lười coi :))

Nếu anh em có nhu cầu dịch sang tiếng việt vì không đọc được thì để lại comment để mình biết :p

]]>
784
Di chuyển half-life trong Unreal Engine : Project Borealis https://jakesto.com/di-chuyen-half-life-trong-unreal-engine-project-borealis/?utm_source=rss&utm_medium=rss&utm_campaign=di-chuyen-half-life-trong-unreal-engine-project-borealis Sat, 20 Feb 2021 12:45:15 +0000 https://jakesto.com/?p=777 Share cho mọi người một blog khá là thú vị về việc port cách di chuyển của half-life sang Unreal. Nếu anh em nào đã từng chơi half-life hay csgo chắc cũng sẽ từng thử nhảy bunny hop để tăng tốc nhanh hơn.

Source : projectborealis.com/

Tác giả đã rất tốt khi share lại source code cho mọi người cũng nghịch 😀

Link github ở đây : https://github.com/ProjectBorealis/PBCharacterMovement

Anh em có thể tham khảo qua blog của tác giả
https://projectborealis.com/movement.html

Source : projectborealis.com/
Source : projectborealis.com/
]]>
777
Dùng trình duyệt ảo và mở web trong Unreal Engine https://jakesto.com/dung-trinh-duyet-ao-hay-mo-web-trong-unreal-engine/?utm_source=rss&utm_medium=rss&utm_campaign=dung-trinh-duyet-ao-hay-mo-web-trong-unreal-engine Wed, 08 Jul 2020 08:30:47 +0000 https://jakesto.com/?p=641 Trong bài viết này mình sẽ hướng dẫn các bạn tạo một trình duyệt ảo (bằng UMG) hoặc mở một website với trình duyệt mặc định của PC.

Cài đặt plugin Web Browser

Unreal Engine đã cung cấp cho người dụng một tiện ích (plugin) tên là Web Browser. Các bạn chỉ cần vào mục thiết lập, bật tiện ích lên và khởi động lại editor

Ảnh 1. Bật tiện ích Web Browser.

Mở một trang web bằng trình duyệt mặc định máy tính

Để mở môt trang web bằng trình duyệt mặc định của máy tính, với Blueprint, các bạn chỉ cần gọi hàm LaunchURL:

Ảnh 2. Mở một đường dẫn bằng Launch URL

Với C++, các bạn có thể gọi cú pháp như sau:

FPlatformProcess::LaunchURL(TEXT("https://jakesto.com"), NULL, NULL);

Tạo một trình duyệt ảo với UMG

Các bạn cũng có thể tạo cho mình một trình duyệt ảo bằng cách tận dụng UMG để thiết kế và hiển thị.

Trước tiên, ta hãy tạo một UMG và đặt tên là WBP_WebBrowser.

Mở WBP_WebBrowser lên, ở tab Palette, hãy kiếm component tên là Web Browser và thả vào giữa Canvas Panel. Nhớ chỉnh vị trí, kích thước và anchor theo ý của bạn.

Ảnh 3. Tùy chỉnh thông số thiết kế của trình duyệt ảo

Ở mục Initial URL, các bạn có thể điền một địa chỉ mặc định vào.

Để truyền địa chỉ web cần mở và thực hiện mở web trên trình duyệt ảo, các bạn chỉ cần gọi hàm LoadURL từ WebBrowser

Ảnh 4. Hàm mở một dường dẫn với địa chỉ là biến truyền vào

Như vậy là chúng ta đã xong trình duyệt ảo cơ bản.

Ngoài ra các bạn cũng có thể tạo một thanh địa chỉ giống ở trình duyệt ngoài, sau đó có thể vừa cho người dùng nhập địa chỉ, vừa hiển thị địa chỉ đầy đủ của web:

Ảnh 5. Thiết lập thanh địa chỉ cho trình duyệt ảo

Ở ảnh trên, mình tạo một VerticalBox để giữ thanh trình duyệt và trình duyệt. Sau đó, tạo 2 event tương ứng từ WebBrowser và EditableTB:

Ảnh 6. Xử lí input của thanh trình duyệt và hiển thị địa chỉ
  • On Url Changed (của WebBrowser): sự kiện này sẽ được gọi khi địa chỉ web đã trả về url đầy đủ.
  • On Text Commited (của EditableTB): sự kiện này sẽ được gọi khi người dùng thực hiện các thao tác commit (thông thường là ấn enter).

Kết quả cuối cùng ta được như sau 😀

]]>
641