Raycast от одного объекта к стороне другого объекта - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть ai (красный круг), который должен стрелять в моего игрока (синий круг).

В настоящее время я использую обычный Raycast:

Ray ray = new Ray(transform.position, transform.forward);

, что дает мне фиолетовую линию.

Теперь, когда есть угол (как на картинке), он не попадает в игрока, но мог бы, если бы он стрелял немного в сторону.

Я видел решение для этого, добавив угол к этому радиопередаче, но это не работает для меня, потому что угол отличается, если игрок находится рядом или далеко от ай.

Что мне нужно, это:

То, что Ай стреляет Raycast из себя в сторону (слева и справа) от игрока, но я не знаю, как это сделать.

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

У вашего игрока определённый радиус, не так ли? Просто используя расстояние между игроком и ИИ стрельбы, радиус игрока и некоторую приятную тригонометрию, вы сможете генерировать два луча, чтобы проверить, видит ли стреляющий ИИ «правую сторону» игрока, а также его «левую сторону». ».

Vector3 direction = player.transform.position - shootingAI.transform.position;
float distance = direction.magnitude;
float playerRadius = player.radius;// this is a variable you need to set
float angleToRotate = Mathf.Atan(radius/distance); // trigonometry: tan(angle)=oppositeSideLength/adjacentSideLength

Vector3 rayDirection1 = Quaternion.Euler(0f, -angleToRotate, 0f) * direction;
Vector3 rayDirection2 = Quaternion.Euler(0f, angleToRotate, 0f) * direction;

Используя эти два луча в качестве направления, вы должны проверять «правую сторону» и «левую сторону»

0 голосов
/ 05 ноября 2018

Хороший ответ вы найдете ЗДЕСЬ .

Или, может быть, использовать Sphere Raycast и использовать Contact Point и выстрелить в этот момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...