【Unity3D】枪战游戏—发射子弹、射线检测
一、子弹的碰撞检测:
因为子弹的移动速度非常的快,那么如果为子弹添加一个collider,就有可能检测不到了。
因为collider是每一帧在执行,第一帧子弹可能在100米处,那么下一帧就在900米处了,
那么中间的障碍物就不能被检测到了。
所以就需要射线检测:
在每一帧的执行,都向上一帧发射射线,不断地检测射线中是否有穿过的障碍物体
- void Update () {
- transform.Translate (Vector3.forward * Speed * Time.deltaTime);
- //用射线检测,子弹的碰撞,当物体在两点之间产生的射线内时,算作发生碰撞
- //1.获得射线的起点(原点)
- //2.获得射线的方向
- //3.获得射线的距离
- Vector3 oriPos = transform.position;//1.射线的起点
- Vector3 direction = transform.position - oriPos;//2.方向
- float ength = (transform.position - oriPos).magnitude;//3.射线的距离,取向量的大小
- //光线投射碰撞
- RaycastHit hitinfo;//存储碰撞信息
- //光线投射,检测是否发生碰撞
- bool isCillider = Physics.Raycast (oriPos,direction,out hitinfo,ength);
- if (isCillider) {
- //射线检测到物体,执行以下动作
}
二、子弹的生成
首先想到的是在枪口生成子弹,然后使子弹发生移动
如果是这样的话,玩家就不能指哪打哪
所以需要在屏幕的正中央,来生成子弹
依旧运用射线,让子弹延射线方向移动
获得屏幕中央作为射线原点
发射射线
如果射线碰撞到物体,返回该点,确定原点与该点的方向,子弹沿该方向移动
如果没有,则目标点为从原点向前移动一定距离,作为目标点,确定方向,子弹沿该方向移动
- //开始射击
- void Shoot(){
- //闪光
- flashcol.Flash ();
- //生成子弹
- //GameObject.Instantiate (bulletPrefab, fllow.transform.position, fllow.transform.rotation);
- GameObject go = GameObject.Instantiate (bulletPrefab,transform.position,Quaternion.identity) as GameObject ;
- //获得屏幕中心位置,转化为世界坐标
- Vector3 point = soliderCamera.ScreenToWorldPoint (new Vector3 (Screen.width / , Screen.height / ,));
- //定义射线
- RaycastHit hitinfo;
- //发射射线
- bool isCollider = Physics.Raycast (point, soliderCamera.transform.forward/*相机前朝向*/, out hitinfo);
- if (isCollider) {
- //如果射线撞击到了物体
- go.transform.LookAt (hitinfo.point);
- } else {
- //如果射线没有撞击物体
- //那么朝向1000米外的目标点
- point += soliderCamera.transform.forward * ;
- go.transform.LookAt(point);
- }
- }
【Unity3D】枪战游戏—发射子弹、射线检测的更多相关文章
- Unity3D 5.0简单的射线检测实现跳跃功能
这里是一个简单的跳跃,5.0和其他版本貌似不一样,并且,再起跳功能做的不完全. 不过一个基本的思路在这里. 1.首先,射线检测,这里是利用一个空对象,放到主角对象的下面 2.然后调节射线的位置,在主角 ...
- 【Unity3D】枪战游戏—弹孔设置
以子弹为原点,发射射线,如果射线检测到障碍物,则返回射线与障碍物的碰撞点 在该点处实例化出弹孔贴图 void Update () { transform.Translate (Vector3.forw ...
- unity3d 赛车游戏——复位点检测优化、反向检测、圈数检测、赛道长度计算
接着上一篇文章说 因为代码简短且思路简单 所以我就把这几个功能汇总为一篇文章 因为我之前就是做游戏外挂的 经过验证核实,**飞车的复位点检测.圈数检测就是以下的方法实现的 至于反向检测和赛道长度计算, ...
- Unity3D 之射线检测
这里来记录下射线检测的相关内容: 射线检测故名就是通过射线去检测是否和碰撞器产生了交集,和碰撞器与碰撞器发生交集一样,会返回一个真. 射线的用法很多:比如检测是否跳跃,通过向地面投射射线控制在地面时候 ...
- [知了堂学习笔记]_用JS制作《飞机大作战》游戏_第4讲(创建敌方飞机、敌方飞机发射子弹、玩家子弹击中敌方小飞机,小飞机死亡)
一.创建敌方飞机 1.思考创建思路: 创建敌方飞机思路与创建玩家飞机思路一样: (1)思考敌方飞机具备什么属性: 敌方飞机的图片.坐标.飞行速度.状态(是否被击中) 设置小飞机被击中时消失时间.飞机可 ...
- [知了堂学习笔记]_用JS制作《飞机大作战》游戏_第3讲(玩家发射子弹)
一.公布上一讲中玩家飞机上.下.右移动实现的代码: /*=========================键盘按下事件 keycode为得到键盘相应键对应的数字==================== ...
- unity零基础开始学习做游戏(四)biu~biu~biu发射子弹打飞机
-------小基原创,转载请给我一个面子 主角都能移动了,那不得做点什么伸张正义,守护世界和平的事嘛,拿起家伙biu~biu~biu~ 首先得做一个好人和一个坏人 老规矩,Canvas下创建两个Im ...
- 用JS制作《飞机大作战》游戏_第4讲(创建敌方飞机、敌方飞机发射子弹、玩家子弹击中敌方小飞机,小飞机死亡)-陈远波
一.创建敌方飞机 1.思考创建思路: 创建敌方飞机思路与创建玩家飞机思路一样: (1)思考敌方飞机具备什么属性: 敌方飞机的图片.坐标.飞行速度.状态(是否被击中) 设置小飞机被击中时消失时间.飞机可 ...
- 用JS制作《飞机大作战》游戏_第3讲(玩家发射子弹)-陈远波
一.公布上一讲中玩家飞机上.下.右移动实现的代码: /*=========================键盘按下事件 keycode为得到键盘相应键对应的数字==================== ...
随机推荐
- 关于ios中的文本操作-简介
来源:About Text Handling in iOS 官方文档 iOS平台为我们提供了许多在app中展示文本和让用户编辑文本的方式.同时,它也允许你在app视图中展示格式化的文本和网页内容.你可 ...
- JsRender系列demo(5) for else
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- java 追加写入代码一例
最近最项目参数化的时候用到,场景是这样的,需要测试A和B两个接口,其中B接口传入的参数必须是传递给A接口过的,所以整理一个思路就是: 1. 正常调用A接口,但是将传递给A接口的参数保存到文本里,此处要 ...
- ccflow学习下载网址
1.ccflow下载:http://ccflow.org/download.aspx 2.说明:http://ccbpm.mydoc.io/ 3.各种文档:bbs.ccflow.org/showtop ...
- java.lang.NoClassDefFoundError: JspException
在打开jsp页面的时候报错java.lang.NoClassDefFoundError: JspException,如下所示: 原因和解决方案: 原因是由于包不全 把该导的包导进去,在上面的例子就是由 ...
- 套题T1
间隙妖怪(gap.cpp/c/pas) 题目描述: 八云紫是幻想乡的间隙妖怪.她喜欢和八云橙玩一个叫做翻转的游戏.具体规则如下,八云紫对一个长度为N字符串做M次翻转操作,每次操作给定一个X,八云紫将X ...
- POJ1182 食物链
并查集经典题1. 向量的思考模式2. 再计算向量时,要画图:有一个关系一开始写错了3. 本人的norm函数一开始x >= 3写成了 x>3,应该对这种小函数多做UT(口头上的,比如)4. ...
- mysql怎样建表及mysql优化
1.符合数据库三范式 2.字段选择合适的数据类型 3.注意表之间的联系,一对多,多对多,一对一 4.拆分表,把不常用的字段单独成表. 5.建立索引,哪些字段建立索引?建立索引的原则?最左前缀原则,wh ...
- IOS开发--上传图片
IOS图片上传功能实现总结 IOS图片上传主要分两种方式实现,一个是将图片信息以表单的形式上传,一种是将图片以JSON的格式上传. 首先要讲的是以这两个方式上传的一个比较明显的区别就是HTTP Hea ...
- JavaScript DOM编程基础精华03(动态设置,层的操作,性能问题)
代码是否需要放置到onload中 //如果js代码需要操作页面上的元素,则将该代码放到onload里面. //因为当页面加载完毕之后页面上才会有相关的元素 //如果js代码中没有操作 ...