一、子弹的碰撞检测:

    因为子弹的移动速度非常的快,那么如果为子弹添加一个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】枪战游戏—发射子弹、射线检测的更多相关文章

  1. Unity3D 5.0简单的射线检测实现跳跃功能

    这里是一个简单的跳跃,5.0和其他版本貌似不一样,并且,再起跳功能做的不完全. 不过一个基本的思路在这里. 1.首先,射线检测,这里是利用一个空对象,放到主角对象的下面 2.然后调节射线的位置,在主角 ...

  2. 【Unity3D】枪战游戏—弹孔设置

    以子弹为原点,发射射线,如果射线检测到障碍物,则返回射线与障碍物的碰撞点 在该点处实例化出弹孔贴图 void Update () { transform.Translate (Vector3.forw ...

  3. unity3d 赛车游戏——复位点检测优化、反向检测、圈数检测、赛道长度计算

    接着上一篇文章说 因为代码简短且思路简单 所以我就把这几个功能汇总为一篇文章 因为我之前就是做游戏外挂的 经过验证核实,**飞车的复位点检测.圈数检测就是以下的方法实现的 至于反向检测和赛道长度计算, ...

  4. Unity3D 之射线检测

    这里来记录下射线检测的相关内容: 射线检测故名就是通过射线去检测是否和碰撞器产生了交集,和碰撞器与碰撞器发生交集一样,会返回一个真. 射线的用法很多:比如检测是否跳跃,通过向地面投射射线控制在地面时候 ...

  5. [知了堂学习笔记]_用JS制作《飞机大作战》游戏_第4讲(创建敌方飞机、敌方飞机发射子弹、玩家子弹击中敌方小飞机,小飞机死亡)

    一.创建敌方飞机 1.思考创建思路: 创建敌方飞机思路与创建玩家飞机思路一样: (1)思考敌方飞机具备什么属性: 敌方飞机的图片.坐标.飞行速度.状态(是否被击中) 设置小飞机被击中时消失时间.飞机可 ...

  6. [知了堂学习笔记]_用JS制作《飞机大作战》游戏_第3讲(玩家发射子弹)

    一.公布上一讲中玩家飞机上.下.右移动实现的代码: /*=========================键盘按下事件 keycode为得到键盘相应键对应的数字==================== ...

  7. unity零基础开始学习做游戏(四)biu~biu~biu发射子弹打飞机

    -------小基原创,转载请给我一个面子 主角都能移动了,那不得做点什么伸张正义,守护世界和平的事嘛,拿起家伙biu~biu~biu~ 首先得做一个好人和一个坏人 老规矩,Canvas下创建两个Im ...

  8. 用JS制作《飞机大作战》游戏_第4讲(创建敌方飞机、敌方飞机发射子弹、玩家子弹击中敌方小飞机,小飞机死亡)-陈远波

    一.创建敌方飞机 1.思考创建思路: 创建敌方飞机思路与创建玩家飞机思路一样: (1)思考敌方飞机具备什么属性: 敌方飞机的图片.坐标.飞行速度.状态(是否被击中) 设置小飞机被击中时消失时间.飞机可 ...

  9. 用JS制作《飞机大作战》游戏_第3讲(玩家发射子弹)-陈远波

    一.公布上一讲中玩家飞机上.下.右移动实现的代码: /*=========================键盘按下事件 keycode为得到键盘相应键对应的数字==================== ...

随机推荐

  1. 使用静态变量的方法求n!

    下面的程序可以输出1-5的阶乘值,如果需要把5改为n,则可求出1-n的阶乘值. void main() { setvbuf(stdout,NULL,_IONBF,); int fac(int n); ...

  2. 灵魂有香气的女子IOS版本APP,近期将考虑开放源代码

    实在太忙,灵魂有香气的女子这个App,断断续续开发了1个多月了,前后台自己独立完成, 由于接触swift没多久,还属于新手行列,不熟悉,希望大家给出意见, 根据意见,完善后将于近期将考虑开放swift ...

  3. Json.net/Newtonsoft 3.0 新特性JObject/Linq to Json

    原文:http://www.cnblogs.com/chsword/archive/2008/09/19/Newtonsoft_new_3_0.html http://www.cnblogs.com/ ...

  4. HDU 1087 Super Jumping! Jumping! Jumping!(最长上升子序列,dp)

    以下引用自:http://www.cnblogs.com/Lyush/archive/2011/08/31/2161314.html沐阳 该题可以算是一道经典的DP题了,题中数据是这样的.以 3 1 ...

  5. java基础知识回顾之---java String final类之intern方法

    public class StringObjectDemo { /** * @param args */ public static void main(String[] args) { String ...

  6. POJ2442Sequence

    http://poj.org/problem?id=2442 题意 :就是输入m个数集,每个含n个数,求从每个集合取一个数后,按非降序输出前n小的和. 思路 : 本来打算是用几个for循环的,后来觉得 ...

  7. hadoop2.2.0集群搭建与部署

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3818908.html 一.安装环境 1.系统环境 CentOS  6.4 2.集群机器节点ip 节点一i ...

  8. SaaS系列介绍之十五: SaaS知识重用

    1 建立并积累自己的开发体系 遵行业界的规定又有自己的特色是我们所追求的目标.成功的软件公司都有丰富而可复用的代码组件,几行代码在单个系统里可能无足轻重,但一旦可在大量的系统中可重复使用那就是价值不菲 ...

  9. 从零开始,让你的框架支持CocoaPods

    本文为投稿文章,作者:奴良(简书) 这两天一直琢磨着想让自己的一个照片多选框架支持CocoaPods下载安装,就搜了好多资料,但是搜到的资料大多都是最基本的,并没有解决我遇到的问题,问题如下: 当自己 ...

  10. linux 防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...