Вращайте объект вокруг игрока с помощью мыши, но он по-прежнему соответствует физике - PullRequest
0 голосов
/ 03 сентября 2018

В моей игре я хочу, чтобы персонаж мог иметь кирку или оружие, которое может вращаться вокруг игрока, но когда я это делаю, он проходит сквозь предметы и очень глючит.

Я хочу, чтобы он все еще следовал за мышью (которая невидима) и по-прежнему останавливался при столкновении. Мой код прямо сейчас - это довольно стандартный код для вращения мыши, и он прикреплен к пустому игровому объекту, который является родителем кирки / оружия

//rotation
Vector3 mousePos = Input.mousePosition;
mousePos.z = 5.23f;

Vector3 objectPos = Camera.main.WorldToScreenPoint(transform.position);
mousePos.x = mousePos.x - objectPos.x;
mousePos.y = mousePos.y - objectPos.y;

float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));

1 Ответ

0 голосов
/ 03 сентября 2018

Всякий раз, когда у вас есть GameObject, для которого вы хотите включить физику, вы не перемещаете его напрямую. Вы добавляете Rigidbody и используете RigidBody.MoveRotation для вращения вашего GameObject. RigidBody имеет набор методов перемещения и вращения, которые учитывают столкновения. Непосредственное перемещение Transform вызовет проблемы.

Это может все же вызывать проблемы в некоторых ситуациях. Если вы все еще испытываете странные физические явления, вы можете устранить их с помощью «физически правильного» решения и использовать Rigidbody.angularVelocity . В зависимости от угла вы можете установить скорость вращения объекта вправо или влево до тех пор, пока он не окажется в нужном вам положении.

По сути, физическая система ненавидит телепортацию. Мгновенные движения и мгновенные вращения - это в основном телепортация к нему. Таким образом, существует иерархия того, насколько «дружественны физические системы» для некоторых действий. И они идут так:

  1. Добавление силы в RigidBody
  2. Добавление скорости к RigidBody
  3. Перемещение GameObject с помощью соответствующих методов RigidBody.
  4. Перемещение GameObject с помощью Transform.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...