前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【100个 Unity实用技能】 | 求反射向量的方法,让小球按照物理反射的角度反弹(出射角=入射角)

【100个 Unity实用技能】 | 求反射向量的方法,让小球按照物理反射的角度反弹(出射角=入射角)

作者头像
呆呆敲代码的小Y
发布2023-02-16 14:06:12
1.6K0
发布2023-02-16 14:06:12
举报
文章被收录于专栏:呆呆敲代码的小Y 公众号

Unity 小科普

老规矩,先介绍一下 Unity 的科普小知识:

  • Unity是 实时3D互动内容创作和运营平台 。
  • 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。
  • Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
  • 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
  • 博客主页:https://xiaoy.blog.csdn.net
  • 本文由 呆呆敲代码的小Y 原创,首发于 CSDN
  • 学习专栏推荐:Unity系统学习专栏
  • 游戏制作专栏推荐:游戏制作
  • Unity实战100例专栏推荐:Unity 实战100例 教程
请添加图片描述
请添加图片描述

Unity 实用小技能学习

Unity求反射向量的方法,让小球按照物理反射的角度反弹(出射角=入射角)

在程序中有时候会用到某物体遇到墙壁之后按照物理学角度进行弹射的功能,也就是利用 入射角=出射角 模拟物理反射。

这里我们利用Unity的碰撞检测来实现具体功能,当物体撞击到墙壁之后调用GetContact(0)拿到该物体第一个发生碰撞的接触点坐标的法向量,然后调用 Vector3.Reflect(入射向量,法向量)方法。

入射向量 就是该物体原来移动的向量,将这两个向量传入,即可求出反射向量,然后将该物体的移动方向改为求得的反射向量即可实现弹射功能。

这样我们就可以模拟现实中物体碰到墙壁后的正常弹射运动曲线,实现弹射运动。

示例代码如下:

代码语言:javascript
复制
    private Vector3 direction;//物体移动向量
    public float moveSpeed;//物体移动速度

    private void Start()
    {
        //获取一个随机方向,或者直接赋值某个方向都行。
        direction = GetRandomRotation();
    }

    void Update()
    {
        //物体持续按给定的方向移动
        transform.position += direction * moveSpeed * Time.deltaTime;
    }

    private void OnCollisionEnter(Collision collision)
    {
    	//检测碰到墙壁时改变物体原有移动方向
        if (collision.gameObject.tag.Equals("Obstacle"))
        {
            Vector3 dir = Vector3.Reflect(direction, collision.GetContact(0).normal);
            dir.y = 0;
            direction = dir;
        }
    }
    
    private Vector3 GetRandomRotation()
    {
        Vector3 dir = new Vector3(Random.Range(-1f, 1f), 0, Random.Range(-1f, 1f)).normalized;
        return dir;
    }

注意点: 移动的物体需要挂载刚体和碰撞体,墙壁需要挂载碰撞体。否则无法触发碰撞,这是碰撞检测的必要条件。 本方法受限于 运动物体/墙壁 需要添加刚体和碰撞体,如果有更便捷方便的方法欢迎在评论区指出一起学习参考哦!

展示图如下:

请添加图片描述
请添加图片描述

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023/02/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Unity 小科普
  • Unity 实用小技能学习
    • Unity求反射向量的方法,让小球按照物理反射的角度反弹(出射角=入射角)
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档