#c# #unity3d #game-physics #physics
Вопрос:
я пытаюсь создать aimbot, который с помощью приведения сферы определяет, попадает ли он во что-то с большим радиусом, и если aimbot включен, то он стреляет пулей туда, но продолжает выводить середину игрового объекта spherecast (). он вызывается в обновлении aim gameobject это представление положения, в которое должна попасть пуля, если цель находится в коде.:
public void spherecast()
{
origin = gunTip.transform.position;
direction = guntip.transform.forward;
RaycastHit hit;
if (Physics.SphereCast(origin,sphereradus, direction,out hit,maxDistance,whatIsenemy))
{
Debug.Log("I hit enemy");
Debug.Log("position" hit.transform.position);
aim.transform.position = hit.transform.position;
currentHitDistance = hit.distance;
}
else
{
currentHitDistance = maxDistance;
}
}
Ответ №1:
Physics.SphereCast
выводит вообще ничего подобного.
Это вы используете hit.transform.position
, что, конечно, является общей точкой поворота объекта попадания.
SphereCast
предоставляет вам RaycastHit
множество дополнительной информации, такой как, в частности RaycastHit.point
, то, что вы ищете!
public void spherecast()
{
origin = gunTip.transform.position;
direction = guntip.transform.forward;
if (Physics.SphereCast(origin, sphereradus, direction,out var hit, maxDistance, whatIsenemy))
{
// By passing in the hit object you can click on the log in the console
// and it will highlight the according object in your scene ;)
Debug.Log($"I hit enemy "{hit.gameObject}"", hit.gameObject);
Debug.Log($"hit position: {hit.point}", this);
aim.transform.position = hit.point;
currentHitDistance = hit.distance;
}
else
{
currentHitDistance = maxDistance;
}
}