物体朝向目标(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)的主要内容,如果未能解决你的问题,请参考以下文章

物体朝向摄像机

Unity3D外包团队——技术分享U3D全景漫游

u3d怎么调整ugui里的相对位置,使之和其他物体的相对位置不变

u3d 给物体施加力的方式都有哪些

U3D如何让物体旋转一定角度

csharp 把相机朝向的物体的面向相机面剔除