AI не атакует, помогите

Форум для всего, что связано с ИИ.

AI не атакует, помогите

Сообщение Shone 19 окт 2013, 07:20

Помогите решить проблему
АИ делался через behavior, он ходит за игроком, умирает, но не атакует

Синтаксис:
Используется javascript
import RAIN.Core;

var _dataController : DataController;
var _player : GameObject;
var meleeDamage : float = 10.0f;
var hideWhenDead : boolean = false;
var playerHealth;
var _ai : RAINAgent;

function Start()
{
        _player = GameObject.Find("Player");
        _ai = gameObject.GetComponent("RAINAgent");
        _dataController = gameObject.GetComponent("DataController");
}

function Update()
{      
        _ai.Agent.actionContext.SetContextItem.<float>("health", _dataController.current);
       
        var shootAt : GameObject = _ai.Agent.actionContext.GetContextItem.<GameObject>("enemytarget");
        if (shootAt != null)
        {
               
        }
}

function ApplyDamage(damageSource : DamageSource)
{
        if ((damageSource.sourceType == DamageSource.DamageSourceType.GunFire) &&
            (damageSource.sourceObjectType != DamageSource.DamageSourceObjectType.Obstacle))
    {
                _ai.Agent.actionContext.SetContextItem.<float>("gothit", 1.0f);

                transform.Rotate(Vector3.up, -45f);
                var testforward:Vector3 = transform.forward;
                var testright:Vector3 = transform.right;
                transform.Rotate(Vector3.up, 45f);             
               
                if (Vector3.Dot(testforward, damageSource.fromPosition) > 0)
                {
                        if (Vector3.Dot(testright, damageSource.fromPosition) > 0)
                                _ai.Agent.actionContext.SetContextItem.<float>("hitdir", 1f); //left
                        else
                                _ai.Agent.actionContext.SetContextItem.<float>("hitdir", 4f); //front
                }
                else
                {
                        if (Vector3.Dot(testright, damageSource.fromPosition) > 0)
                                _ai.Agent.actionContext.SetContextItem.<float>("hitdir", 2f); //back
                        else
                                _ai.Agent.actionContext.SetContextItem.<float>("hitdir", 3f); //right
                }
               
                _ai.Agent.actionContext.SetContextItem.<GameObject>("enemytarget", damageSource.sourceObject);
        }
        _dataController.current -= damageSource.damageAmount;
}



//@Aether.MessageHandler("Die")
function Die()
{
        if (hideWhenDead)
        {
                gameObject.SetActive(false);
        }
        else
        {
                var colliders : Collider[] = gameObject.GetComponentsInChildren.<Collider>();
                for (var i:int = 0; i < colliders.Length; i++)
                {
                        if ((colliders[i] != null) && !colliders[i].isTrigger )
                        {
                                if( typeof( colliders[i] ) == CharacterController )
                                {
                                        //colliders[i].gameObject.SetActive(false);
                                        colliders[i].enabled = false;
                                }
                                else
                                {
                                        //GameObject.DestroyImmediate(colliders[i]);
                                        colliders[i].enabled = false;
                                }
                        }
                }              
        }
}

//@Aether.MessageHandler("MeleeAttack")
function MeleeAttack()
{
        var target : GameObject = _ai.Agent.actionContext.GetContextItem.<GameObject>("meleetarget");
        var damageSource : DamageSource = new DamageSource();
        damageSource.appliedToPosition = target.transform.position;
        damageSource.damageAmount = meleeDamage;
        damageSource.fromPosition = _ai.Agent.Avatar.gameObject.transform.position;
        damageSource.sourceObject = _ai.Agent.Avatar.gameObject;
        damageSource.sourceObjectType = DamageSource.DamageSourceObjectType.AI;
        damageSource.sourceType = DamageSource.DamageSourceType.MeleeAttack;
       
        target.SendMessage("ApplyDamage", damageSource, SendMessageOptions.DontRequireReceiver);
}

На AI стоит Sensor, по идеи когда игрок оказывается в нем, то AI должен его бить.
Помогите пожалуйста.
Shone
UNец
 
Сообщения: 11
Зарегистрирован: 27 июл 2013, 05:04

Re: AI не атакует, помогите

Сообщение dostalition 20 фев 2014, 22:23

Ты через AStar делаешь ИИ ?
ТВОРЧЕСТВО рулит ... :) Все эти чередующиеся нули и единицы ничего не стоят без АТМОСФЕРЫ, ЦЕЛОСТНОСТИ ПРОИЗВЕДЕНИЯ и прочих ТОНКИХ, но столь необходимых штук ... :)
Аватара пользователя
dostalition
UNITрон
 
Сообщения: 295
Зарегистрирован: 21 янв 2013, 01:35
Откуда: Украина


Вернуться в Искуственный Интеллект

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1