此代码适用于统一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;
}
}
}
答案 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
}