Основная проблема - скалолазание не работает
Моя последняя идея заключалась в создании "зоны", в которой игрок может двигаться только по оси 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](https://i.stack.imgur.com/yHOwI.png)