昨天的工作中,想实现流星在天空划过的特效。面法线朝向摄像机同时头部要朝向飞行目标。

想到的方法是,用一张图片贴在模型片上移动来实现。用广告牌就行了嘛。本来以为是一个很简单的事情!结果用lookat函数,实现mesh朝向摄像机是没问题的,但是流星的头部怎么也不能朝向飞行的目标的方向。总是横着飞斜着飞。很简单的事情费了很大脑筋才想出来。

到底怎么样才能让一个物体的两个轴朝向不同的物体呢,看来光用lookat不行的,还是得自己写代码实现。

这个效果得分两步来实现:

1. 让物体的某个轴朝向目标点。

2.让物体的另一个轴朝向摄像机。(这一步还不能影响到上一步的x轴朝向)

关于第一步,我参考了这个博客的内容

https://blog.csdn.net/qq_42541751/article/details/114987971?share_token=553A6EAB-54D8-46EC-82CA-018FBB4215CE&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_ios&utm_campaign=client_share&wxshare_count=1

上代码:

        // 朝向target向量var targetDir = looktarget.position - gameObject.transform.position;// 指定哪根轴朝向目标 var fromDir = gameObject.transform.right;// gameObject.transform.rotation * gameObject.transform.right;//计算垂直于朝向轴和目标方向的向量(旋转轴)var axis = Vector3.Cross(fromDir, targetDir).normalized;//计算当前方向和目标方向的夹角var angle = Vector3.Angle(fromDir, targetDir);//将当前朝向向目标方向旋转一定角度,这个角度值可以做插值gameObject.transform.rotation = Quaternion.AngleAxis(angle, axis) * gameObject.transform.rotation;

关于第二步

首先,计算相机向量在YOZ平面内的投影,再求投影向量与y轴的夹角,然后按照x轴来旋转这个

角度就可以了。

        var camdir = cam.transform.position - gameObject.transform.position;var touying = ProjectOnPlane(camdir, gameObject.transform.right);var q = Quaternion.FromToRotation(gameObject.transform.up, touying);gameObject.transform.rotation = q * gameObject.transform.rotation;
    // 求向量在平面的投影向量Vector3 ProjectOnPlane(Vector3 vp, Vector3 vn){Vector3 vt = new Vector3();vt = vp - vn * Vector3.Dot(vp, vn) / Vector3.Dot(vn, vn);return vt;}

最终效果:

Unity3D里实现可以朝向另一目标广告牌(billboard)效果相关推荐

  1. 【酷熊科技】工作积累 ----------- 在unity3d里怎样隐藏物体

    百度问答的 在unity3d里怎样隐藏物体 方法很多: 改position,移到视野外,推荐,最节省  (直接将本地的位置设置为 0, 就可以回到原来的位置了) gameObject.SetActiv ...

  2. Unity3D项目程序加密1——在Unity3D里使用自己的dl

    原文地址:http://liweizhaolili.blog.163.com/blog/static/1623074420144313825921/ 如果稍微关注过这方面知识的朋友,应该知道Unity ...

  3. 「房间里的大象」:让目标检测器一脸懵逼

    「房间里的大象」:让目标检测器一脸懵逼 引自:http://www.sohu.com/a/250526437_642762 作者:Amir Rosenfeld.Richard Zemel.John K ...

  4. 游戏开发小结——在unity3d中开发类塞尔达游戏的反冲效果

    游戏开发小结--在unity3d中开发类塞尔达游戏的反冲效果 在 2D ARPG 中为角色创建反冲效果 我们将在Unity中实现这个效果.首先,我们将进行演示场景的设置.我们将创建一个控制器(cont ...

  5. 【Unity3D】 物体始终朝向目标物体的实现

    using UnityEngine;public class LookAtTarget : MonoBehaviour {public Transform target;// Use this for ...

  6. Unity3D 里IK手柄的用运

    实现功能:1.当点击鼠标右键,左右手扶住武器, 进入射击状态 2.再次点击鼠标右键,武器消失,取消射击状态                                               ...

  7. 在unity3d里怎样使物体消失

    方法很多: 改position,移到视野外,推荐,最节省 gameObject.SetActive (false); //要提前引用,要不你就改不回来了... renderer.enabled = f ...

  8. Unity3D 里怎么制作天空盒(skybox)

    第一步 新建一个材质球 第二步 点击材质球的Shader-->Skybox/6 sided----->插入6张天空图片 第三步点击 MainCamera 第四步 在MainCamera  ...

  9. 我扔掉FPN来做目标检测,效果竟然这么强!YOLOF开源:你只需要看一层特征

    作者丨happy 编辑丨极市平台 导读 旷视科技&中科院对单阶段目标检测中的FPN进行了重思考,采用一级特征进行检测替换复杂的特征金字塔来解决优化问题,提出了YOLOF.该方法取得了与Reti ...

最新文章

  1. Struts2.34必需具备的包
  2. HDU 1008 Elevator
  3. java中获取特定时间段_获取某一时间段特定星期几的所有日期(Java实现)
  4. VTK:Utilities之UnknownLengthArray
  5. 使用Javascript 获得Word application的版本号
  6. 观察者模式与Boost.Signals
  7. 记一次解决问题的掉坑过程
  8. HTML disabled
  9. c语言学习之结构篇代码演示样例-输入n个同学的姓名,数学英语成绩,依照平均分从低到高排序并输出...
  10. ERP系统重新打开订单的后台限制解析
  11. 5个实用的Excel小技巧,谁用谁说好 !
  12. 解决 zsh:command not found
  13. 常见机器视觉软件OpenCV/Halcon/VisionPro/MIL的区别
  14. 关于双非本科2020秋招,我想说的
  15. [算法竞赛入门]第一章_算法概述
  16. nginx关闭/重启/启动的操作方法
  17. 正本清源!!!!!!:HWDB1.1数据集.gnt转换成.png
  18. linux系统压缩与解压缩工具使用方法
  19. 计算几何(立体几何)基础篇
  20. IE浏览器图片不显示,报DOM7009: 无法解码 URL 处的图像问题的解决方法

热门文章

  1. Spotlight on Windows监控软件
  2. 党政机关计算机工作室装修标准规定,机房建设标准及规范-20210711211357.docx-原创力文档...
  3. [基础服务-windows] [ELK] ElasticSearch + Kibana + Logstash 以及插件安装和配置
  4. 2022-12-19 个人便签1:RS CMW官方相关手册网址便签
  5. unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新
  6. JAVA中一些术语的中英文对照
  7. 成都计算机职高学校排名,成都计算机职高排名
  8. 爬虫-截获http错误码(Python)
  9. Python仓库管理系统源代码,库存管理系统源码,基于flask,内含数据库文件,已实现出入库、库存预警,库存搜索等功能
  10. 微信小程序调出多窗口