每当我蜷缩在地面下时,我都会在伸缩后夹住地面。我遵循了Brackeys2d移动教程,这是我的c#移动脚本。角色控制器是github链接的副本:https://github.com/Brackeys/2D-Character-Controller。我唯一改变的是我添加了一行代码来修复动画
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
public CharacterController2D controller;
public Animator animator;
public float runSpeed = 40f;
float horizontalMove = 0f;
bool jump = false;
bool crouch = false;
// Update is called once per frame
void Update () {
horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed;
animator.SetFloat("Speed", Mathf.Abs(horizontalMove));
if (Input.GetButtonDown("Jump"))
{
jump = true;
animator.SetBool("IsJumping", true);
}
if (Input.GetButtonDown("Crouch"))
{
crouch = true;
} else if (Input.GetButtonUp("Crouch"))
{
crouch = false;
}
}
public void OnLanding ()
{
animator.SetBool("IsJumping", false);
}
public void OnCrouching (bool IsCrouching){
animator.SetBool("IsCrouching", IsCrouching);
}
void FixedUpdate ()
{
// Move our character
controller.Move(horizontalMove * Time.fixedDeltaTime, crouch, jump);
jump = false;
}
}这是我的problem https://i.imgur.com/TiAIpJC.png的图片
发布于 2020-08-31 08:48:08
通常,在处理跳跃时,你会有一个groundCheck来查看你是否接触到了地面,以便能够跳跃。您的动画布尔会达到类似的效果。你可以有一个天花板检查,可以达到同样的目的。在你的玩家头顶放置一个触发对撞机,使用标签检查它是否与墙触发。
public bool CeilingCheck;
public bool crouch;
void Update()
{
if (Input.GetButton("Crouch"))
{
crouch = true;
}
else if (!CeilingCheck)
{
crouch = false;
}
}这可以通过天花板检查碰撞器附加到游戏对象上。
public PlayerMovement mainScript;
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "Level")
{
mainScript.CeilingCheck = true;
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.tag == "Level")
{
mainScript.CeilingCheck = false;
}
}https://stackoverflow.com/questions/63663106
复制相似问题