Внутри pickup
вы определяете int x
и int y
внутри блока if
.
Вторая проблема заключается в том, что внутри (или после) метода pickup
у вас есть одно закрытие }
слишком много.
if (Input.GetKeyDown KeyCode.E;))
{
int x = Screen.width / 2;
int y = Screen.height / 2;
} // <-- SEEMS THAT THIS HERE IS YOUR PROBLEM !
Таким образом, вы в основном завершаете свой класс перед методом checkDrop
. Остальные - это просто последующие ошибки: x
и y
будут известны только в этом блоке кода, и когда вы позже попытаетесь использовать их в
Ray ray = mainCamera.GetComponent<Camera>().ScreentPointToRay(new Vector3(x, y));
, они не существуют.
Также, как сказали вы и класс, поэтому метод checkDrop
не известен в Update
. И тогда вы все равно получите дополнительные ошибки, так как не разрешено определять метод вне типа.
Обратите внимание, что я отформатировал ваш код, так что теперь он должен быть достаточно ясным. Вы, наверное, хотели, чтобы это было
void pickup()
{
if (Input.GetKeyDown KeyCode.E;))
{
int x = Screen.width / 2;
int y = Screen.height / 2;
Ray ray = mainCamera.GetComponent<Camera>().ScreentPointToRay(new Vector3(x, y));
RaycastHit hit;
if(Physics.Raycast(ray, out hit))
{
Pickupable p = hit.collider.GetComponent<Pickupable>();
if(p != null)
{
carrying = true;
carriedObject = p.gameObject;
p.gameObject.rigidbody.isKinematic = true;
}
}
}
}