Ray详解鼠标选取物品以及目标匹配

Ray

  • Ray (origin : Vector3, direction : Vector3)
    Origin 是射线的中心
    Direction 是射线的长度
  • Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition)
    这句话的意思为创一个射线在鼠标所在位置从摄像机发送至屏幕
  • 除了Ray还有Physics.Raycast
    用以检测光线是否触碰到物体
    其中API文档中有的四个
  1. public static bool Raycast(Ray ray, RaycastHit hitInfo, float distance, int layerMask);

  2. public static bool Raycast(Ray ray, float distance, int layerMask);

  3. public static bool Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask);

  4. public static bool Raycast(Vector3 origin, Vector3 direction, RaycastHit , float distance ,int layerMask);
    个人认为参数多点会更提高代码可读性
    除此之外还可以去vs里查看更多Raycast的重载
    注意这个layerMask一定要用LayerMask.GetMask
    不要用LayerMask.NameToLayer去得到当前蒙版的级别
    因为这个参数里面的Layermask是2的当前层级的次方

  • RaycastHit(上一个的函数里面有一个参数是这个)
    这个可以提供你一个介值使用out参数传递给上面的函数在那里面使用使用完以后这个RaycastHit类型参数就有值可以使用了,可以吧有值的这个参数当做gameobject类型使用。

鼠标选择物体

  • 首先放三个物体
    在这里插入图片描述
  • 然后给他们的Layer改一下
    在这里插入图片描述
  • 写上ray相关的代码
private int TargetMask;
    void Start()
    {
        TargetMask = LayerMask.GetMask("Target");//得到的
        print(TargetMask);//输出看看是不是得到了值
    }

    void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从鼠标所在位置发射射线
        RaycastHit hit;//设置一个被射线射到的物体
        if (Physics.Raycast(ray,out hit,100.0F,TargetMask))//使这个射线往原定方向射100米并且只与你设置的Layer层级相撞
        {
            Vector3 offset = new Vector3(15,0,0);//目标物体偏移量
            hit.transform.position += offset;//使目标物体偏移
        }
    }
  • 当鼠标移至目标位置会有下图的效果
    在这里插入图片描述
  • 如有需要可以设置成需要按什么键的时候鼠标在上面才会移动

目标匹配

  • 函数:
void MatchTarget (Vector3 matchPosition, Quaternion matchRotation, AvatarTarget targetBodyPart, MatchTargetWeightMask weightMask, float startNormalizedTime,float targetNormalizedTime)
  • 如何使用:
    使你的targetBodyPart(你想要动的身体部位)在你执行的动作的开始时间startNormalizedTime到最终时间targetNormalizedTime之间,移向目标地方matchRotation,matchPosition(目标地点的位置和旋转值)并且你需要定下一个weightMask(x,y,x方向上的权重)去移动
  • 用于攀爬和移动之类,用途广泛
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我已经怒不可遏了!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值