当前位置: 首页 > news >正文

『功能项目』技能释放【08】

我们打开上一篇07摄像机跟随角色的项目,

本章要做的事情是摄像机跟随主角移动,

首先创建一个空文件夹Resources

创建一个球体Shpere

修改球体缩放尺寸

创建一个材质Material

将材质重命名为Yellow,色板调至为黄色

将Yellow材质球拖拽至球体Shpere对象身上

设置一个新输入系统

拖拽一个攻击动画

连线

创建一个参数

设直线

创建脚本代码:MagicBall.cs

脚本绑定在Resources文件下的Sphere预制体

using UnityEngine;
public class MagicBall : MonoBehaviour{
    float speed = 10.0f;
    public float lifeTime = 2;
    float startTime;
    void Start(){
        transform.position = new Vector3(transform.position.x, 
            transform.position.y + 1f, transform.position.z);
        startTime = Time.time;
    }
    void Update(){
        transform.position += speed * transform.forward * Time.deltaTime;
        if (startTime + lifeTime < Time.time)
            Destroy(gameObject);
    }
    void OnTriggerEnter(Collider other){
        //稍后补充碰撞逻辑
    }
}
 

创建脚本:SkillRelease.cs

using UnityEngine;
using System.Collections;
public class SkillRelease : MonoBehaviour{
    GameObject prefabBall;
    float straightSkillCD = 0.2f;
    float sectorSkillCD = 0.5f;
    float lastShootTime;
    int curSkill { get; set; }
    void Awake(){
        prefabBall = Resources.Load<GameObject>("Sphere");
    }
    public void Release(bool keyDown, bool keyPressed){
        switch (curSkill){
            case 0:
                if (keyDown)
                    StartCoroutine(DelayedPistolFire(0.5f));
                break;
            case 1:
                if (keyDown)
                    StartCoroutine(DelayedShotgunFire(0.5f));
                break;
        }
    }
    public int Change(){
        curSkill += 1;
        if (curSkill == 3)
            curSkill = 0;
        return curSkill;
    }
    void StraightSkill(){
        if (lastShootTime + straightSkillCD > Time.time)
            return;
        lastShootTime = Time.time;
        GameObject sphere = Instantiate(prefabBall, null);
        sphere.transform.position = transform.position + transform.forward * 2.0f;
        sphere.transform.forward = transform.forward;
    }
    void SectorSkill(){
        if (lastShootTime + sectorSkillCD > Time.time)
            return;
        lastShootTime = Time.time;
        for (int i = -2; i <= 2; i++){
            GameObject sphere = Instantiate(prefabBall, null);
            Vector3 dir = Quaternion.Euler(0, i * 10, 0) * transform.forward;
            sphere.transform.position = transform.position + dir * 2.0f;
            sphere.transform.forward = dir;
            MagicBall ball = sphere.GetComponent<MagicBall>();
            ball.lifeTime = 1f;
        }
    }
    IEnumerator DelayedPistolFire(float delay){
        yield return new WaitForSeconds(delay);
        StraightSkill();
    }
    IEnumerator DelayedShotgunFire(float delay){
        yield return new WaitForSeconds(delay);
        SectorSkill();
    }
}
将代码绑定在主角常态身上

增加PlayerRayClickNavigation.cs脚本代码

运行项目即可实现按键盘F按键实现释放魔法弹效果,按键盘E键切换技能释放类型,再次按F键变为群体技能。

本篇只实现了摄像机跟随主角功能,接下来还需做以下内容:

1.怪物的生成

2.怪物UI信息(笼)

3.3D模型投射UI(UGUI)界面

4.坐骑在主角身旁召唤召回功能

5.异步传送功能

6.目标点巡航功能

7.动画事件

以及开放回合制、坐骑系统、宠物系统、背包系统、神炼系统、商城系统、Boss的目标跟随任务导航系统以及UI播放3D动画效果等等。

具体项目运行效果请关注water1024的b站视频项目演示《破碎纪元》

【Unity回合2.5D】破碎纪元_单机游戏热门视频 (bilibili.com)icon-default.png?t=N7T8https://www.bilibili.com/video/BV1rZY4e9Ebs/?spm_id_from=333.999.0.0

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微服务通信
  • SOMEIP_ETS_066: String_UTF8FIXED_too_short
  • 网络安全-防火墙安全策略初认识
  • ABB机器人accset指令运用
  • windows本地搭建zookeeper和kafka环境
  • Android fork 进程 process(init/Zygote/SystemServer)
  • 基于Java爬取微博数据(四) 获取 图片 or 视频
  • python手写了个简易的豆瓣影评爬虫
  • 【消息中间件】RabbitMQ
  • NC设计LFU缓存结构
  • 鸿蒙OS试题
  • three.js 着色器学习 聚集地
  • Ubuntu 20.04 源码编译安装OpenCV 4.5
  • stm32启动文件
  • 信贷业务流程优化与风控系统深度集成
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • js算法-归并排序(merge_sort)
  • leetcode讲解--894. All Possible Full Binary Trees
  • MySQL的数据类型
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python 基础起步 (十) 什么叫函数?
  • Vue.js 移动端适配之 vw 解决方案
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • windows下mongoDB的环境配置
  • Yeoman_Bower_Grunt
  • 两列自适应布局方案整理
  • 算法系列——算法入门之递归分而治之思想的实现
  • 通过调用文摘列表API获取文摘
  • #职场发展#其他
  • ${ }的特别功能
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (done) 两个矩阵 “相似” 是什么意思?
  • (function(){})()的分步解析
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (分布式缓存)Redis哨兵
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)appium-desktop定位元素原理
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)树状数组
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)(官方)UE4--图像编程----着色器开发
  • (转载)OpenStack Hacker养成指南
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .bat批处理(七):PC端从手机内复制文件到本地