物体朝向目标(u3d)
Posted Akuyi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物体朝向目标(u3d)相关的知识,希望对你有一定的参考价值。
以下脚本均来自siki学院的教学视频,个人感觉非常有用,记录下来留着以后温习
Enemy朝向Player并向Player方向移动(2D拾荒者[敌人脚本]):
public class Enemy : MonoBehaviour
{
private Vector2 targetPosition;
private Transform player;
private Rigidbody2D rigidbody;
public float smoothing = 3;
public int lossFood = 10;
public AudioClip attackAudio;
private BoxCollider2D collider;
private Animator animator;
void Start()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
rigidbody = GetComponent<Rigidbody2D>();
collider = GetComponent<BoxCollider2D>();
animator = GetComponent<Animator>();
targetPosition = transform.position;
GameManager.Instance.enemyList.Add(this);
}
void Update()
{
rigidbody.MovePosition( Vector2.Lerp(transform.position, targetPosition, smoothing * Time.deltaTime));
}
public void Move()
{
Vector2 offset = player.position - transform.position;//主角位置减当前位置
if (offset.magnitude < 1.1f)//偏移的大小
{
//攻击(Enemy和Player位置相邻时Enemy可以攻击Player)
animator.SetTrigger("Attack");
AudioManager.Instance.RandomPlay(attackAudio);
player.SendMessage("TakeDamage",lossFood);
}
else
{
float x= 0,y=0;
if (Mathf.Abs(offset.y) > Mathf.Abs(offset.x))
{
//按照y轴移动
if (offset.y < 0)
{
y = -1;
}
else//y的正轴
{
y = 1;
}
}
else
{
//按照x轴移动
if (offset.x > 0)
{
x = 1;
}
else
{
x = -1;
}
}
//设置目标位置之前先做检测(以下内容为检测Enemy前方是否有障碍物)
collider.enabled = false;
RaycastHit2D hit = Physics2D.Linecast(targetPosition, targetPosition + new Vector2(x,y));
collider.enabled = true;
if (hit.transform == null)//前方没有任何物体或前方是食物时才能移动
{
targetPosition += new Vector2(x, y);
}
else
{
if (hit.collider.tag == "Food" || hit.collider.tag == "Suda")
{
targetPosition += new Vector2(x, y);
}
}
}
}
}
Bullet追踪Enemy(塔防游戏[子弹脚本]):
private Transform target;//定义传送目标
public void SetTarget(Transform _target)
{
this.target = _target;
}
void Update()
{
transform.LookAt(target.position);
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
记得设定子弹攻击的目标
目前只使用过这两种脚本,如果再用应用到的物体跟踪目标脚本会继续补上,也欢迎大佬们补充
以上是关于物体朝向目标(u3d)的主要内容,如果未能解决你的问题,请参考以下文章