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

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

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

本章要做的事情是主角按F按键释放技能,按E键切换技能类型的功能。

首先创建一个空文件夹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


http://www.mrgr.cn/news/11644.html

相关文章:

  • 三种通过代码创建矢量文件的方法及例子
  • helm安装jenkins保姆级别
  • 【HTML】模拟二级菜单【附源代码】
  • day-41 零钱兑换
  • 【原创教程】电气制图01:启航EPLAN电气设计
  • 服务器机房与数据中心的区别?
  • 【ORACLE】如何使用EXPLAIN PLAN来分析 listagg() 函数的性能瓶颈?
  • 力扣1862.向下取整数对和
  • layui栅格布局设置列间距不起作用
  • DRF——Filter条件搜索模块
  • 在银河麒麟服务器V10上源码编译安装mysql-5.7.42-linux-glibc2.12-x86_64
  • 【Linux】冯诺依曼体系|操作系统概念
  • 前端技巧——iframe + postMessage进行页面通信
  • ECMAScript 6 基础
  • 什么是数据分析,企业数据分析的流程是什么?
  • IO进程线程 0827作业
  • 计算机网络-2-tcpip协议
  • npm阿里云制品仓库
  • 【笛卡尔积】深入理解笛卡尔积及其在SQL中的应用
  • React多功能管理平台项目开发全教程