Friday, September 14, 2018

Di chuyển Camera

Di chuyển Camera
Đã kiểm tra với phiên bản: 5
- -
Khó khăn: Người mới bắt đầu
Di chuyển máy ảnh tương đối so với trình phát.Máy ảnh không di chuyển và từ vị trí hiện tại của nó

00:04 - 00:06
không thể nhìn thấy rất nhiều.

00:06 - 00:09
Chúng ta cần buộc máy ảnh vào đối tượng game thủ.

00:09 - 00:12
Trước tiên, hãy đặt vị trí của máy ảnh.

00:12 - 00:15
Hãy nâng nó lên 10 chiếc và nghiêng nó

00:15 - 00:17
giảm khoảng 45 độ.

00:17 - 00:20
Tiếp theo, hãy làm cho máy ảnh trở thành một đứa trẻ của

00:20 - 00:22
đối tượng trò chơi của người chơi.

00:22 - 00:24
Đây là thiết lập điển hình của người thứ ba,

00:24 - 00:26
với máy ảnh như một đứa trẻ của người chơi.

00:26 - 00:28
Khi chúng ta di chuyển vị trí của người chơi

00:28 - 00:30
camera di chuyển với nó.

00:31 - 00:35
Khi người chơi quay máy ảnh cũng quay.

00:37 - 00:39
Hãy nhìn vào điều này từ một vị trí mà chúng tôi

00:39 - 00:42
có thể thấy cả người chơi và đối tượng trò chơi máy ảnh.

00:43 - 00:45
Di chuyển trình phát,

00:47 - 00:49
xoay người chơi,

00:49 - 00:51
camera con di chuyển với nó.

00:52 - 00:54
Bây giờ hãy thiết lập lại trình phát và thử nghiệm.

00:56 - 01:00
Chúng tôi nhập vào di chuyển, giữ mũi tên lên để di chuyển,

01:00 - 01:02
Whoa gì đang xảy ra ở đây?

01:02 - 01:06
Được rồi, cũng như máy ảnh là một đứa trẻ trong lĩnh vực của người chơi,

01:06 - 01:09
thậm chí nghĩ rằng máy ảnh không hề di chuyển

01:09 - 01:11
liên quan đến đối tượng trò chơi của người chơi,

01:11 - 01:14
đối tượng trò chơi người chơi đang quay cuồng như điên

01:14 - 01:16
do đó quan điểm của máy ảnh quay với nó.

01:16 - 01:18
Hãy thoát khỏi chế độ chơi.

01:19 - 01:21
Không giống như trò chơi người thứ ba bình thường

01:21 - 01:24
đối tượng trò chơi người chơi của chúng tôi đang xoay trên tất cả 3 trục

01:24 - 01:26
không chỉ 1.

01:26 - 01:28
Trong thiết lập người thứ ba điển hình

01:28 - 01:31
máy ảnh như một đứa trẻ của đối tượng trò chơi người chơi

01:31 - 01:33
sẽ luôn ở trong một vị trí tương đối

01:33 - 01:35
với cha mẹ ngay lập tức,

01:36 - 01:38
và vị trí này sẽ là của cha mẹ

01:38 - 01:42
vị trí trong trò chơi, sửa đổi hoặc bù đắp bằng

01:42 - 01:44
bất kỳ giá trị nào trong biến đổi của trẻ.

01:44 - 01:46
Chúng tôi không thể có máy ảnh như một đứa trẻ của

01:46 - 01:48
người chơi, vì vậy hãy tách nó ra.

01:50 - 01:52
Giá trị bù đắp của chúng tôi sẽ là sự khác biệt

01:52 - 01:54
giữa đối tượng trò chơi người chơi và máy ảnh.

01:55 - 01:57
Bây giờ chúng ta cần kết hợp máy ảnh với

01:57 - 02:00
đối tượng trò chơi người chơi, không phải là con

02:00 - 02:01
nhưng với một kịch bản.

02:02 - 02:06
Sử dụng nút Thêm thành phần chọn Tập lệnh mới.

02:07 - 02:09
Chúng tôi đang viết bằng C #

02:11 - 02:14
và đặt tên cho kịch bản là CameraController

02:14 - 02:16
và sau đó nhấp vào Tạo và Thêm

02:16 - 02:18
hoặc chỉ cần nhấn phím trả lại hoặc nhập

02:18 - 02:20
để xác nhận lựa chọn của chúng tôi.

02:20 - 02:23
Chúng ta nên lưu ý, cách tạo kịch bản này

02:23 - 02:25
sẽ tạo nội dung tập lệnh đó trên

02:25 - 02:28
cấp độ gốc hoặc cấp cao nhất của chế độ xem dự án của chúng tôi.

02:30 - 02:32
Tập tin CameraController trong thư mục Scripts

02:33 - 02:35
và mở nó để chỉnh sửa.

02:37 - 02:39
Chúng ta cần 2 biến ở đây.

02:40 - 02:43
Tham chiếu GameObject công khai cho người chơi

02:43 - 02:49
và một vector3 riêng để giữ giá trị offset của chúng ta.

02:49 - 02:51
Bù đắp là riêng tư vì chúng tôi có thể

02:51 - 02:53
đặt giá trị đó ở đây trong tập lệnh.

02:55 - 02:57
Đối với giá trị bù đắp của chúng tôi, chúng tôi sẽ lấy

02:57 - 03:00
vị trí biến đổi hiện tại.

03:00 - 03:04
và trừ vị trí biến đổi của người chơi

03:04 - 03:07
để tìm sự khác biệt giữa hai.

03:08 - 03:14
Vì vậy, trong đầu chúng tôi có thể thực hiện bù đắp bằng

03:14 - 03:19
chuyển đổi vị trí trừ vị trí biến đổi của người chơi.

03:20 - 03:23
Và sau đó mỗi khung hình chúng tôi đặt

03:23 - 03:27
chuyển vị trí sang vị trí biến đổi của trình phát của chúng tôi

03:27 - 03:29
cộng với bù đắp.

03:30 - 03:32
Điều này có nghĩa là khi chúng tôi di chuyển trình phát của mình

03:32 - 03:34
với các điều khiển trên bàn phím

03:34 - 03:38
mỗi khung hình trước khi hiển thị những gì máy ảnh có thể thấy

03:38 - 03:41
máy ảnh được chuyển đến vị trí mới

03:41 - 03:43
liên kết với đối tượng Trình phát.

03:43 - 03:45
Như thể nó là một đứa trẻ của đối tượng đó

03:45 - 03:47
nếu nó không lăn quanh bảng trò chơi.

03:49 - 03:52
Tuy nhiên, cập nhật không phải là nơi tốt nhất cho mã này.

03:53 - 03:56
Đúng là bản cập nhật chạy mỗi khung

03:56 - 03:58
và cập nhật từng khung hình chúng tôi có thể theo dõi

03:58 - 04:00
vị trí của đối tượng trò chơi của người chơi

04:00 - 04:02
và đặt vị trí của máy ảnh.

04:03 - 04:06
Tuy nhiên, để theo dõi máy ảnh, hoạt ảnh thủ tục,

04:06 - 04:09
và thu thập các trạng thái đã biết cuối cùng

04:09 - 04:11
tốt nhất là sử dụng LateUpdate.

04:12 - 04:15
LateUpdate chạy mọi khung hình, giống như cập nhật.

04:16 - 04:19
Nhưng nó được đảm bảo để chạy sau khi tất cả các mục

04:19 - 04:21
đã được xử lý trong bản cập nhật.

04:21 - 04:24
Vì vậy, khi chúng tôi đặt vị trí của máy ảnh

04:24 - 04:28
chúng tôi biết hoàn toàn rằng người chơi đã di chuyển cho khung đó.

04:30 - 04:32
Vì vậy, hãy kiểm tra điều này. Hãy lưu tập lệnh của chúng tôi

04:32 - 04:34
và trở về Unity.

04:35 - 04:37
Trước tiên, chúng ta cần tạo tham chiếu đến

04:37 - 04:39
đối tượng người chơi trò chơi bằng cách kéo trình phát

04:39 - 04:43
đối tượng trò chơi trong Trình phát của người chơi
trong thành phần bộ điều khiển của máy ảnh.

04:46 - 04:48
Nhập chế độ phát

04:50 - 04:52
và bây giờ chúng ta có được hành vi mà chúng ta muốn.

04:54 - 04:56
Máy ảnh theo sau quả bóng lăn

04:56 - 04:58
mà không quay

05:01 - 05:04
ngay cả khi bóng đi qua mép.

05:05 - 05:07
Trong bài tập tiếp theo, chúng tôi sẽ thiết lập cơ bản

05:07 - 05:09
khu vực chơi và tạo và đặt

05:09 - 05:11
đối tượng đón đặc biệt.

CameraController

Expand view
Copy code
using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour {

public GameObject player;

private Vector3 offset;

void Start ()
{
offset = transform.position - player.transform.position;
}

void LateUpdate ()
{
transform.position = player.transform.position + offset;
}
}

No comments:

Post a Comment