Лестничный подъем - Единство 3D - PullRequest
0 голосов
/ 04 апреля 2020

Основная проблема - скалолазание не работает

Моя последняя идея заключалась в создании "зоны", в которой игрок может двигаться только по оси Y с гравитационной шкалой 0, но когда он покидает коллайдер - настройки гравитации и движения приходят к настройкам по умолчанию.

Я пытался написать сценарий Лестничного восхождения, но все пошло не так. Мой проект в 3D, я использую только движение по оси X и систему прыжков. Может ли кто-нибудь помочь мне с лестничным скриптом?

Я использую движение с помощью кнопок A & D

Это мой сценарий игрока:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(PlayerController))]
public class Player : MonoBehaviour
{

    PlayerController controller;


    public float speed = 10f;
    public int stamina = 1;

    Vector3 moveInput;
    public Vector3 moveVelocity;

    void Start()
    {
        controller = GetComponent<PlayerController>();
    }

    // Update is called once per frame
    void Update()
    {
        // Using GetAxisRaw for avoiding inertia
        moveInput = new Vector3(Input.GetAxisRaw("Horizontal"), Input.GetAxis("Vertical"), 0);
        // Converting moveInput and speed into direction
        moveVelocity = -1 * moveInput.normalized * speed;
        controller.Move(moveVelocity);
    }
}

Я пробовал это на ладдере:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ladder : MonoBehaviour
{

    GameObject playerOBJ;
    bool canClimb = false;
    float speed = 1;
    public Rigidbody playerRB;

    private void Start()
    {
        playerRB = GetComponent<Rigidbody>();
    }

    void OnCollisionEnter(Collision coll)
    {
        Debug.Log("Starting climbing");
        playerRB.useGravity = false;
        if (coll.gameObject.tag == "Player")
        {
            canClimb = true;
            playerOBJ = coll.gameObject;
        }
    }

    void OnCollisionExit(Collision coll2)
    {
        Debug.Log("Ended climbing");
        playerRB.useGravity = true;
        if (coll2.gameObject.tag == "Player")
        {
            canClimb = false;
            playerOBJ = null;
        }
    }
    void Update()
    {
        if (canClimb)
        {
            if (Input.GetKey(KeyCode.D))
            {
                playerOBJ.transform.Translate(new Vector3(0, 1, 0) * Time.deltaTime * speed);
            }
            if (Input.GetKey(KeyCode.A))
            {
                playerOBJ.transform.Translate(new Vector3(0, -1, 0) * Time.deltaTime * speed);
            }
        }
    }
}

Как вы можете видеть здесь, я пытался заставить игрока двигаться только по оси Y. Но я действительно не знаю, как отремонтировать или изменить его. Все те же проблемы или слишком старые, или для контроллера движения fps, или даже с использованием JavaScript.

Issue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...