简单第一人称射击游戏

克隆炮弹和硝烟的预制体。

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4
 5 public class TankFire : MonoBehaviour {
 6
 7     public Transform fire_point;//发射点Transform
 8
 9     /// <summary>
10     /// 子弹的预设体(预先, 设置, 游戏物体)
11     /// </summary>
12     public GameObject bulletPrefab;
13
14     public GameObject FirePrefab;
15     /// <summary>
16     /// 发射的力道
17     /// </summary>
18     public float force;
19
20     void Update()
21     {
22         if (Input.GetKeyDown(KeyCode.Space))//空格键发射子弹
23         {
24             Fire();
25         }
26     }
27     void Fire()
28     {
29         //-----------炮弹和硝烟的克隆
30         GameObject _bullet = Instantiate(bulletPrefab, fire_point.position, fire_point.rotation);
31         GameObject _fireSmoke = Instantiate(FirePrefab, fire_point.position, fire_point.rotation);
32         //给子弹指定是哪个炮管发射的
33         _bullet.GetComponent<BulletSprite>().TankFire = this;
34         _bullet.GetComponent<Rigidbody>().AddRelativeForce(Vector3.forward * force, ForceMode.Impulse);
35         //定时摧毁炮弹和硝烟
36         Destroy(_bullet, 2.5f);
37         Destroy(_fireSmoke, 1.5f);
38     }
39         //射中指定目标计分
40     public Score scoreText;
41     public void ShotTarget(int score)
42     {
43         scoreText.ScoreNum = score;
44     }
45 }    

坦克开火脚本

利用轴的缓动,移动炮管。

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4
 5 public class TankMove : MonoBehaviour {
 6
 7     /// <summary>
 8     /// 炮塔
 9     /// </summary>
10     public Transform turret_bass;
11     /// <summary>
12     /// 旋转速度
13     /// </summary>
14     public float e_Turret_Speed;
15     /// <summary>
16     /// 当前炮头角度值
17     /// </summary>
18     private float eTurret;
19     /// <summary>
20     /// 炮管
21     /// </summary>
22     public Transform cannon_bass;
23     /// <summary>
24     /// 上下移动速度
25     /// </summary>
26     public float e_Cannon_Speed;
27     private float eCannon;
28     /// <summary>
29     /// 当前炮管角度值
30     /// </summary>
31     // Use this for initialization
32     void Start()
33     {
34         //当前炮头和炮管初始值
35         eTurret = turret_bass.localEulerAngles.y;
36         eCannon = cannon_bass.localEulerAngles.x;
37     }
38
39     void Update()//FPS=20
40     {
41         //Time.deltaTime//假设FPS为20,则此值的大小约为20分之一,也就是本帧的运行时间
42         //假设一共需要走speed度,则每一帧应该走的度数是每帧的时间乘以度数
43         //后面的input.GetAxis是为了缓动
44         eTurret += Time.deltaTime * e_Turret_Speed * Input.GetAxis("Horizontal");
45         turret_bass.localEulerAngles = new Vector3(0, eTurret, 0);
46
47         eCannon -= Time.deltaTime * e_Cannon_Speed * Input.GetAxis("Vertical");
48         eCannon = Mathf.Clamp(eCannon, -25, 7);
49         cannon_bass.localEulerAngles = new Vector3(eCannon, 0, 0);
50     }
51 }

移动炮管脚本

利用一条射线,设置准星的现隐。添加名为Bullet的Layer,不让准星出现在炮弹上。

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4
 5 public class CrossHairs : MonoBehaviour {
 6
 7     public Transform fire_point;
 8     public Transform crosshair;
 9     void Start()
10     {
11
12     }
13     Ray ray;
14     RaycastHit hit;
15     void Update()
16     {
17         Vector3 vec = fire_point.rotation * Vector3.forward;
18         ray = new Ray(fire_point.position, vec);//发射一条射线
19         LayerMask layer = 1 << LayerMask.NameToLayer("Default");//获取Layer层的值
20         if (Physics.Raycast(ray, out hit, 1000, layer.value))
21         {
22             crosshair.gameObject.SetActive(true);//显示瞄准点
23             crosshair.position = hit.point;//point是世界坐标系
24         }
25         else
26         {
27             crosshair.gameObject.SetActive(false);
28         }
29     }
30 }

瞄准点脚本

方块每个都有对应得分数,并添加Enemy标签。

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4
 5 public class EnemySprite : MonoBehaviour {
 6
 7     public int socre;
 8     // Use this for initialization
 9     void Start()
10     {
11
12     }
13
14     // Update is called once per frame
15     void Update()
16     {
17
18     }
19 }

敌人属性脚本

检测炮弹是否碰撞方块,调用开火的射中目标的方法

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4
 5 public class BulletSprite : MonoBehaviour
 6 {
 7
 8     public GameObject BulletBroke_Prefab;
 9     // Use this for initialization
10     private TankFire tankFire;
11
12     public TankFire TankFire
13     {
14         set
15         {
16             tankFire = value;
17         }
18     }
19
20     // Use this for initialization
21     void Start()
22     {
23
24     }
25
26     // Update is called once per frame
27     void Update()
28     {
29
30     }
31     private void OnCollisionEnter(Collision collision)
32     {
33         if (collision.gameObject.tag == "Enemy")
34         {
35             tankFire.ShotTarget(collision.gameObject.GetComponent<EnemySprite>().socre);
36
37         }
38         GameObject _bulletbroke = Instantiate(BulletBroke_Prefab, transform.position, transform.rotation);
39         Destroy(_bulletbroke, 3f);
40         Destroy(gameObject);
41     }
42 }

炮弹控制脚本

最后添加UGUI的Text文本。添加Score脚本组件

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 using UnityEngine.UI;
 5
 6 public class Score : MonoBehaviour
 7 {
 8
 9     private int scoreNum;
10
11     public int ScoreNum
12     {
13         set
14         {
15             scoreNum += value;
16         }
17     }
18
19     // Use this for initialization
20     void Start () {
21
22     }
23
24     // Update is called once per frame
25     void Update ()
26     {
27         ShowScore();
28     }
29
30     void ShowScore()
31     {
32         transform.GetComponent<Text>().text = "Score:"+scoreNum;
33     }
34 }

分数脚本控制

最总效果:

时间: 2024-12-14 19:42:37

简单第一人称射击游戏的相关文章

unity3d游戏开发之第一人称射击游戏

简介 这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS).其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思考的技巧. 前提 这个教程假定你已经熟悉软件Unity基本操作,掌握了基本的脚本概念. 创建新工程 下载FPS_Tutorial.zip压缩文件,解压,在Unity中打开工程文件. 从Unity安装目录导入Standard Assets资源包. 导入工程后,你会在Unity工程面板中的"Standard Assets"文件夹下看见这些资源内容

u3d5第一人称射击游戏(C#脚本)完整版并在iOS9.3系统上真机运行

参考资料:<Unity3D\2D手机游戏开发>(第二版) +   百度 涉及U3D的功能有:摄像机控制.物理.动画.智能寻路等. 开发工具:Unity3D5.3.4,VS2015,VMplayer12+MacOSX10.11+XCode7.3(我是Windos笔记本用的是苹果虚拟机,MAC真机不需要虚拟机,直接在appstore下载XCode最新版本就可以了,MAC最新版+Xcode最新版本可以直接真机调试运行)+OS9.3系统iphone 说一下U3D,想要在ios上调试的话就要在下载的时候

第一人称射击游戏总结概览

这个游戏小项目为第一人称射击游戏 大概分为几个步骤: 一:主角的制作 1.控制主角移动的实现 要点: character Controller组件的理解 rigidbody组件的理解 colider与rigidbody的理解 用代码控制主角的移动——键盘交互的实现 //操作主角移动 //定义3个值控制移动 float xm = 0, ym = 0, zm = 0; //上下左右运动 if (Input.GetKey(KeyCode.W)) { zm += m_movSpeed * Time.de

关于Unity中FPS第一人称射击类游戏制作(专题十)

当前Unity最新版本5.6.3f1,我使用的是5.5.1f1 FPS第一人称射击类游戏实例 场景搭建 1.创建Unity项目工程和文件目录,保存场景 2.导入人物模型和子弹碎片的资源包charactor.unitypackage(第74) 3.创建一个平面plane,X和Z拉长10倍,把主角模型Assets\Prefabs\person拉近Hierarchy视图中 4.把走路的声音Step.mp3,射击的声音Shot.mp3,平面贴图Ground.jpg,瞄准的准心贴图Crosshairs.p

使用Direct2D实现一个简单第一人称引擎

这篇文章是对"a first person engine in 265 lines"[1]的一个Direct2D版的移植.看到这篇文章我立刻就想到了QUAKE,当然QUAKE使用了比这个更高效的技术.但是这个技术无疑更简单,更娱乐,同时也算是一种RayCast原理的使用.于是就想到用Direct2D做一个看看. 由于对Html5不熟,同时参考了Fredrik Wallgren[2]. 同时也参考了MS提供的Direct2D事例[3]. 代码托管:https://d2dfpsengine

【原创游戏】迷踪失路——恐怖风格的第一人称迷宫游戏

--第一人称迷宫游戏,一个探险者落入迷宫隧道,他能否靠着仅有的提示走出迷宫? 继合金弹头S之后的练手小游戏. 虽然是恐怖风格但是没加入什么吓人的东西.下载地址:https://share.weiyun.com/f1ee03d5f58b3b721c3c97d2342a51f3 这大概是我创造的最快通关记录吧 O(∩_∩)O~ 原文地址:https://www.cnblogs.com/sols/p/8449331.html

使用Cocos2dx-JS开发一个飞行射击游戏

一.前言 笔者闲来无事,某天github闲逛,看到了游戏引擎的专题,引起了自己的兴趣,于是就自己捣腾了一下Cocos2dx-JS.由于是学习,所谓纸上得来终觉浅,只是看文档看sample看demo,并不会让自己有多大的提升,于是一开始就计划写一个小游戏,以作为自己完成这个阶段学习的一个标志,也算是目标导向吧.完整源码移步Github: https://github.com/RogerKang/JasonAmbitionOnline Demo: http://www.rogerkang.site:

【转】265行代码实现第一人称游戏引擎

原文:html5gamedev.org/?p=2383 总在有个自以为很先进的理念后不久就在网上找到别人的实现! 今天,让我们进入一个可以伸手触摸的世界吧.在这篇文章里,我们将从零开始快速完成一次第一人称探索.本文没有涉及复杂的数学计算,只用到了光线投射技术.你可能已经见识过这种技术了,比如<上古卷轴2 : 匕首雨>.<毁灭公爵3D>还有 Notch Persson 最近在 ludum dare 上的参赛作品.Notch 认为它够好,我就认为它够好! 用了光线投射就像开挂一样,作为

简单的射击游戏HTML+JS实现

一直想自己写一个游戏玩,时间和精力都不太允许,最近几天刚好有空闲时间,就琢磨了这个小游戏. 刚开始想着计算图片重叠事件,然后让炮弹和飞机消失,傻乎乎写了一天,越整越乱.今天一大早晕过来了,改用数组以后全部实现也就花了一个小时,有时候正确的方向真的比努力重要的多 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>射击游戏</title> <l