学习目标:
实现敌人Enemy简单AI的巡回移动,上一篇文章讲到位置的随机移动,现在可以来实现巡回来移动,这里采用左右移动。
学习内容:
先把几个空对象设置好,leftPos,rightPos还有EnemyBlueBug,必须处于y轴平行,即y轴位置相同,然后就把EnemyBlueBug贴着墙的最左最右边,leftPos,rightPos即可粘贴他的位置。
然后改进一下上次打的代码
代码部分:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyBlueBug : Enemy
{
public float moveSpeed;
public float startTime;
public float waitTime;
public Transform leftPos;
public Transform rightPos;
public Transform movePos;
public void Start()
{
base.Start();
waitTime = startTime;
movePos.position = leftPos.position;
}
// Update is called once per frame
public void Update()
{
base.Update();
transform.position = Vector2.MoveTowards
(transform.position, movePos.position, moveSpeed * Time.deltaTime);
if(Vector2.Distance(transform.position, leftPos.position) < 0.05f)
if (waitTime <= 0)
{
movePos.position = rightPos.position;
}
else
{
waitTime -= Time.deltaTime;
}
if (Vector2.Distance(transform.position, rightPos.position) < 0.05f)
if (waitTime <= 0)
{
movePos.position = leftPos.position;
}
else
{
waitTime -= Time.deltaTime;
}
}
然而这里没有对敌人进行转向的功能,再加几行即可。
前面那段逆天,后面不知道为什么到右边的墙不会旋转,也改不了Righbody2D的速度
在其他视频发现Scale改变x的值即可。
下面是最终代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyBlueBug : Enemy
{
public float moveSpeed;
public float startTime;
public float waitTime;
public Transform leftPos;
public Transform rightPos;
public Transform movePos;
private Rigidbody2D rb2D;
public void Start()
{
base.Start();
rb2D = GetComponent<Rigidbody2D>();
waitTime = startTime;
movePos.position = leftPos.position;
}
// Update is called once per frame
public void Update()
{
base.Update();
transform.position = Vector2.MoveTowards
(transform.position, movePos.position, moveSpeed * Time.deltaTime);
if (Vector2.Distance(transform.position, leftPos.position) < 0.1f)
{
if (waitTime <= 0)
{
waitTime = startTime;
transform.localScale = new Vector3(-1, 1, 1);
//transform.localRotation = Quaternion.Euler(0, -180, 0);
movePos.position = rightPos.position;
}
else
{
waitTime -= Time.deltaTime;
}
}
if (Vector2.Distance(transform.position, rightPos.position) < 0.1f)
{
if (waitTime <= 0)
{
waitTime = startTime;
transform.localScale = new Vector3(1, 1, 1);
// transform.localRotation = Quaternion.Euler(0, -180, 0);
movePos.position = leftPos.position;
}
else
{
waitTime -= Time.deltaTime;
}
}
}
//Vector2 GetRandomPos()
//{
// Vector2 randomPosition = new Vector2(Random.Range(leftPos.position.x, rightPos.position.x),
// Random.Range(leftPos.position.y, rightPos.position.y));
// return randomPosition;
//}
}
学习产出:
新学了一个通过Transform.localScale的x值可以转向