本次游戏制作分为三个大的部分
(1)玩家制作
1.生命
2.攻击
3.死亡
4.移动
(2)敌人制作
1.生命
2.攻击
3.死亡
4.移动
5.自动寻路
(3)UI设计
1.分数显示
2.分数更新
3.子弹数量更新

(1)玩家制作
1.选中Ganmeobject——Creat Empty创建个空的游戏物体来作为玩家,Tag设置为Player
2.为其添加Character Controller(角色控制组件),可以实现在控制主角移动时与场景的碰撞产生交互;添加Rigibody组件,并取消Use Gravity去掉重力模拟,再选中 Is Kinematic 使其不受物理演算影响

3.创建脚本,初始化角色生命值并使其能进行移动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
//…获取游戏组件…
public Transform m_transform;
CharacterController m_ch;//角色控制组件
//…角色基本属性…
float m_movSpeed = 3.0f; //角色移动速度
float m_gravity = 2.0f; //重力
public int m_life = 5; //角色生命值
//…主角出现后需要实现的东西…
void Start()
{
m_transform = this.transform;
m_ch = this.GetComponent(); //获取角色控制器组件
}
// …事件…
void Update()
{
if (m_life <= 0) //如果生命值为0,则什么事都不做
return;
Control();
}
void Control()
{
//…控制主角移动代码…
float xm = 0, ym = 0, zm = 0; //定义三个值控制移动
ym -= m_gravity * Time.deltaTime; //重力运动
if (Input.GetKey(KeyCode.W)) //上下左右运动
{
zm += m_movSpeed * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.S))
{
zm -= m_movSpeed * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.A))
{
xm -= m_movSpeed * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.D))
{
xm += m_movSpeed * Time.deltaTime;
}
m_ch.Move(m_transform.TransformDirection(new Vector3(xm, ym, zm))); //使用角色控制器提供的Move函数进行移动,它会自动检测碰撞

}
//..........................在编辑器中为主角显示一个图标.........................
private void OnDrawGizmos()
{Gizmos.DrawIcon(this.transform.position, "Spawn.tif");
}

}

4.将摄像机与玩家关联起来
(1)现在Player脚本内添加如下代码
//摄像机所需参数
private Transform m_camTransform; //摄像机的Transform
Vector3 m_camRot; //摄像机的旋转角度
float m_camHeight=1.4f; //摄像机高度(玩家高度)
(2)修改Start,初始化摄像机的位置和旋转角度,并锁定鼠标
//…初始化摄像机的位置和旋转角度,并锁定鼠标…
m_camTransform = Camera.main.transform; //获取主摄像机
m_camTransform.position = m_transform.TransformPoint(0, m_camHeight, 0); //设置摄像机初始位置
m_camTransform.rotation = m_transform.rotation;
m_camRot = m_camTransform.eulerAngles; //设置摄像机的旋转方向与主角一致
(3)在control加入一下代码
//…设置旋转摄像机,使主角移动后摄像机的位置与主角保持一致…
float rh = Input.GetAxis(“Mouse X”);
float rv = Input.GetAxis(“Mouse Y”); //获取鼠标移动距离

    m_camRot.x -= rv;m_camRot.y += rh;m_camTransform.eulerAngles = m_camRot;    //旋转摄像机Vector3 camrot = m_camTransform.eulerAngles;camrot.x = 0;camrot.z = 0;m_transform.eulerAngles = camrot;          //使主角的面向方向与摄像机保持一致(控制主角移动代码下面)m_camTransform.position = m_transform.TransformPoint(0, m_camHeight, 0);//更新摄像机的位置

(4)此时玩家已经可以自由的行走了

第一人称射击游戏——总结1相关推荐

  1. UE4创建第一人称射击游戏学习教程

    Unreal Engine 4: Create Your Own First-Person Shooter MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言 ...

  2. UE4创建第一人称射击游戏学习教程 Unreal Engine 4: Create Your Own First-Person Shooter

    UE4创建第一人称射击游戏学习教程 本课程包含38节视频课,将逐步指导您完成以下主题: 云桥网络 平台获取课程! 如何创建6种可定制的武器(包括手枪.突击步枪.猎枪.狙击枪.榴弹发射器和火箭发射器) ...

  3. 【转】HTML5第一人称射击游戏发布

    [CSON原创]HTML5第一人称射击游戏发布 功能说明: 游戏中在躲避敌人攻击的同时,需要收集三种不同的钥匙,开启对应的门,最后到达目的地. 该游戏同样基于自己开发的HTML5游戏框架cnGameJ ...

  4. Unity VR学习:第一人称射击游戏(1)

    Unity VR学习:第一人称射击游戏(1) 1.封装标签和场景淡入淡出效果实现 (1) 封装标签 1.标签有Player,Enemy,GameController,Fader(画布),MainCam ...

  5. 【历史上的今天】12 月 10 日:世界上第一位程序员诞生;Ada 语言发布;第一人称射击游戏的开拓者

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 12 月 10 日,在 120 年前的今天,瑞典国王和挪威诺贝尔基金会首次颁发了诺贝尔奖.根据诺贝尔 ...

  6. 【UE4 第一人称射击游戏】12-全自动步枪并显示剩余弹药量

    上一篇: [UE4 第一人称射击游戏]11-武器跟随鼠标移动并添加开火音效 本篇效果: 步骤: 1.打开"Weapon_Base",添加一个整数类型,名为"Ammo&qu ...

  7. 【UE4 第一人称射击游戏】08-使用“AK47”发射子弹

    上一篇: [UE4 第一人称射击游戏]07-添加"AK47"武器 本节效果: 步骤: 1.在"Blueprints"文件夹内添加一个Actor蓝图,命名为&qu ...

  8. 【UE4 第一人称射击游戏】22-拾取弹药

    上一篇: [UE4 第一人称射击游戏]21-添加动态扩散准心 本篇效果: 当角色触碰到弹药箱后,玩家的后备弹夹就会多50发子弹,并且触碰到弹药箱后,会播放相应的声音和粒子特效. 步骤: 新建一个蓝图类 ...

  9. 【UE4 第一人称射击游戏】13-瞄准开火

    上一篇: [UE4 第一人称射击游戏]12-全自动步枪并显示剩余弹药量 本篇效果: 步骤: 1.打开"ThirdPersonCharacter",添加一个骨架网格体组件 将其作为M ...

  10. linux 射击 游戏,Ubuntu下安装第一人称射击游戏 Nexuiz 2.4.2(图)

    Ubuntu下安装第一人称射击游戏 Nexuiz 2.4.2(图) Nexuiz 是最流行的基于 DarkPlaces 引擎的开源第一人称射击游戏之一.经过漫长的开发旅程,在2008年05月11日,该 ...

最新文章

  1. JavaScript从内容中筛选出手机号码集合
  2. iOS12.1系统,nav自定义返回后,tabbar偏移问题记录
  3. php access ole相片,[求助]怎样读取ACCESS数据库中的OLE对象的图片啊???
  4. 找出数组中未出现的最小正整数
  5. jQuery 时间控件推荐(1)
  6. elasticsearch实现远程索引复制
  7. Stanford CoreNLP遇到的问题
  8. 写给初学者的话---linux使用说明
  9. Nature封面引发持续热议,死亡猪脑恢复部分功能可实现永生?官方答疑来了
  10. 耐思尼克的“建站宝盒”怎么样呀?
  11. 教你如何用机翻软件开拓自己的青青草原
  12. 【转】为VS2005安装STLport
  13. 浏览器处理 前台传递的+时出现问题
  14. 1024,今天给大家发100个现金红包和思否课程、掘金小册
  15. 万字长文带你回顾Java集合框架
  16. 使用addClass和removeClass完成内容切换
  17. 西北工业大学计算机学院推免,2021年西北工业大学接收推荐免试研究生预报名的通知...
  18. 35岁,成就寥寥,为时已晚?(I am 35 and I haven't achieved much in life. Is it too late?)...
  19. 从程序员到项目经理(十二):如何管理自己的时间(上)
  20. 教你如何做大学英语四级翻译题!!!英语四级翻译必备分类词汇和练习题以及模板

热门文章

  1. 网站如何增加百度收录
  2. Bootstrap 实例 2 中型大型设备
  3. 被花粉质疑Mate40系列品控 华为这张情怀牌还耐打吗?
  4. 数字化成熟度:迈出数字化转型的下一步
  5. Python拼接SQL字符串的方法
  6. seo SEO工具包
  7. 基于mlr3工具包的机器学习(1)——数据、模型、训练、预测
  8. ArcGIS Pro实现I3S城市白模更新
  9. mysql root用户被删除, 解决方法
  10. (转)史上最强Tomcat8性能优化