Мне нужно, чтобы вы читали о погоде, когда автомобиль игрока идет 1-й, 2-й или 3-й против 2 автомобилей ИИ, я попытался выполнить это, используя лучевое кастинг безрезультатно. У меня есть точки маршрута на уровне периодически, и у меня есть система, которая устанавливает новую путевую точку, когда ИИ или игрок входит в нее, затем она направляет луч на следующую контрольную точку, чтобы я мог рассчитать ее расстояние, используя hit.distance, а затем назначил это расстояние каждое обновление переменной float. Однако он не получает право на заказ, и когда я нахожусь сначала, он отображает все возможные комбинации при отладке. Основная проблема, о которой я думаю, приходит, когда я отлаживаю дистанцию, im рядом с путевой точкой, и она может сказать 300, или это может сказать 0,003447 или что-то еще, и это меня действительно сбивает с толку.Raycasting Issue Unity
Ниже сценарий для литья лучей:
using UnityEngine;
using System.Collections;
public class RaceManager : MonoBehaviour {
public GameObject seeking;
public float distance1;
public float distance2;
public float distance3;
public int playerPos;
void Update(){
Debug.Log (playerPos);
//Firing Rays to the target every update and recording its distance.
if (this.gameObject.name == "Player") {
RaycastHit hit;
Ray playerRay = new Ray (this.gameObject.transform.position, seeking.transform.position);
if (Physics.Raycast (playerRay, out hit)) {
distance1 = hit.distance;
Debug.DrawLine (this.transform.position, seeking.transform.position);
}
}
if (this.gameObject.name == "AICar1"){
RaycastHit hit;
Ray playerRay = new Ray (this.gameObject.transform.position, seeking.transform.position);
if (Physics.Raycast (playerRay, out hit)){
distance2 = hit.distance;
Debug.DrawLine(this.transform.position, seeking.transform.position);
}
}
if (this.gameObject.name == "AICar2") {
RaycastHit hit;
Ray playerRay = new Ray (this.gameObject.transform.position, seeking.transform.position);
if (Physics.Raycast (playerRay, out hit)){
distance3 = hit.distance;
Debug.DrawLine(this.transform.position, seeking.transform.position);
}
}
//Decide placement based on Ray Length.
//If Player is first.
if (distance1 < distance2 && distance1 < distance3) {
playerPos = 1;
}
else if (distance1 < distance2 && distance1 > distance3 || distance1 > distance2 && distance1 < distance3) {
playerPos = 2;
}
else {
playerPos = 3;
}
}
}
А вот скрипт отвечает за изменение цели, когда игрок или AI добраться до него
using UnityEngine;
using System.Collections;
public class RaceManager : MonoBehaviour {
public GameObject seeking;
public float distance1;
public float distance2;
public float distance3;
public int playerPos;
void Update(){
Debug.Log (playerPos);
//Firing Rays to the target every update and recording its distance.
if (this.gameObject.name == "Player") {
RaycastHit hit;
Ray playerRay = new Ray (this.gameObject.transform.position, seeking.transform.position);
if (Physics.Raycast (playerRay, out hit)) {
distance1 = hit.distance;
Debug.DrawLine (this.transform.position, seeking.transform.position);
}
}
if (this.gameObject.name == "AICar1"){
RaycastHit hit;
Ray playerRay = new Ray (this.gameObject.transform.position, seeking.transform.position);
if (Physics.Raycast (playerRay, out hit)){
distance2 = hit.distance;
Debug.DrawLine(this.transform.position, seeking.transform.position);
}
}
if (this.gameObject.name == "AICar2") {
RaycastHit hit;
Ray playerRay = new Ray (this.gameObject.transform.position, seeking.transform.position);
if (Physics.Raycast (playerRay, out hit)){
distance3 = hit.distance;
Debug.DrawLine(this.transform.position, seeking.transform.position);
}
}
//Decide placement based on Ray Length.
//If Player is first.
//All signs reversed for testing
if (distance1 < distance2 && distance1 < distance3) {
playerPos = 1;
}
else if (distance1 < distance2 && distance1 > distance3 || distance1 > distance2 && distance1 < distance3) {
playerPos = 2;
}
else {
playerPos = 3;
}
}
}
Хорошо спасибо, дайте ему пойти – Luke
СПАСИБО! Я никогда не знал, что смогу это сделать, но это сработало, Kudos. Я правильно ответил на ваш ответ! : D – Luke
Отлично :-) Я рад, что смогу помочь. –