Есть код:
using UnityEngine;
public class Target : MonoBehaviour {
public Transform player;
public float range = 15;
public int enemyLayer = 8;
public Texture2D aim;
public float aimSize = 50;
private GameObject currentTarget;
private Collider[] colliders = new Collider[0];
void OnGUI() {
if (currentTarget) {
Vector2 tmp = new Vector2(Camera.main.WorldToScreenPoint(currentTarget.transform.position).x,
Screen.height - Camera.main.WorldToScreenPoint(currentTarget.transform.position).y);
Vector2 offset = new Vector2(-aimSize / 2, -aimSize / 2);
GUI.DrawTexture(new Rect(tmp.x + offset.x, tmp.y + offset.y, aimSize, aimSize), aim);
}
}
void FixedUpdate() {
GetTarget();
if (colliders.Length == 0) {
currentTarget = null;
} else {
float curDist = Vector3.Distance(player.position, currentTarget.transform.position);
if (curDist > range) {
currentTarget = null;
}
}
}
void SetTarget() {
if (colliders.Length > 0) {
Collider currentCollider = null;
float dist = Mathf.Infinity;
foreach (Collider collider in colliders) {
float currentDist = Vector3.Distance(player.position, collider.transform.position);
if ((currentTarget && currentDist < dist && currentTarget != collider.gameObject) || currentDist < dist) {
currentCollider = collider;
dist = currentDist;
}
}
currentTarget = currentCollider.gameObject;
}
}
void GetTarget() {
colliders = new Collider[0];
colliders = Physics.OverlapSphere(player.position, range, 1 << enemyLayer);
if (currentTarget) {
return;
}
SetTarget();
}
}
Код работает.
Но мне нужно сделать, чтобы он работал более правильно по отношению к моей задаче.
Есть 2 объекта, один на земле, второй в воздухе.
Мне нужно сделать так, что-бы если N
дистанция до объекта совпадает то таргет взят, но если он уже пролетает над ним, то таргет теряется, то есть угол стрельбы должен быть примерно такой:
И еще такой момент, когда объект который в воздухе разворачивается влево или вправо, чтобы таргет терялся, как мне сделать, чтобы он только лицом к земному объекту брал в таргет? (Лицом пусть даже считается объект пушка)
То-есть, если отклонение больше чем на N
градусов, чтобы терялся таргет.
Помогите пожалуйста с расчетом, никак не могу разобраться...
Считаем угол цели относительно игрока
float Ang = Mathf.Atan2(target.y-player.y, target.x-player.x)/Mathf.PI*180f;
Находим разницу между углом поворота игрока и найденый
float DeltaAng = Mathf.DeltaAngle(playerAng, Ang);
Устанавливаем диапазон в N
градусов
if (Mathf.Abs(DeltaAng ) < nAng) { /*tracking*/ }
else { /*lost taget*/ }
Все теперь работает правильно.
Vector3 CurrentTargetPos = currentTarget.transform.position;
CurrentTargetPos.y = transform.position.y;
Vector3 TargetDist = CurrentTargetPos - transform.position;
float angle = Vector3.Angle(TargetDist, transform.forward);
if (angle > maxAngle) {
currentTarget = null;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Создавая программу, мне понадобилось создать picture Box, который для моего дизайна должен быть круглымПомогите понять, как это сделать
Помогите реализовать такую идею: Ввожу в textbox1 определенный код и при нажатии на кнопку он выполняетсяИдеи с if(
Как защитить такой insert запрос от sql инъекций ? Я использую python 37 и БД mysql 5