‫Vì vậy, nếu tôi đến gần tòa tháp của chúng tôi, tôi có thể thấy rằng họ đang vẽ các quả cầu gỡ lỗi, chứng tỏ rằng
‫họ đang gọi chức năng cứu hỏa và họ đang làm như vậy cứ sau 2 giây.
‫Bây giờ, thêm vào đó, họ chỉ gọi chức năng này.
‫Nếu tôi đang ở trong tầm bắn, nếu tôi quay lại đây, bạn sẽ nhận thấy rằng họ không vẽ các quả cầu gỡ lỗi.
‫Vì vậy, điều này cũng liên quan đến việc kiểm tra khoảng cách.
‫Và ngay sau khi tôi đủ gần, thì, họ sẽ bắt đầu vẽ những quả cầu gỡ lỗi đó.
‫Xin chào và chào mừng trở lại.
‫Bây giờ chúng tôi đã tạo một chức năng chữa cháy và chúng tôi đang sử dụng nó trong lớp xe tăng vì chúng tôi đã
‫ràng buộc nó với ánh xạ hành động cứu hỏa.
‫Nhưng chúng tôi cũng muốn sử dụng lại điều này với lớp tháp.
‫Bây giờ, thay vì sử dụng đầu vào của người dùng cho lớp tháp, chúng tôi sẽ sử dụng bộ định thời.
‫Chúng tôi sẽ tạo bộ hẹn giờ cho lớp tháp để bộ hẹn giờ có thể gọi chức năng cứu hỏa.
‫Thường xuyên, chúng tôi sẽ đặt một số giây cụ thể giữa các lần gọi hàm fire.
‫Vì vậy, vì chúng ta muốn hàm lửa được gọi thường xuyên trên lớp tháp, nên bây giờ chúng ta cần nói về
‫bộ hẹn giờ.
‫Unreal Engine có khả năng thiết lập bộ hẹn giờ bằng cách sử dụng một lớp có tên là F Timer Manager.
‫Tồn tại một trình quản lý hẹn giờ thế giới quản lý bộ hẹn giờ trên thế giới.
‫Giờ đây, trình quản lý bộ hẹn giờ trên thế giới này có một chức năng được gọi là Bộ hẹn giờ và bộ hẹn giờ lấy một số đầu vào chẳng
‫hạn như tay cầm bộ hẹn giờ.
‫Đây là một xử lý cho một bộ hẹn giờ cụ thể do trình quản lý bộ hẹn giờ quản lý.
‫Điều này cho phép người quản lý có nhiều bộ hẹn giờ và chúng tôi có thể truy cập thông tin bộ hẹn giờ cho từng bộ hẹn giờ bằng cách sử
‫dụng tay cầm bộ hẹn giờ làm một loại tên hoặc ID cho bộ hẹn giờ đó.
‫Đây là một đối tượng của tay cầm hẹn giờ loại F.
‫Vì vậy, chúng tôi tạo một tay cầm hẹn giờ và chuyển nó vào chức năng hẹn giờ đã đặt.
‫Bây giờ đặt hẹn giờ cũng yêu cầu các đầu vào khác như tỷ lệ hoặc lượng thời gian mà chúng ta nên đợi trước
‫khi thực sự làm điều gì đó.
‫Bây giờ đó là một cái gì đó sẽ có trong hàm gọi lại của chúng tôi.
‫Chúng tôi tạo một hàm và chúng tôi liên kết hàm này với bộ đếm thời gian để ngay sau khi đủ thời gian trôi qua, cụ thể
‫là tốc độ bộ đếm thời gian, thì hàm gọi lại của chúng tôi có thể được gọi.
‫Vì vậy, chúng tôi thấy rằng chúng tôi cần một vài thứ cho bộ đếm thời gian của mình và chúng tôi sẽ đặt những thứ này vào
‫lớp tháp.
‫Vì vậy, chúng ta hãy đi vào Tháp H và ở đây trong tệp Tháp H, chúng ta sẽ thêm một số biến riêng.
‫Vì vậy, ngay trong tầm bắn, chúng ta sẽ cần tay cầm hẹn giờ của mình.
‫Vì vậy, đây là tay cầm hẹn giờ F và chúng ta có thể gọi đơn giản là tay cầm hẹn giờ tốc độ cháy.
‫Và chúng tôi cũng cần một tốc độ bắn sẽ trở thành một chiếc phao.
‫Chúng ta sẽ gọi đây là tốc độ bắn và chúng ta có thể khởi tạo nó thành hai điểm F.
‫Vì vậy, theo cách đó, chúng ta sẽ phải đợi hai giây trước khi hàm gọi lại của chúng ta thực sự được gọi.
‫Và nói về các hàm gọi lại, chúng ta thực sự cần một hàm.
‫Vì vậy, chúng ta sẽ tạo một hàm void và chúng ta có thể gọi đây là điều kiện kiểm tra cháy.
‫Vì vậy, chúng tôi có một tay cầm bộ đếm thời gian và ngay sau khi chúng tôi đặt bộ đếm thời gian và nó bắt đầu chạy, thì chúng
‫tôi có 2 giây để chờ trước khi bộ hẹn giờ thực sự dẫn đến chức năng của chúng tôi được gọi.
‫Và tôi gọi đây là kiểm tra điều kiện cháy vì chúng tôi có thể kiểm tra xem tháp của chúng tôi có thể gọi chức năng cứu
‫hỏa hay không để chúng tôi có thể đặt một số điều kiện mà chúng tôi có thể kiểm tra để đảm bảo rằng ngọn lửa sẽ
‫được gọi.
‫Bây giờ chúng ta đã khai báo hàm điều kiện cháy.
‫Chúng ta cần xác định nó để có thể đi vào CPP tháp và xác định chức năng ở đây.
‫Tôi sẽ đặt nó khi bắt đầu chơi, vì vậy tôi sẽ cung cấp cho nó một phần thân hàm và tên lớp tháp
‫ngay trước tên hàm.
‫Vì vậy, bây giờ chúng ta có một hàm, nhưng chúng ta thực sự cần đặt bộ đếm thời gian để thời gian đó sẽ bắt đầu
‫chạy và hàm sẽ được gọi vào cuối thời gian đó.
‫Và chúng tôi có thể đặt bộ đếm thời gian ở đây và bắt đầu chơi để nó bắt đầu chạy từ đầu trò chơi.
‫Vì vậy, chúng tôi đã đề cập đến trình quản lý bộ hẹn giờ thế giới và chúng tôi có thể truy cập nó bằng một chức năng được gọi là Get
‫World Timer Manager.
‫Bây giờ, hãy tải Trình quản lý bộ hẹn giờ thế giới, trả về một đối tượng trình quản lý bộ hẹn giờ F.
‫Và vì chúng tôi đang sử dụng loại đó, chúng tôi sẽ cần bao gồm tệp tiêu đề cho trình quản lý bộ đếm thời gian F.
‫Vì vậy, đây là bao gồm nó chỉ đơn giản là trình quản lý hẹn giờ h.
‫Và chúng ta cũng có thể thấy một số hàm thuộc lớp này.
‫Vì vậy, hãy cuộn qua các chức năng này nếu bạn quan tâm đến tất cả các chức năng khác nhau của trình quản lý
‫hẹn giờ F.
‫Vì vậy, chúng tôi có thể bao gồm tệp tiêu đề này ở trên đỉnh tháp, ngay dưới tệp tiêu đề khác.
‫Vì vậy, bây giờ chúng tôi đã bao gồm tệp tiêu đề đó, bây giờ chúng tôi có quyền truy cập vào trình quản lý bộ hẹn giờ thế
‫giới và chức năng mà chúng tôi quan tâm được gọi là bộ hẹn giờ.
‫Bây giờ nhận trình quản lý bộ đếm thời gian thế giới chỉ cần trả về một trình quản lý bộ hẹn giờ F, nó không trả về một con trỏ.
‫Vì vậy, chúng tôi sẽ sử dụng dấu chấm thay vì.
‫Mũi tên và chúng ta sẽ gọi đặt hẹn giờ.
‫Bây giờ bộ hẹn giờ có một số phiên bản hoặc quá tải chức năng.
‫Now vs code có cửa sổ bật lên này cho phép chúng tôi xem qua từng quá tải và xem các phiên bản khác nhau
‫của chức năng này.
‫Và phiên bản mà tôi quan tâm đầu tiên có tay cầm hẹn giờ F và chúng tôi sẽ sử dụng tay cầm hẹn giờ
‫tốc độ bắn, cái mà chúng tôi đã khai báo trong Tháp H.
‫Bây giờ, tham số tiếp theo cho quá tải hàm cụ thể của chúng ta sẽ là lớp người dùng, giống như trong trục
‫liên kết và hành động liên kết.
‫Đây là lớp mà chúng tôi đang làm việc trong đó chúng tôi đang ràng buộc chức năng cho nó sẽ là cái này.
‫Bây giờ, tiếp theo sẽ là hàm gọi lại, đây sẽ là điều kiện cháy kiểm tra tháp A của chúng ta, đó là
‫hàm mà chúng ta vừa tạo.
‫Bây giờ chúng ta cần địa chỉ của toán tử vì bộ hẹn giờ lấy địa chỉ của hàm.
‫Bây giờ, tham số tiếp theo là một float cho tỷ lệ, đây sẽ là khoảng thời gian sẽ trôi qua trước khi lệnh gọi
‫lại của chúng ta được gọi.
‫Đó sẽ là tốc độ bắn của chúng tôi.
‫Và tham số cuối cùng là boolean sẽ chỉ định xem bộ đếm thời gian này có lặp lại hay không.
‫Bây giờ tôi muốn chức năng gọi lại của chúng tôi được gọi cứ sau 2 giây, vì vậy tôi muốn bộ đếm thời gian này lặp lại.
‫Vì vậy, tôi sẽ nói sự thật.
‫Nếu chúng ta vượt qua sai thì 2 giây sẽ trôi qua.
‫Hàm của chúng ta sẽ được gọi và đó sẽ là nó.
‫Nhưng vì chúng ta đặt nó thành vòng lặp, hàm của chúng ta sẽ được gọi sau 2 giây, sau đó bộ đếm thời gian
‫sẽ khởi động lại và sau đó hai giây nữa hàm sẽ được gọi lại và nó sẽ tiếp tục lặp cho
‫đến khi trò chơi kết thúc.
‫Vì vậy, bây giờ chúng ta có một hàm liên kết với bộ đếm thời gian của chúng ta và nó được thiết lập để được gọi sau mỗi 2 giây.
‫Vì vậy, chúng tôi đã liên kết một chức năng với bộ đếm thời gian của mình và nó sẽ được gọi sau mỗi 2 giây.
‫Nhưng chúng tôi muốn một số loại bằng chứng hoặc xác nhận rằng chức năng này thực sự đang được gọi.
‫Vì vậy, đối với thử thách của bạn trong lớp tháp, hãy đi vào chức năng gọi lại mới của chúng tôi, kiểm tra tình trạng cháy.
‫Đảm bảo xe tăng trong phạm vi lửa.
‫Bạn sẽ kiểm tra khoảng cách từ tháp đến bể.
‫Và chúng tôi biết cách làm điều này vì chúng tôi đã thực hiện điều này trong chức năng đánh dấu.
‫Vì vậy, bạn có thể cần phải xem chức năng đánh dấu và xem cách này được thực hiện như thế nào để tự nhắc
‫nhở bản thân, bây giờ hãy kiểm tra khoảng cách đó, đảm bảo rằng chúng ta đang ở trong phạm vi cháy và sau đó, hãy gọi hàm
‫cứu hỏa, tạm dừng video và thực hiện cái này bây giờ.
‫Được chứ.
‫Vì vậy, tôi đã trở lại Tower CP và tôi sẽ chỉ cuộn lên chức năng đánh dấu để tự nhắc nhở bản thân làm thế nào tôi đã đạt được
‫khoảng cách này và kiểm tra xem nó có nằm trong phạm vi lửa hay không.
‫Bây giờ chúng tôi chỉ cần sử dụng lại mã này ở đây và kiểm tra tình trạng cháy.
‫Hiện tại, việc sử dụng lại mã không hiệu quả lắm, vì vậy chúng tôi có thể nghĩ đến việc cấu trúc lại mã này, nhưng trước tiên hãy đảm bảo rằng chúng
‫tôi đã làm việc này để trước tiên chúng tôi có thể kiểm tra con trỏ xe tăng của mình để đảm bảo nó hợp lệ.
‫Vì vậy, tôi sẽ làm điều đó ở đây và kiểm tra tình trạng cháy.
‫Tôi sẽ nói nếu xe tăng và nếu xe tăng là hợp lệ, điều tiếp theo chúng ta có thể làm
‫là lấy khoảng cách đó, giá trị này ở đây được tính bằng hàm f vector dist.
‫Vì vậy, tôi sẽ lấy nó và đặt nó xuống đây để kiểm tra tình trạng cháy.
‫Bây giờ, điều tiếp theo chúng ta làm là kiểm tra xem liệu khoảng cách có nhỏ hơn hoặc bằng tầm bắn hay không.
‫Vì vậy, đó là những gì chúng tôi sẽ làm ở đây.
‫Chúng ta sẽ nói nếu khoảng cách nhỏ hơn hoặc bằng phạm vi cháy và nếu đúng như vậy, thì chúng ta có thể chỉ
‫cần gọi hàm chữa cháy.
‫Vì vậy, chúng ta sẽ gọi lửa, và nó đơn giản như vậy.
‫Vì vậy, chúng ta hãy tiếp tục và biên dịch cái này và chúng ta quay lại trình chỉnh sửa và tôi sẽ chơi trò chơi và
‫vào tầm bắn.
‫Và tôi có thể thấy rằng các tháp của chúng tôi đang vẽ các quả cầu gỡ lỗi ở đầu nòng súng để chúng
‫tôi có thể thấy rằng chức năng cứu hỏa đó đang được gọi và nó hoạt động theo cùng một cách đối với tháp cũng như đối với xe tăng.
‫Vì vậy, điều này là tuyệt vời.
‫Điều này đang chứng minh cho chúng tôi thấy rằng bộ đếm thời gian của chúng tôi đang chạy và chức năng gọi lại của chúng tôi đang được gọi sau mỗi 2 giây.
‫Được rồi, vì vậy chúng tôi đã có chức năng cứu hỏa này được gọi cứ sau 2 giây hiện đang được kiểm tra, tình trạng cháy.
‫Chúng tôi có chức năng này mà chúng tôi đang xem liệu chúng tôi có ở trong phạm vi hay không và chúng tôi đang làm điều tương tự ở
‫đây trong chức năng đánh dấu.
‫Vì vậy, đây là một cơ hội hoàn hảo để tái cấu trúc.
‫Chúng ta có thể tạo một số loại hàm sẽ trả về cho chúng ta một boolean nếu chúng ta ở trong phạm vi với xe tăng.
‫Vậy tại sao chúng ta không tiếp tục và nhanh chóng cấu trúc lại nó thành một hàm trả về tăng giá?
‫Vì vậy, ở đây trong Tháp H, chúng ta hãy tạo một hàm riêng.
‫Nó sẽ trả lại bool và chúng ta sẽ nói trong phạm vi lửa.
‫Bây giờ đây là một trò chơi đơn giản và tháp của chúng ta sẽ chỉ nằm trong phạm vi với xe tăng.
‫Vì vậy, điều này không có gì mơ hồ bởi vì không có gì khác mà tháp muốn kiểm tra xem nó có nằm
‫trong phạm vi bây giờ hay không, nếu đây là một trò chơi phức tạp hơn với những thứ khác mà tháp muốn kiểm tra khoảng
‫cách, thì chúng ta có thể Tên này hơi khác một chút, nhưng chúng ta chỉ có thể gọi nó một
‫cách đơn giản trong phạm vi lửa.
‫Và những gì tôi sẽ làm là thực hiện điều này ở đây trong Tower.
‫Vì vậy, hãy tiếp tục và tạo phần thân hàm.
‫Chúng tôi sẽ cần một tháp trước khi sửa tên hàm.
‫Và những gì chúng ta sẽ làm ở đây về cơ bản là kiểm tra khoảng cách tương tự.
‫Vì vậy, trước tiên chúng tôi sẽ kiểm tra để đảm bảo rằng bể chứa hợp lệ bằng kiểm tra nếu.
‫Bây giờ nếu đúng như vậy, thì chúng ta có thể có được khoảng cách này để có thể sao chép dòng này và chỉ cần tạo phao khoảng cách cục
‫bộ của chúng ta ngay tại đây và chỉ cần kiểm tra khoảng cách đó so với phạm vi cháy để chúng tôi có thể nói nếu
‫khoảng cách nhỏ hơn hoặc bằng phạm vi cháy, và nếu đúng như vậy, chúng ta có thể trả về true.
‫Hàm này có thể trả về giá trị true.
‫Và bây giờ chúng ta có một hàm mà chúng ta có thể gọi sẽ trả về true nếu chúng ta đang ở trong phạm vi.
‫Bây giờ, ngay sau khi chúng ta nhấn vào dòng trả về true ở đây trong câu lệnh if, thì hàm sẽ trả về.
‫Chúng tôi sẽ nhảy ra khỏi chức năng.
‫Vì vậy, bất cứ điều gì khác sau câu lệnh if này sẽ không chạy.
‫Vì vậy, những gì chúng ta có thể làm là vào cuối hàm in fire range, chúng ta có thể trả về false bởi vì nếu chúng ta
‫đạt đến giá trị trả về true, chúng tôi sẽ không bao giờ thực sự nhận được dòng return false ở đây.
‫Chúng tôi chỉ đơn giản là sẽ thoát khỏi chức năng sớm.
‫Nhưng nếu chúng ta không ở trong phạm vi, nếu việc kiểm tra khoảng cách này không thành công, thì chúng ta sẽ không bao giờ đạt được kết quả đúng.
‫Và chúng ta sẽ đến cuối hàm và trả về false.
‫Vì vậy, hàm này sẽ trả về true hoặc false dựa trên việc chúng ta có nằm trong phạm vi hay không và chúng ta có thể sử dụng
‫hàm này thay vì sử dụng mã lặp lại trong hai hàm của mình.
‫Vì vậy, trong tích tắc, chẳng hạn, chúng ta chỉ cần một lần kiểm tra để xem liệu chúng ta có trong tầm bắn hay không trước khi chúng ta xoay
‫tháp pháo.
‫Vì vậy, những gì chúng ta có thể làm là chúng ta có thể nói nếu trong phạm vi lửa và nếu điều này trả về sự thật, chúng ta đang ở trong phạm vi lửa nên chúng ta có
‫thể gọi là tháp pháo xoay.
‫Vì vậy, chúng tôi sẽ đặt điều đó ngay tại đó trong câu lệnh if.
‫Và bây giờ tất cả mã này là không cần thiết, vì vậy chúng tôi có thể xóa nó một cách đơn giản.
‫Và bây giờ nó trông gọn gàng hơn rất nhiều so với những gì chúng ta có trước đây.
‫Và sau đó chúng ta có thể xuống đây để kiểm tra tình trạng cháy và làm điều tương tự.
‫Thay vì tất cả những điều này, chúng tôi có thể chỉ cần kiểm tra xem có trong phạm vi lửa hay không.
‫Và nếu có, chúng ta có thể gọi lửa một cách đơn giản.
‫Vì vậy, bây giờ chúng tôi đã cấu trúc lại thành công tất cả mã đó thành một kiểm tra được thực hiện trong chức năng phạm vi lửa
‫của chúng tôi.
‫Vì vậy, hãy tiếp tục và biên dịch lại nó và chỉ chơi thử nó thật nhanh để đảm bảo rằng mọi thứ
‫hoạt động như mong đợi.
‫Vì vậy, chúng tôi sẽ tiếp tục và đánh trò chơi và vào tầm bắn.
‫Và tất nhiên, chúng tôi đang ở trong tầm bắn và nó hoạt động chính xác.
‫Vì vậy, tóm lại, chúng tôi đã tạo một bộ đếm thời gian và cứ sau 2 giây, chúng tôi sẽ gọi chức năng cứu hỏa trong
‫lớp tháp.
‫Bây giờ chúng tôi cũng đang kiểm tra xem liệu Xe tăng có nằm trong tầm bắn hay không.
‫Vì vậy, chúng tôi chỉ gọi chức năng cứu hỏa sau mỗi 2 giây nếu xe tăng nằm trong khoảng cách tầm bắn.
‫Và chúng tôi cũng thấy rằng chúng tôi đang sử dụng kiểm tra khoảng cách đó trong hai chức năng khác nhau.
‫Vì vậy, chúng tôi đã cấu trúc lại nó thành chức năng của riêng nó và chúng tôi chỉ đơn giản gọi đó là để kiểm tra xem chúng tôi có nằm trong phạm vi không.
‫Vì vậy, bây giờ chúng ta có một hàm lửa được gọi trên lớp tháp.
‫Điều tiếp theo cần làm là thực sự bắt đầu phóng đạn bằng chức năng bắn của chúng ta.
‫Vì vậy, chúng ta sẽ nói về điều đó trong video tiếp theo.
‫Tôi sẽ gặp bạn sớm.