ARPG 敌人扇形视野索敌跟随

演示
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy_VisualField : MonoBehaviour
{
    public Transform player; // 玩家角色

    public float viewAngle = 50; // 敌人的视野角度

    public float distance = 100; // 索敌半径

    public float moveSpeed = 10; // 移动速度

    public float faceAngle = 5; // 面向角度, 当角度大于这个值时, 进行朝向调整

    // Update is called once per frame
    void Update()
    {
        Vector3 playerPos = player.position;
        playerPos.y = transform.position.y;
        float pDis = Vector3.Distance(playerPos, transform.position);
        if (pDis <= distance) // 在索敌范围内
        {
            // 使用Vector3.Angle取得无符号角度,即是以当前物体的transform.forward方向为基准的左右两边各180度
            float angle = Vector3.Angle(playerPos - transform.position, transform.forward); 
            if(angle <= viewAngle / 2) // 视野角度的一半, 左右各一半
            {
                if(faceAngle < angle) // 使敌人调整面向
                {
                    Quaternion targetRotation = Quaternion.LookRotation(playerPos - transform.position);
                    transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, 1 * Time.deltaTime);
                }

                // 朝玩家角色前进
                Rigidbody obj_rigidbody = GetComponent<Rigidbody>();
                obj_rigidbody.MovePosition(transform.position + transform.forward * moveSpeed * Time.deltaTime); 
            }
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值