子弹反弹示意图如下:

1.墙体与子弹均为碰撞体

2.前提条件:需要知道子弹前进方向向量,墙体方向向量

3.计算简易过程,黄色为子弹方向向量,计算出与墙的夹角,根据入射角等于反射角算出橙色方向向量。此时只是子弹方向改变了,接下来还要算出位置的偏移量,根据与墙夹角与子弹本身的大小由三角函数sin/cos算出偏移量,最终效果如红色箭头。

代码:

-- 子弹反弹,ColliderObj:碰撞墙体共4面.
-- self.bulletObjLength为子弹长度估算值, self.Dir为子弹当前的方向向量, self.o_Transform为子弹实例
function BCAmmoBase:ReflectBullet(ColliderObj)-- inNormal: 墙体方向向量,用于计算反射角,为法线-- XOrZ: 判断子弹碰撞为水平墙体还是垂直墙体-- iden: 子弹所碰撞墙体的标识,用于记录上次碰撞的墙体local inNormal, XOrZ, iden = nilif tostring(ColliderObj.transform.name) == "ForwardWall" theninNormal = Vector3(0, 0, -1)XOrZ = trueiden = "F"elseif tostring(ColliderObj.transform.name) == "BackWall" theninNormal = Vector3(0, 0, 1)XOrZ = trueiden = "B"elseif tostring(ColliderObj.transform.name) == "LeftWall" theninNormal = Vector3(1, 0, 0.1)XOrZ = falseiden = "L"elseif tostring(ColliderObj.transform.name) == "RightWall" theninNormal = Vector3(-1, 0, 0.1)XOrZ = falseiden = "R"endif inNormal == nil or iden == nil then-- log("inNormal == nil or iden == nil ")returnend-- 为了避免子弹飞出墙体,同一墙体禁止反弹多次if iden == self.collideLastIden then-- log("iden == self.collideLastIden ")returnendself.collideLastIden = idenself.collideInNormal = inNormalself.collideXOrZ = XOrZlocal reflexDir = Vector3.Reflect(self.Dir, self.collideInNormal)local dirAngle = 90 - Vector3.Angle(reflexDir, self.collideInNormal)local dic = math.sin(math.rad(dirAngle)) * self.bulletObjLength -- log(tostring(reflexDir) .. "  反射向量")-- log(tostring(dirAngle) .. "  反射向量与位置矫正的夹角")-- log(tostring(dic) .. "  位置矫正")-- 位置矫正local pos = self.o_Transform.positionif self.collideXOrZ thenself.o_Transform.position = reflexDir.x >= 0 and pos + Vector3(dic, 0, 0) or pos - Vector3(dic, 0, 0)elseself.o_Transform.position = reflexDir.z >= 0 and pos + Vector3(0, 0, dic) or pos - Vector3(0, 0, dic)end-- 方向矫正local dir = Vector3.Normalize(reflexDir)self.Dir = Vector3(dir.x, 0, dir.z) -- Y轴固定为0,避免子弹上仰或者下倾self.o_Transform.rotation = Quaternion.FromToRotation(Vector3.forward, self.Dir)
end

Unity3D_类捕鱼项目,子弹反弹效果实现相关推荐

  1. 捕鱼场景中子弹反弹效果的实现

    捕鱼场景中子弹反弹效果的实现 目录 捕鱼场景中子弹反弹效果的实现 前言 核心代码: 代码分析: 前言 在捕鱼游戏中设计子弹时实现的反弹效果,这里做一个总结,方便以后在其他游戏中要实现同样的功能时查阅参 ...

  2. 类似捕鱼达人的金币效果

    动画是用dotween做的,项目中的效果可能跟捕鱼达人的有少许区别,但是效果还是很棒的 话不多说,直接上代码 /// <summary>/// 类似捕鱼获得金币的动画/// </su ...

  3. WPF触控程序开发(三)——类似IPhone相册的反弹效果

    原文: WPF触控程序开发(三)--类似IPhone相册的反弹效果 用过IPhone的都知道,IPhone相册里,当图片放大到一定程度后,手指一放,会自动缩回,移动图片超出边框后手指一放,图片也会自动 ...

  4. Unity中子弹反弹效果的制作

    最近在做一个射击游戏,需要做子弹的反弹效果:即当子弹碰撞到物体的时候可以向光线反射一样改变方向射击. 本来是想着可以利用unity自带的物理效果加力加碰撞来做,可是效果不好,不知道是我调的参数不对还是 ...

  5. Unity 中实现子弹时间效果

    在以前,学习xna游戏框架时,由于xna封装的游戏元素很少,很多功能,只能自己去写一篇: 如:子弹时间效果: 先来介绍一个何为"子弹时间"效果: 这得始源于:著名科幻电影<黑 ...

  6. 仿微信图片缩放效果以及listview反弹效果

    这些效果都是基于一些前辈的基础上进行修改的,以满足自己想要的效果,在此对几位前辈表示感谢. 废话不多说了,先上效果图. 因为都是一些动画,图片可能无法看出效果,先说一下主要功能. 1.listview ...

  7. java毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署

    java毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署 java毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署 本源码技术栈: ...

  8. ScrollView反弹效果

    1 public class BounceScrollView extends ScrollView { 2 private View inner;// 孩子View 3 4 private floa ...

  9. 协同办公类系统项目实施推广策略

    协同办公类系统项目实施推广策略 一.项目实施观念 作为项目实施经理应明确,并应影响客户方明确: 1.信息化建设是一个信息化工程,是有计划.有步骤的实施的,不可能一蹴而就. 2.系统实施和应用过程中出现 ...

最新文章

  1. JRuby大捷:ThoughtWorks宣布Mingle发布在即
  2. php 下拉菜单 搜索,DedeCMS实现百度搜索下拉菜单提示信息功能
  3. oracle agile 性能,Oracle Agile PLM安全漏洞(CVE-2016-3554)
  4. C语言之一些值得被定义为常用C语言头文件库的漂亮宏定义
  5. 解决: Mysql安装时mysqld.exe报`应用程序无法正常启动(0xc000007b)`的问题
  6. 循环减肥c语言,最好的减肥方法
  7. 基于实时流的数据基础-分享
  8. PC端/电脑端有没有识别二维码并分类的工具
  9. 项目管理-项目范围说明书
  10. VMware workstation安装虚拟机--Windows XP
  11. 四年嵌入式技术沉淀,处女作《STM32CubeMX系列实战教程》诞生
  12. 用Python提取CSDN灌水乐园的帖子
  13. 奥利给! loading效果这么搞真的太棒了
  14. Linux 命令--SS
  15. Java 假设一张足够大的纸,纸张的厚度为0.5 毫米。请问对折多少次以后,可以达到珠穆朗玛峰的高度(最新数据:8844.43 米)。请编写程序输出对折次数
  16. 什么是标称属性?什么是二元属性?什么是序数属性?
  17. 安卓SO层开发 -- 编译指定平台的SO文件
  18. VM虚拟机安装的CENTOS7系统IP自动变化的问题解决
  19. 外连接与内连接有什么区别?
  20. printf与scanf先后的问题

热门文章

  1. Spark 算子使用案例 -- 统计广告点击量 Top3
  2. Event causality extraction based on connectives analysis
  3. Matlab项目实例-音频频率
  4. java中的方法引用
  5. JVM是如何执行方法调用的?
  6. Android修改系统语言
  7. 一招解决GitHub访问慢的情况
  8. 【资讯】福布斯:金融科技革命开端的尾声
  9. 本地局域网用wordpress搭建个人网站
  10. JAVA训练营第三周和第四周学习总结