通过计算点乘让怪物移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 学习向量点乘
//业务逻辑:主角前方的向量和与每一个怪物的连线构成的向量
//这两个向量之间的夹角可以判断怪物是否在人物前方
//如果在前方可以显示怪物,并让怪物走过来,如果不在前方就不渲染,节省性能

//程序逻辑:1.拿到主角的前方向量A   2.拿到怪物当前坐标向量 B  3.算出人物到怪物的方向向量C
//4.点乘A和C,得出一个cos(A和C夹角)的余弦值-一个标量数值=Vector.Dot(A,C)
//5.如果数值大于0 两个向量之间的夹角小于90度,即它们大致指向相同的方向
//=0 时,两个向量是正交的,即它们的夹角为90度。
//<0 时,两个向量之间的夹角大于90度,即它们大致指向相反的方向。
public class fx : MonoBehaviour
{   public GameObject _role;//人
    public GameObject _enemy;//怪物

    void Update()
    {
        Vector3 roleForw = _role.transform.forward;//主角前方向量
        Vector3 RoleToMonster = _enemy.transform.position - _role.transform.position;//主角到怪物的线

        float dotResult = Vector3.Dot(roleForw, RoleToMonster.normalized);//a*b 主角前方的线*主角到怪物的线
        Mathf.Acos(dotResult);//计算当前夹角,前提是点乘运算内部的向量单位化,这样点乘除以两个向量的模,模为1!

        if (dotResult > 0)
        {
            Debug.Log("[0,90)度,怪物在我的前方" + "当前角度:");
            _enemy.transform.Translate(-RoleToMonster * 2 * Time.deltaTime);

        }
        else if (dotResult == 0)
        {
            Debug.Log("夹角=[90)度,怪物在我的侧方");
        }
        else
        {
            Debug.Log("夹角>90)度,怪物在我的后方");
        }

        Debug.DrawRay(_role.transform.position, roleForw * 1000, Color.red);
        Debug.DrawRay(_role.transform.position, RoleToMonster, Color.red);

    }
}//end class

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值