ฉันจะทำให้ตัวละครของฉันเลื่อนลงไปตามทางลาดที่มีมุมสูงได้อย่างไร


9

ฉันกำลังทำงานเกี่ยวกับการเคลื่อนไหวของตัวละครของฉันในUnity3D ฉันจัดการเพื่อให้เขาย้ายไปที่เคอร์เซอร์ของเมาส์ค่อนข้าง ฉันตั้งค่าขีด จำกัด ความชัน 45 °ซึ่งไม่อนุญาตให้ตัวละครเดินขึ้นไปบนภูเขาที่มีองศาสูงกว่า แต่เขายังสามารถกระโดดขึ้นได้

ฉันจะทำให้เขาเลื่อนลงมาอีกครั้งได้อย่างไรเมื่อเขากระโดดขึ้นไปบนสถานที่ที่มีความลาดชันสูงเกินไป

ขอบคุณล่วงหน้า.

แก้ไข:ข้อมูลโค้ดของการเคลื่อนไหวพื้นฐานของฉัน ใช้ UnityEngine; ใช้ 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);
    }
}

ต้องการข้อมูลเพิ่มเติม: คุณใช้ฟิสิกส์อยู่หรือไม่ ความลาดชันเหล่านี้ใช้ระบบภูมิประเทศหรืออย่างอื่นหรือไม่? องค์ประกอบหรือส่วนประกอบใดที่ควบคุมตัวละครของคุณ นี่เป็นเกม 2D หรือ 3D หรือไม่?
Kylotan

คุณหมายถึงสไลด์เมื่อผู้เล่นพยายามกระโดดหรือเมื่อเขากระโดดเสร็จและชนกับเนินเขาหรือไม่?
tyjkenn

@tyjkenn ฉันหมายถึงเมื่อเขากระโดดเสร็จ เช่นเดียวกับใน Super Mario 64 เมื่อเขาตกลงสู่พื้นและพื้นดินนี้มีมุมสูงเกินไปเขาควรเลื่อนลงไปยังจุดที่มุมเท่ากับความลาดชัน
keinabel

@Kylotan ดีฉันเป็นมือใหม่สำหรับ Unity ดังนั้นฉันจึงพยายามให้คำตอบที่ดีที่สุดเท่าที่จะทำได้ ฉันสร้างตัวละครโดยใช้ตัวควบคุมตัวละคร - ไม่มีตัวถังที่แข็งแรง ฉันทำให้เขาเคลื่อนไหวเมื่อกดแป้นและทำให้เขาเดินไปที่เคอร์เซอร์ค่อนข้าง ฉันสร้างภูมิประเทศและใช้ปุ่ม (โอ้ฉันต้องทำเสียงโง่ ๆ ) เพื่อสร้างภูเขา เกมนี้จะเป็นเกม 3 มิติที่มีรูปลักษณ์และสไตล์ของกล้องเช่น WarCraft III
keinabel

คำตอบ:


1

การเบรกของคุณเมื่อตีพื้นผิดคุณหยุดการเคลื่อนที่ตามแนวตั้งได้ แต่นั่นเป็นวิธีที่การกระแทกบนพื้นทำงานเมื่อพื้นราบ

สิ่งที่คุณควรทำคือการฉายบนพื้นผิวที่เป็นฮิตที่จะให้คุณใหม่moveDirection moveDirectionหากห้องสมุดของคุณมีฟังก์ชั่นฉายภาพเวกเตอร์บนระนาบหรือพื้นผิวนั่นคือสิ่งที่คุณควรใช้ ถ้าไม่คุณควรลบการmoveDirectionฉายภาพบนพื้นผิวปกติจากmoveDirectionตัวมันเอง


มีเกมที่ใช้พฤติกรรมเดียวกันเช่น skyrim ใช้วิธีการเดียวกันทั้งหมดสำหรับการเบรก ปัญหาคือตัวละครสามารถกระโดดแม้ว่ามันจะไม่ได้อยู่บนพื้นดินธง
Ali1S232

0

เพียงตรวจสอบก่อนที่จะกระโดดถ้าตัวละครกำลังยืนอยู่บนพื้นดินฉันหมายความว่าถ้าเขาไม่ได้อยู่บนทางลาดมุมสูง และทิ้งสิ่งอื่นไว้ในเอนจิ้นฟิสิกส์

ตามรหัสที่คุณให้ฉันสามารถดูว่าปัญหาอยู่ที่ใด:

ตามความเป็นเอกภาพในการอ้างอิงสคริปต์ , CharacterController.isGroundedเป็นเพียงการกลับมาถ้าตัวอักษรสัมผัสพื้นดิน มันไม่ได้ตรวจสอบหา slopelimit หลังจากค้นหาFPSWalkerEnhancedเล็กน้อยดูเหมือนว่าจะเป็นสิ่งที่ช่วยให้คุณออก


ฉันจะตรวจสอบว่าตัวละครมีการต่อสายดินทุกครั้งหรือไม่
keinabel

@keinabel แล้วเขาไม่ควรกระโดดได้ วิธีเดียวที่เขาสามารถเลื่อนขึ้นเนินได้โดยใช้การกระโดดคือถ้าเขาสามารถกระโดดได้แม้ว่าเขาจะไม่ได้อยู่บนพื้นแข็ง ฉันหมายความว่ามันเป็นเพียงแค่คุณตรวจสอบว่าเขาไม่สามารถเดินขึ้นเขา ถ้าเขาไม่สามารถเดินในทิศทางเดียวอย่างน้อยหนึ่งอันเนื่องจากความชันเขาจะไม่สามารถกระโดดได้เลย
Ali1S232

มันจะช่วยได้ไหมหากฉันเพิ่ม 'รหัสการเคลื่อนไหว' ของฉันลงในโพสต์ของฉัน
keinabel

ฉันเดาว่าสามารถชี้ปัญหาได้อย่างตรงประเด็น
Ali1S232
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.