我有一些麻烦,正确的计算如何使一个游戏磨损轨道
在我正在制作的游戏中,我让玩家用他的滑板碾压轨道,计算似乎是正确的。我正在使用y=mx+b
作为形式来计算线的位置,我正在使用这段代码来计算斜率。公式中的m
:
slope = (pointB.position.y - pointA.position.y) / (pointB.position.x - pointA.position.x);
现在让玩家磨砺我有这个剧本:
Player.cs
private void Grind(RaycastHit2D[] hit)
{
var grindObject = hit.Where(x => x.collider.tag == "grindable").FirstOrDefault();
if (grindObject.collider != null)
{
grinding = true;
var wantedTransform = transform.position;
var grindScript = grindObject.collider.gameObject.GetComponent<Grind>();
wantedTransform.y = grindScript.GetYPosition(gameObject.transform.position.x);
if (transform.position.y > wantedTransform.y - 0.5f && transform.position.y < wantedTransform.y + 0.5f)
{
transform.position = wantedTransform; grinding = true;
}
else
grinding = false;
}
else
grinding = false;
}
整个研磨脚本基本上就是这样:
public class Grind : MonoBehaviour {
public Transform pointA;
public Transform pointB;
public float slope;
public void Start()
{
slope = (pointB.position.y - pointA.position.y) / (pointB.position.x - pointA.position.x);
Debug.Log(slope);
}
public float GetYPosition(float playerXPos)
{
return (slope * playerXPos) + (pointA.position.y - pointB.position.y);
}
}
此脚本适用于first rail,但是如果我再拖动它或稍微旋转它,它将无法工作并使播放器float above the rail。 (两个图像都是播放器,动画尚未设置。)
有人知道发生了什么事以及我做错了什么吗?