Chuyển làn mượt mà
Bài học 2 trên 21 trong khóa học Trò chơi Unity: đường đua trên trời của Coddy.
Nhân vật chạy nhảy từ làn này sang làn khác chỉ trong một khung hình. Cách này hiệu quả, nhưng trông như dịch chuyển tức thời. Việc đổi làn nên mất một chút thời gian để mắt bạn theo kịp.
Mathf.MoveTowards(current, target, maxStep) di chuyển một số về phía mục tiêu tối đa maxStep, và không bao giờ vượt quá mục tiêu. Khi được gọi mỗi khung hình với bước di chuyển bằng tốc độ nhân với Time.deltaTime, hàm này di chuyển với tốc độ đó tính theo đơn vị mỗi giây, bất kể tốc độ khung hình:
float x = Mathf.MoveTowards(transform.position.x, targetX, laneSpeed * Time.deltaTime);Với laneSpeed bằng 16, việc đổi làn 2.5 đơn vị mất khoảng 0.16 giây: nhanh, nhưng bạn vẫn nhìn thấy chuyển động.
Thử thách
DễGiúp nhân vật đổi làn mượt mà thay vì nhảy tức thì.
- Thêm
public float laneSpeed = 16f;bên dướilaneWidth. - Thay
float x = targetX;bằng dòngMathf.MoveTowardsở trên.
Nhấn Chơi rồi đổi làn: nhân vật sẽ lướt ngang. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class Runner : MonoBehaviour
{
public float laneWidth = 2.5f;
public int lane;
private CharacterController controller;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) lane = Mathf.Max(-1, lane - 1);
if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) lane = Mathf.Min(1, lane + 1);
float targetX = lane * laneWidth;
float x = targetX;
Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
controller.Move(move);
}
}
Tất cả bài học trong Trò chơi Unity: đường đua trên trời
Tự luyện tập: Playground Unity