Для продолжения движения вы можете использовать GetMouseButton
, который имеет значение true, пока кнопка остается нажатой (в отличие от GetMouseButtonDown
, который имеет значение true только для первого кадра, на котором нажата кнопка)
Вы сказали, что скрипт присоединен к такому же компоненту RigiBody
. В таком случае вы никогда не должны размещать объект, используя
transform.position = ...
, но вместо этого используйте RigidBody.MovePosition подобно
Ball.MovePosition(new Vector3( ... ));
Наконец, сохраните начальную позицию при наведении мыши и затем используйте ее в качестве контрольной точки:
Vector3 initialPosition;
void Update()
{
// called the first time mouse button is pressed
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
initialPosition = transform.position;
Vector3 rayPoint = ray.GetPoint(0);
// Not sure but this might get you a slightly better value for distance
distance = Vector3.Distance(transform.position, rayPoint );
}
// called while button stays pressed
if (Input.GetMouseButton(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Vector3 rayPoint = ray.GetPoint(distance);
Ball.MovePosition(initialPosition + new Vector3(rayPoint.x, 0, 0));
}
}
Также обратите внимание, что я не уверен, что
// Update is called once per frame
void FixedUpdate () {
Ball.velocity = transform.forward * Speed * Time.deltaTime;
}
это то, что вы хотите сделать. Использование Time.deltaTime
не имеет особого смысла в моих глазах. Вы либо хотите установить скорость на определенную скорость, например
Ball.velocity = transform.forward * Speed;
или вы хотите изменить позицию, используя Time.deltaTime
для плавного движения, например
Ball.MovePosition(transform.position + transform.forward * Speed * Time.deltaTime);