Làm thế nào để tôi làm cho nhân vật của tôi trượt xuống sườn dốc cao?


9

Tôi hiện đang làm việc về chuyển động của nhân vật trong Unity3D . Tôi quản lý để làm cho anh ta di chuyển tương đối đến con trỏ chuột. Tôi đặt giới hạn độ dốc là 45 °, không cho phép nhân vật đi lên núi với độ cao hơn. Nhưng anh vẫn có thể nhảy chúng lên.

Làm thế nào để tôi có thể khiến anh ta trượt xuống lần nữa khi anh ta nhảy ở những nơi có độ dốc quá cao?

Cảm ơn trước.

chỉnh sửa: Đoạn mã của phong trào cơ bản của tôi. sử dụng UnityEngine; sử dụng System.Collections;

public class BasicMovement : MonoBehaviour {
    private float speed;
    private float jumpSpeed;
    private float gravity;
    private float slopeLimit;
    private Vector3 moveDirection = Vector3.zero;

    void Start() 
    {
        PlayerSettings settings = GetComponent<PlayerSettings>();
        speed = settings.GetSpeed();
        jumpSpeed = settings.GetJumpSpeed();
        gravity = settings.GetGravity();
        slopeLimit = settings.GetSlopeLimit();
    }

    void Update() {
        CharacterController controller = GetComponent<CharacterController>();
        controller.slopeLimit = slopeLimit;

        if (controller.isGrounded) {
            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;

            if (Input.GetButton("Jump")) {
                moveDirection.y = jumpSpeed;
            }

        }
        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);
    }
}

Cần thêm thông tin: bạn đang sử dụng vật lý? Là những sườn dốc sử dụng hệ thống địa hình hoặc cái gì khác? Thành phần hoặc thành phần nào đang kiểm soát nhân vật của bạn? Đây là game 2D hay 3D?
Kylotan

Bạn có nghĩa là trượt khi người chơi cố gắng nhảy, hoặc khi anh ta hoàn thành một cú nhảy và lên dốc?
tyjkenn

@tyjkenn Ý tôi là khi anh ấy hoàn thành cú nhảy. Giống như trong Super Mario 64. Khi anh ta đáp xuống mặt đất và mặt đất này quá góc cạnh, anh ta nên trượt xuống một điểm mà góc bằng với độ dốcLimit.
keinabel

@Kylotan tốt, tôi là người mới chơi Unity. Vì vậy, tôi cố gắng đưa ra một câu trả lời tốt nhất có thể. Tôi đã tạo ra một nhân vật với bộ điều khiển nhân vật - không có cơ thể cứng nhắc. Tôi làm cho anh ta di chuyển khi nhấn một phím và tôi làm cho anh ta đi tương đối với con trỏ. Tôi đã tạo một địa hình và sử dụng nút (ồ, điều này nghe có vẻ ngu ngốc) để tạo ra một số ngọn núi. Đây sẽ là một game 3D với ngoại hình và phong cách camera như WarCraft III.
keinabel

Câu trả lời:


1

Phanh của bạn khi chạm đất là sai, bạn chỉ cần dừng chuyển động thẳng đứng, nhưng đó chỉ là cách một cú chạm đất hoạt động khi mặt đất bằng phẳng.

Những gì bạn nên làm là chiếu moveDirectionlên bề mặt bị đánh, điều đó sẽ cung cấp cho bạn cái mới moveDirection. Nếu thư viện của bạn có chức năng chiếu một vectơ lên ​​mặt phẳng hoặc bề mặt, đó là những gì bạn nên sử dụng. Nếu không, bạn nên trừ phép moveDirectionchiếu trên bề mặt bình thường khỏi bề mặt moveDirection.


có những trò chơi sử dụng cùng một hành vi, vd. Skyrim, sử dụng chính xác cùng một phương pháp để phanh. vấn đề là nhân vật có thể nhảy ngay cả khi nó không ở trên mặt đất cờ.
Ali1S232

0

Chỉ cần kiểm tra trước khi nhảy nếu nhân vật đứng trên mặt đất, ý tôi là nếu anh ta không ở trên một sườn dốc cao. và để lại bất cứ thứ gì khác cho động cơ vật lý.

dựa trên mã bạn cung cấp tôi có thể thấy vấn đề ở đâu:

theo tham chiếu kịch bản Unity , CharacterController.isGroundedchỉ quay lại nếu nhân vật chạm đất. nó không kiểm tra slop006it. sau một chút tìm kiếm FPSWalkerEnhified dường như là thứ giải quyết vấn đề của bạn.


Vâng, tôi làm kiểm tra xem các nhân vật là có căn cứ trước mỗi di chuyển.
keinabel

@keinabel thì anh không nên nhảy. cách duy nhất anh ta có thể di chuyển lên dốc bằng cách nhảy là nếu anh ta có thể nhảy ngay cả khi anh ta không ở trên mặt đất vững chắc. Ý tôi là chỉ cần bạn kiểm tra xem anh ta có thể đi lên dốc không. nếu anh ta không thể đi ít nhất một hướng do độ dốc thì anh ta không thể nhảy được.
Ali1S232

nó có giúp ích gì không, nếu tôi thêm 'mã chuyển động' vào bài viết của mình?
keinabel

Tôi đoán có thể chỉ thẳng vào vấn đề.
Ali1S232
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.