Проблема с AI - Форум Игроделов
Пт, 17 Май 2024, 09:19 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Проблема с AI
Проблема с AI
Thedrhax14Дата: Ср, 16 Июл 2014, 18:39 | Сообщение # 1
 
Сообщений: 54
Награды: 0
Репутация: 1
Статус: Offline
Всем привет
Недавно я написал своего умного бота. Он по идеи должен проверять есть ли препядтсвия между ним и игроком, ну он конешно проверяет, но не видит игрока, и следовательно не идет к нему и не стреляет. Помогите подправить скрипт или подскажите другой метод.
Код
//bot's options
#pragma strict
var Damage:float;
var Player:Transform;
var BotsEyes:Transform;
var agent:NavMeshAgent;
var Player0 : GameObject;
var range:float;
var health:float;
var Relax:float;
private var Delay = true;
var sound:AudioClip[];
var PotrolPoints:Transform[];
var AC: Animator;
private var IseePlayer = false;
private var IamAttackingPlayer = false;
private var IamGoingToPlayer = false;

function Start()
{
if ( Player==null)
{
Player = transform.Find("Player");
Player0 = GameObject.Find("Player");
}
}

function Update()
{
if ( health >= 1 && Player!=null)
{
var direction = Player.position;
var hit : RaycastHit;
if (Physics.Raycast (BotsEyes.position, direction, hit, 1000))
{
if(hit.collider.gameObject.CompareTag("Player"))
{
IseePlayer = true;
}
if (hit.collider.gameObject.CompareTag("Untagged"))
{
IseePlayer=false;
Potrolling();
agent.speed = 0;
}
}
if (IseePlayer)
{
agent.speed = 4;
agent.SetDestination(Player.transform.position);
IamGoingToPlayer=true;
Attack();
}
}
if(health <=0)
{
Destroy(gameObject);
}
}

function Potrolling()
{

}

function Attack()
{
var dist: float = Vector3.Distance(Player.position,transform.position);
if (dist <= range && Relax == true && IseePlayer)
{
Player0.SendMessage("ApplyDamage",Damage);
audio.clip = sound[Random.Range(0, GeneralSound.length)];
audio.volume = 1;
audio.Play();
//AC.Play("Attack");// это так например
Delay=false;
Wait();
}
}

function Wait()
{
yield WaitForSeconds(Relax);
Delay=true;
}

function ApplyDamage ( damage : float )
{
health -= damage;
Debug.Log("да ты попал");
}

Теперь ты можешь удалить скрипт bot's walking


Виду блог про разроботку игр и про свои проекты https://thedrhax14.wordpress.com/
 
СообщениеВсем привет
Недавно я написал своего умного бота. Он по идеи должен проверять есть ли препядтсвия между ним и игроком, ну он конешно проверяет, но не видит игрока, и следовательно не идет к нему и не стреляет. Помогите подправить скрипт или подскажите другой метод.
Код
//bot's options
#pragma strict
var Damage:float;
var Player:Transform;
var BotsEyes:Transform;
var agent:NavMeshAgent;
var Player0 : GameObject;
var range:float;
var health:float;
var Relax:float;
private var Delay = true;
var sound:AudioClip[];
var PotrolPoints:Transform[];
var AC: Animator;
private var IseePlayer = false;
private var IamAttackingPlayer = false;
private var IamGoingToPlayer = false;

function Start()
{
if ( Player==null)
{
Player = transform.Find("Player");
Player0 = GameObject.Find("Player");
}
}

function Update()
{
if ( health >= 1 && Player!=null)
{
var direction = Player.position;
var hit : RaycastHit;
if (Physics.Raycast (BotsEyes.position, direction, hit, 1000))
{
if(hit.collider.gameObject.CompareTag("Player"))
{
IseePlayer = true;
}
if (hit.collider.gameObject.CompareTag("Untagged"))
{
IseePlayer=false;
Potrolling();
agent.speed = 0;
}
}
if (IseePlayer)
{
agent.speed = 4;
agent.SetDestination(Player.transform.position);
IamGoingToPlayer=true;
Attack();
}
}
if(health <=0)
{
Destroy(gameObject);
}
}

function Potrolling()
{

}

function Attack()
{
var dist: float = Vector3.Distance(Player.position,transform.position);
if (dist <= range && Relax == true && IseePlayer)
{
Player0.SendMessage("ApplyDamage",Damage);
audio.clip = sound[Random.Range(0, GeneralSound.length)];
audio.volume = 1;
audio.Play();
//AC.Play("Attack");// это так например
Delay=false;
Wait();
}
}

function Wait()
{
yield WaitForSeconds(Relax);
Delay=true;
}

function ApplyDamage ( damage : float )
{
health -= damage;
Debug.Log("да ты попал");
}

Теперь ты можешь удалить скрипт bot's walking

Автор - Thedrhax14
Дата добавления - 16 Июл 2014 в 18:39
AltairДата: Ср, 16 Июл 2014, 19:45 | Сообщение # 2
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
Thedrhax14,
Код
agent.SetDestination(Player.transform.position);

Зачем ты так пишешь если твой Player и так Transform ?
нужно
Код
agent.SetDestination(Player.position);
 
СообщениеThedrhax14,
Код
agent.SetDestination(Player.transform.position);

Зачем ты так пишешь если твой Player и так Transform ?
нужно
Код
agent.SetDestination(Player.position);

Автор - Altair
Дата добавления - 16 Июл 2014 в 19:45
Thedrhax14Дата: Ср, 16 Июл 2014, 19:47 | Сообщение # 3
 
Сообщений: 54
Награды: 0
Репутация: 1
Статус: Offline
Altair
Да, точно, чет сглупил
Ну так что ты думаешь на счет подправки скрипта, помимо этого transform?


Виду блог про разроботку игр и про свои проекты https://thedrhax14.wordpress.com/
 
СообщениеAltair
Да, точно, чет сглупил
Ну так что ты думаешь на счет подправки скрипта, помимо этого transform?

Автор - Thedrhax14
Дата добавления - 16 Июл 2014 в 19:47
Форум Игроделов » UNITY3D » СКРИПТИНГ » Проблема с AI
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024