从实际问题入手
假设有一个弹弓,明显不能完全绕一圈,对于底部的小部分圆弧是不能穿过的,那么就需要实现限制范围下的圆周运动
解决方法
代码实现
1.坐标点可以通过空物体定位,在脚本中通过Find函数可以找到
2.判断象限采取x,y坐标判断
3.斜率通过向量获取,注意特判x==0的情况
核心代码如下
if (mp2.y < 0)
{
//RadiusPercent,MaxCircleRadius均是与长度相关的计算,可忽略
//对于mp算出来只是一个向量,要想变成一个坐标还需要加一个参考点(centerPointPosition)
//如果出现闪烁问题,查看位置信息是否更新错误,确保为同一时刻坐标
float kLeft = (float)(buttonLeftPointPosition.y - centerPointPosition.y) / (buttonLeftPointPosition.x - centerPointPosition.x);
float kRight = (float)(buttonRightPointPosition.y - centerPointPosition.y) / (buttonRightPointPosition.x - centerPointPosition.x);
float RadiusPercent = mp.magnitude / MaxCircleRadius;
if (mp2.x == 0)
{
mp = (buttonLeftPointPosition - centerPointPosition).normalized * MaxCircleRadius * RadiusPercent + centerPointPosition;
}
else
{
float kBird = (float)(birdPosition.y - centerPointPosition.y) / (birdPosition.x - centerPointPosition.x);
if (kBird > kLeft)
{
mp = (buttonLeftPointPosition - centerPointPosition).normalized * MaxCircleRadius * RadiusPercent + centerPointPosition;
}
else if (kBird < kRight)
{
mp = (buttonRightPointPosition - centerPointPosition).normalized * MaxCircleRadius * RadiusPercent + centerPointPosition;
}
else
{
mp += centerPointPosition;
}
}
}