캐릭터가 고각 경사면으로 미끄러 져 내 리도록하려면 어떻게합니까?


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에서와 같이 땅에 착륙 할 때이 땅의 각도가 너무 높으면 각도가 slopeLimit와 같은 지점으로 내려 가야합니다.
keinabel

@ Kylotan 글쎄, 나는 Unity의 초보자입니다. 그래서 가능한 한 좋은 답변을하려고 노력합니다. 강체가없는 캐릭터 컨트롤러로 캐릭터를 만들었습니다. 나는 키를 눌렀을 때 그를 움직이게 만들었고 커서를 상대적으로 걷게 만들었습니다. 지형을 만들고 버튼을 사용하여 산을 만들었습니다. 이 게임은 WarCraft III와 같은 모양과 카메라 스타일의 3D 게임입니다.
keinabel

답변:


1

지면에 부딪 칠 때 제동이 틀리면 단순히 수직 이동을 멈추지 만지면이 평평 할 때지면이 작동하는 방식입니다.

당신이해야 할 일은 moveDirection맞은 표면 에 투영 하여 새로운 것을 줄 것 moveDirection입니다. 라이브러리에 평면 또는 표면에 벡터를 투영하는 기능이있는 경우 사용해야합니다. 그렇지 않은 경우 moveDirection표면 법선의 투영을 moveDirection자체 에서 빼야 합니다.


같은 행동을하는 게임이 있습니다 (예 : 스카이 림의 경우 제동에 동일한 방법을 사용하십시오. 문제는 깃발 바닥에 있지 않아도 캐릭터 있다는 것입니다.
Ali1S232

0

캐릭터가지면에 서 있는지 점프하기 전에 확인하십시오. 높은 각도의 경사면에 있지 않다는 것을 의미합니다. 물리 엔진에 다른 것을 남겨 두십시오.

제공 한 코드를 기반으로 문제의 위치를 ​​볼 수 있습니다.

에 따라 유니티 스크립트 참조 , CharacterController.isGrounded캐릭터가 땅에 닿는 경우에만 반환됩니다. 기울기 제한을 확인하지 않습니다. FPSWalkerEnhanced를 약간 검색 하면 문제를 해결하는 것으로 보입니다.


글쎄, 난 않는 캐릭터마다 이동하기 전에 접지되어 있는지 확인합니다.
keinabel

@keinabel 그러면 그는 뛰어 넘을 수 없습니다. 그가 점프를 사용하여 슬로프를 올라갈 수있는 유일한 방법은 단단한 바닥에 있지 않더라도 점프 할 수있는 것입니다. 그가 슬로프를 올라갈 수 없는지 확인한 것과 같습니다. 만약 그가 경사로 인해 적어도 한 방향으로 걸을 수 없다면 그는 전혀 뛸 수 없어야합니다.
Ali1S232

게시물에 '운동 코드'를 추가하면 도움이 되나요?
keinabel

문제를 똑바로 지적 할 수 있다고 생각합니다.
Ali1S232
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.