khác

Di chuyển Camera

Spread the love

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;
}
}

About the author

admin

Leave a Comment