Я пытаюсь заставить объект следовать за моей мышью вдоль поверхностей в моей игре. В игре есть пол и другие объекты. Объект всегда должен быть на полу или на одном из других объектов. Я хочу, чтобы положение объекта изменилось на то, куда перемещается мышь. Я делаю это, отливая луч от мыши. Когда луч попадает на коллайдер, положение объекта должно измениться на то место, где оно попало.
Когда я нажимаю на кнопку воспроизведения, объект движется вдоль луча, который отбрасывается, начиная со столкновения (точка удара) и двигаясь к камере. Как только он достигает камеры, он начинается заново в точке попадания и повторяется. Когда я перемещаю мышь, положение объекта изменяется на новую точку удара и перемещается к камере. Значение hit.point изменяется в журнале разработчиков, когда я перемещаю мышь, как следует, и когда мышь остается неподвижной, значение не изменяется, даже если объект все еще движется к камере. Почему это происходит? Похоже, потому что значение transform.position установлено в hit.point и никогда не изменяется в другом месте кода, так что позиция всегда должна быть hit.point.
Это код, прикрепленный к движущемуся объекту. :
public class FollowCursor : MonoBehaviour
{
void Update()
{
RaycastHit hit;
Ray ray;
int layerMask = 1 << 8;
layerMask = ~layerMask;
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
transform.position = hit.point;
Debug.Log(hit.point);
}
}
Это скриншот моей иерархии и сцены. Белая сфера - это объект, который движется. Пол, о котором я говорил, это песок на дне резервуара. Я хочу, чтобы объект находился на песке или на одном из других объектов. Слой 8 - это сам резервуар, который исключен из радиопередачи, потому что я не хочу, чтобы объект был на резервуаре.