我正在Unity中创建一个迷你高尔夫游戏。射击球的机制应该是单击和拖动机制。我希望球保持在与运动场相同的y轴上。根据我所拥有的,球的y轴保持不变,但是球的x和z点没有跟随我的鼠标移动。它们当前确实围绕LaunchPoint的SphereCollider旋转,但是球没有与鼠标配对。我一直在寻找解决方案,但是我没有像Unity那样的Camera经验,所以它们无法帮助我理解一切。
这是我的代码:
void Update () {
// If ball is not in aimingmode, dont run this code
if (!aimingMode) return;
// Get the current mouse position in 2D screen coordinates
Vector3 mousePos2D = Input.mousePosition;
mousePos2D.y = launchPos.y;
// Find the delta from the launchPos to the mousePos2D
Vector3 mouseDelta = mousePos2D - launchPos;
// Limit the mouse delta to the radius of the spherecollider
float maxMagnitude = this.GetComponent<SphereCollider>().radius;
if(mouseDelta.magnitude > maxMagnitude)
{
mouseDelta.Normalize();
mouseDelta *= maxMagnitude;
}
// Move the ball to this new position
Vector3 projPos = launchPos + mouseDelta;
projectile.transform.position = projPos;
if (Input.GetMouseButtonUp(0))
{
// The mouse has been released
aimingMode = false;
projectileRigidbody.isKinematic = false;
projectileRigidbody.velocity = -mouseDelta * velocityMult;
projectile = null;
}
}
解决方案是否与ScreenToWorldCoordinates有关?我尝试使用此方法,但是遇到了一个错误,我认为是关于相机的错误:“对象引用未设置为对象的实例”。 (注意:相机处于透视模式)。我用于此操作的确切行是:
Vector3 mousePos3D = Camera.main.ScreenToWorldPoint(mousePos2D);
有人可以解释如何使球坐标成为鼠标的坐标吗?
编辑:嗯,该错误是一个令人尴尬的明显错误。我已经以某种方式更改了MainCamera的标签。