Unity 3D 2D敌人巡逻

时间:2014-06-09 11:21:36

标签: unity3d velocity 2d-games

此代码适用于统一2D游戏中的敌人AI。现在敌人静止但如果我改变了两个IF,s<或者>然后敌人向右或向左移动,仅此而已。

我正在努力制造敌人的AI巡逻系统。完成了其他一切(敌人触发系统和敌人追逐玩家),但只有这个巡逻部分无法正常工作。

我在javascript中有一个正在运行的巡逻代码,但是我需要它在C#中所以一切都在一个c#脚本文件中。

using UnityEngine;
using System.Collections;

public class VastaneAI : MonoBehaviour {

    protected Vector3 velocity;
    public Transform _transform;
    public float distance = 1f;
    public float speed = 1f;
    Vector3 _originalPosition;

    public void Start () {
        _originalPosition = gameObject.transform.position;
        _transform = GetComponent<Transform>();
        velocity = new Vector3(speed,0,0);
        _transform.Translate ( velocity.x*Time.deltaTime,0,0);
    }

    public void Update(){
        if (transform.position.x < _originalPosition.x-distance) {
            Debug.Log(_originalPosition.x-distance+"Left side");
            _transform.Translate ( (1*velocity.x)*Time.deltaTime,0,0);
        }   
        if (transform.position.x > _originalPosition.x+distance) {
            Debug.Log(_originalPosition.x+distance+"right side");
            _transform.Translate ( -velocity.x*Time.deltaTime,0,0);
            //velocity = velocity*-1;
        }   
    }
}

1 个答案:

答案 0 :(得分:1)

问题是你的代码开始于position.x不小于或等于距离。如果我们使用状态模式,我们可以稍微清理一下。

bool isGoingLeft = false;

void Update()
{    
    float distFromStart = transform.position.x - _originalPosition.x;   

    if (isGoingLeft)
    { 
        // If gone too far, switch direction
        if (distFromStart < -distance)
            SwitchDirection();

        _transform.Translate (velocity.x * Time.deltaTime, 0, 0);
    }
    else
    {
        // If gone too far, switch direction
        if (distFromStart > distance)
            SwitchDirection();

        _transform.Translate (-velocity.x * Time.deltaTime, 0, 0);
    }
}

void SwitchDirection()
{
     isGoingLeft = !isGoingLeft;
     //TODO: Change facing direction, animation, etc
}