我一直在减慢我的角色控制器的编程功能,最后要实现的是爬梯。我在过去两天提出的代码大部分都有效,但提出了一些问题:
我的类的工作方式是我有一个Controller2D类来处理大部分的光线投射和移动方法,一个用于调用移动方法的输入的Player类,以及一个用于设置默认世界参数的参数类,如gravity和跳跃高度,但如果角色在某个体积中,例如水或梯子对撞机,则可以被覆盖(这允许我在攀爬时将重力设置为0,这样角色可以正常移动)。几乎所有的梯形图代码都包含在OnTriggerEnter / Stay / Exit函数中,我不确定这是否是最好的方法。
我尝试制作ClimbUp / ClimbDown方法,并从播放器中心拍摄光线投影,这样可以让他或她爬起来,但这并不是太成功(与使用OnTriggerStay相比,存在太多问题)
我想知道在光线投射控制器中成功实施爬梯的人,或者任何可能有建议的人,都愿意指出我正确的方向完成这项任务。
这是一些剧本:
public void ClimbLadder(float y)
{
ClimbingOnLadder = true;
SetVerticalForce(y);
}
public void JumpWhileClimbing(float x)
{
if (ClimbingOnLadder)
{
ClimbingOnLadder = false;
overrideParameters = null;
AddForce(new Vector3(x, Parameters.jumpVelocity * .70f, 0));
JumpAfterClimbing = true;
print(Parameters.jumpVelocity);
}
}
private void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Ladder")
{
CanClimb = true;
}
}
private void OnTriggerStay2D(Collider2D other)
{
if (other.tag == "Ladder")
{
if (ClimbingOnLadder)
{
var newParameters = other.gameObject.GetComponent<ControllerPhysicsVolume2D>();
if (newParameters == null)
{
return;
}
overrideParameters = newParameters.NewParameters;
Debug.Log("overriding");
if (ClimbingOnLadder && State.IsCollidingBelow)
{
ClimbingOnLadder = false;
overrideParameters = null;
}
}
}
}
private void OnTriggerExit2D(Collider2D other)
{
if (other.tag == "Ladder")
{
CanClimb = false;
ClimbingOnLadder = false;
JumpAfterClimbing = false;
}
var newParameters = other.gameObject.GetComponent<ControllerPhysicsVolume2D>();
if (newParameters == null)
{
return;
}
overrideParameters = null;
}