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

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

物体朝向摄像机

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

U3D物体移动方式小结

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

u3d 鼠标点击位置,物体移动过去。 U3d mouse clicks position, objects move past.