团结 - 敌人AI;逃离玩家(x和y)

时间:2014-11-19 19:40:34

标签: android unity3d 2d artificial-intelligence unityscript

我需要一些帮助,为我的游戏中的敌人创建一个脚本!我正在制作一款2.5D游戏,你在那里追逐露营者并试图杀死它们。我主要完成游戏,但我不能让AI工作!我现在四处寻找脚本和帮助了几天,但找不到与我游戏其余部分相符的任何东西......请帮忙!

对于我来说,我有一个在x轴上旋转35°的平面,这对我来说效果非常好(到处移动角色并放置障碍物)。

此时我正在处理这个脚本;

#pragma strict

//Attack button
var attackButton : Joystick;

var anim : Animator;
var delay = 5.0;

//Player can kill
var CanKill = false;

//Score
var scoreValue : int;
var killValue : int;
var playerControl : PlayerControl;

//AI
var speed : int = 2;
var Damp: float = 1.0;

var isRun: boolean = false;
var Target: Transform;

var detectionRange: int = 5;

private var character : CharacterController;

function Start () 
{

    anim = GetComponent("Animator");
    var playerControlObject : GameObject = GameObject.FindWithTag ("Player");

    character = GetComponent(CharacterController);


}

function WaitAndDestroy()
{

    yield WaitForSeconds(delay);
        Destroy (gameObject);

}

function Update()
{

    //Can the player kill?
    if (attackButton.tapCount == 1)
        CanKill = true;

    else CanKill = false; 

    //AI
    var FromPlayer =  Vector3(Target.position.x - transform.position.x, 0);

        if(FromPlayer.magnitude <= detectionRange){
            isRun = true;
        }

        if(FromPlayer.magnitude >= detectionRange) {
            isRun = false;
        }

        if(isRun) {
            RunAway();
            anim.SetBool("Walk", true);
        }

        else anim.SetBool("Walk", false);


}

function OnTriggerEnter (Other : Collider){

    if(Other.gameObject.tag == "Player" && CanKill == true) {
        playerControl.AddScore (scoreValue);
        playerControl.AddKills (killValue);
        anim.SetTrigger("Dead");
        WaitAndDestroy();
    }

}

function RunAway()
{

    var moveDirection : Vector3 = transform.position;
    character.Move(moveDirection.normalized * speed * Time.deltaTime);

}`

哪种方式有效,但由于某种原因,角色停在关卡的中间并且只是在原地运行......如果我(玩家)抓住并运行,我也希望他转向另一个方向在他前面。 (如果代码有点乱,我道歉,但正如我所说,我是Javascript的新手。)

2 个答案:

答案 0 :(得分:1)

我会做那两个改变。

起初:

var FromPlayer =  transform.position - Player.transform.position;

因为你想要减去整个矢量而不仅仅是x坐标 第二个:

function RunAway( FromPlayer :vector3 )
{
    character.Move(FromPlayer.normalized * speed * Time.deltaTime);
}

如果您已经有了向量FromPlayer,则可以直接使用它来移动角色

我个人从未使用过团结,但这就是你在其他地方做到的。它当然假设位置可以减去为矢量

答案 1 :(得分:0)

你希望露营者远离玩家吗?然后你应该做

Vector3 moveDirection = transform.position - Player.transform.position

获取他们应该进入的方向。然后选择你已经拥有的线

character.Move(moveDirection.normalized * speed * Time.deltaTime);