愉悦的寒假生活总是会猝不及防地迎来尾声,这也意味着我大一生活的进度条已经过半了。幸运的是,在我某位优秀的学长的带领下,我完整地开发出来了unity的官方案例噩梦射手并基本实现所有功能,也是让我这个大一的苟蒻积攒了不少的新知识。话不多说进入正题。

整个开发总结大体上我会分为这几几部分来写,分别是:游戏角色,怪物,gameManager,音效以及UI,可能会有所改动。

本篇就来讲解一下游戏中主角的功能实现以及脚本书写。

我们将下载好的资源包导入到unity工程中,由于案例太老,官方已经取消了该资源包的下载。下载途径是我在网上随便找i的。

https://pan.baidu.com/s/1bBUyYZArcL7HKnf1Hj2V0A 提取码: dk9y

所有的模型都是已经准备好了的,我们只需要利用组件以及脚本实现功能即可。对于主角,我们首先需要实现的功能有这几个:行走,攻击,受伤害时表现,死亡时表现.这些是最基本的东西,接下来我们来处理这些事。

对于角色的行走,老生常谈的事情了,再控制好相机的跟随,分别创建两个脚本playermovementcameraFollow来实现,这里的话我也就不再多讲,直接会在后面贴代码了。毕竟这些博客我的想法是重在整理新知识。值得一提的是,我在输入时利用的都是我学长自己开发的组件,所以有些地方可能会造成困惑。

而攻击功能呢,我们需要检测鼠标i的点击来控制角色是否开枪,同时还需要让我们的枪口,也就是我们的开枪的方向,要始终朝向我们鼠标所在的方向,这是功能需求。

这里我们首先需要预制一个游戏物体,作为我们开枪时发生出去的子弹,单独为其创建一个脚本叫做Bullet,来配置子弹的参数。具体代码如下:

public class Bullet : MonoBehaviour
{public int damage = 10;  //子弹伤害public float flySpeed = 100f; //飞行速度public float duration = 5f;  //子弹存在时间private Vector3 dir = Vector3.zero;  //飞行方向private bool isFire = false;public void Fire(Vector3 dir){this.dir = dir;  //确认方向isFire = true;Destroy(gameObject, duration);  //到时自动销毁}private void Update(){if (!isFire)return;transform.Translate(flySpeed * dir * Time.deltaTime);  //子弹的飞行} private void OnTriggerEnter(Collider other) //触发检测{EnemyBase enemy = null;if( other.TryGetComponent<EnemyBase>(out enemy)){enemy.GetDamage(damage);  //对怪物造成伤害}Destroy(gameObject);  //碰到怪物销毁子弹}
}

子弹预制体的inspector页面如下:

开枪功能的是实现,我们将其单独定义为一个脚本,叫做shoot,首先我们不应该将鼠标点击的检测设置为单次检测,很傻,体验感也很差,比较好的做法是在检测鼠标点击时采用连续检测,然后手动设置一个子弹生成速率,来控制我们在按下鼠标时子弹的发射频率。具体代码如下:

ublic class Shoot : MonoBehaviour
{public float rate = .2f;  //子弹生成速率public GameObject bulletPrefab;  //子弹预制体public Transform gunport;  //获取枪口的位置public AudioClip shootFx;  //音效(后面再说)private float timer = 0;  //计时器void Start(){timer = rate;  //在开始时先让计时器等于我们的速率,第一次按下直接发射子弹。}void Update(){if(PlayerInput .Instance .Shoot &&  timer >=rate)  //条件:判断到鼠标连续到鼠标连续点击并且计时器小于生成速率{GameObject bullet = Instantiate(bulletPrefab, gunport.position, Quaternion.identity);  //实例化子弹bullet.GetComponent<Bullet>().Fire(gunport.forward);  //调用子弹发射函数timer = 0;  //计时器归0AudioManager.Instance.PlayFx(shootFx, gunport.position);  //音效}timer += Time.deltaTime; //计时}
}

值得注意的是在上面两个脚本中,有用到的unity几个自带的函数方法。

1.   Destroy()函数:static void Destroy(Object obj, float t = 0.0F);

第一个参数是传入销毁物体,第二个参数是传入执行时间,没有该参数就是立刻销毁。

2.Transform.Translate()函数:

可传入两个参数,第一个是移动速度,这个速度既包含大小,也包含方向,是一个矢量,第二个参数是相对坐标系。详情可以移步这篇博客:http://t.csdn.cn/mipiC

3.Instantiate()函数:

实例化函数,也叫做克隆函数,具体可参考:http://t.csdn.cn/b5bAm

至此,我们角色的攻击的功能也就实现啦。脚本中包含的其他功能会在后面的博客再详细记录,大家如果有问题,也可以在评论区留言或者私信我,俺也是很热心的一个博主啦,那今天就先写到这吧,886~

Unity官方案例噩梦射手开发总结<一> 角色的攻击功能实现相关推荐

  1. Unity官方案例之星际航行游戏(Space Shooter)学习总结

    这几天我学习了<Unity官方案例精讲>的Space Shooter部分,这个案例作为刚刚学习Unity的入门还是不错的,这是整个案例的代码. 下面对我觉得比较常见的几个用法进行一下总结. ...

  2. Unity官方案例——Roll a ball

    现在的我还是一名 Unity3d 游戏开发初学者,所以现在都在围绕 Unity3d 的官方案例来做练习,为此写下一些文章作为笔记,文章中难免会有一些疏漏,有些不当之处还望指正. 项目简介 首先玩家可以 ...

  3. Unity官方案例同步学习-学习日记(一)

    内容简介和了解 首问:这是一款什么类型的游戏? 答曰:其实这是官方案例的Fps射击类游戏,比较偏向卡通风格,类似于"香肠派对"和"我的世界"结合的类型.大家在u ...

  4. Unity官方案例同步学习-学习日记(二)——敌人AI寻路思路设计和部分方法

    游戏中敌人AI的设计详解 主旨:承接上一篇文章player的续作,这边文章主要从代码上分析一个游戏中敌人AI的大部分的功能实现:以及游戏中在设计敌人时的思路和正确的方向,如有错误,希望每一个人都可以指 ...

  5. Unity官方案例-roll a ball

    通过学习: 1.将了解到如何新建一个游戏对象(game object) 2.为这些游戏对象添加组件(components) 3.为他们的属性(properties)赋值 4.把这些对象放置在场景(sc ...

  6. Unity官方案例学习——游戏设计理念(游戏的灵魂)

    何为游戏设计理念和游戏中的用户体验? 因为以前做的项目大多都是单一功能的完成,没太考虑设计的理念和用户体验,并且我做的大多是UI界面的实现,或者完成简单的数据添加等等,自己没有一套完整的项目经验:我们 ...

  7. (转自Unity官方)2D游戏开发套件指南

    2D游戏开发套件指南(上):https://mp.weixin.qq.com/s?__biz=MzUxOTAwNzA0MQ==&mid=2247484383&idx=1&sn= ...

  8. unity 官方案例之刚体控制人物移动

    人物的转动控制放在Update()函数里面.人物的移动跳跃操作则放在FixedUpdate()函数 旋转 人物的旋转可以通过 鼠标或者键盘进行操作,鼠标是轴Mouse X,键盘是轴Horizontal ...

  9. unity官方案例Stealth中 激光栅栏 忽明忽暗效果实现

    LaserBlinking脚本挂在激光栅栏上 public class LaserBlinking : MonoBehaviour {public float OnTime;//激光开多久public ...

最新文章

  1. 东南大学计算机科学试验中心,受迫振动试验数据处理的研究-东南大学物理试验中心.doc...
  2. linux如何生成so文件,新人问个问题,莫见笑:关于如何生成so文件,大家多多捧场啊...
  3. S/4HANA Adapt UI按钮的实现逻辑
  4. 数据结构之串:串的模式匹配
  5. java数据结构图_java总结数据结构和算法
  6. 【2022跨年】最浪漫的表白烟花,送给新的一年的自己(源码)
  7. 数据分析 - Kaggle TMDB 票房预测
  8. Horizontalscrollview
  9. Python 八大数据类型。
  10. Web:仿苹果官网首页HTML和CSS
  11. 南阳理工题目---218Dinner
  12. php 实现我的足迹,Wordpress 实现“您的足迹”功能
  13. excel中设置每行等高
  14. 基于layui和ThinkPHP6开发的通用后台管理框架
  15. Java核心机制(1)
  16. 早该把B站打回原形了
  17. 题解 P5265 【模板】多项式反三角函数
  18. 30天英语口语训练_笔记
  19. ibd文件结构组成(带图详解)
  20. Office共享(word,excel等)2021-09-21

热门文章

  1. 最新版本maven引发的血案
  2. OPPO find5(X909)Omni刷机包 原生安卓4.4.2 超流畅省电
  3. 视频教程-沐风老师3DMAX基础入门-3Dmax
  4. 树莓派清华镜像源“stretch”更换为“buster”,解决tensorflow、h5py安装包下载报错问题
  5. 一次控制文件control file sequential read 等待性能案例分析
  6. asm 多工 控制文件
  7. 整理:用matlab创作歌曲(三)
  8. MYSQL中概念模型的基本概念_数据库基本概念
  9. 基于Arduino Uno开发板的红外遥控开发
  10. ssh 远程报错 Permission denied, please try again.(密码输入正确也无法登录)