p=65 CloneSkill (克隆技能) ;类恶魔城Demo学习

p=65 CloneSkill (克隆技能) ;类恶魔城Demo学习

写的有点乱

思路:克隆一个就等于新建一个对象(Object)

实现:我们新建一个Object,加入动画和动画控制(把plyaer闲置攻击放进去)之类的。
然后保存的Prevap文件夹(等于预制,之后影分身几个,弄几个预制对象出来就好了)

在这里插入图片描述
先创建CloneSkill,再去SkillManager加入CloneSkill,CloneSkill有个变量是Object,放入我们要生成的克隆对象
在这里插入图片描述

前面未实现过程,成果看后面:

CloneSkill的代码(后面改进):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CloneSkill : Skill
{
    [SerializeField] private GameObject clonePrefab;
    public void CreateClone()
    {
    //将预制对象生成出来成为对象
        GameObject newClone = Instantiate(clonePrefab);
    }
}

查DeepSeek补充:Instantiate(prefabVariant)作用:支持生成Prefab Variant(继承父预制体但允许覆盖属性)

最后我们找到要生成克隆的地方(我感觉很多地方能用到,各种技能特效或者真分身),本节在Dash(DashState)原地会留下这用到克隆

一、增加克隆效果

问题:克隆体想在指定位置

正规点的流程:先将克隆体新加脚本,新加方法设置克隆体所在的值

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Clone_Skill_Controller : MonoBehaviour
{
    //这里的 transform是克隆体的,因为这个脚本放在克隆组件里
    //传入的值赋予克隆体
    public void SetupClone(Transform _newTransform)
    {
        transform.position = _newTransform.position;
    }
    
}

改进一下CloneSkill的代码(新加入 调用克隆脚本方法 )
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CloneSkill : Skill
{
    [SerializeField] private GameObject clonePrefab;
    public void CreateClone(Transform _clonePosition) 
    { 
        GameObject newClone = Instantiate(clonePrefab);

        newClone.GetComponent<Clone_Skill_Controller>().SetupClone(_clonePosition);    
    }
}

这里饶了一圈,主要是CloneController这传值改变位置,有了这个克隆可以生成在不同位置。不一定要在player位置。后续开发更方便

DashState代码 (新加)
    public override void Enter()
    {
        base.Enter();
        stateTimer = player.dashDuration;

        SkillManager.instance.clone.CreateClone(player.transform);
        
    }

二、克隆消失效果

思路:定义一个计时器(time)和颜色流失速度(float)。
调用SpriteRenderer的颜色方法,里面参数为:
sr.a - (计时器*颜色流失速度)    ,
则实现渐渐消失效果。

注:如果慢慢生成多个克隆,可使用协程(Coroutine) 结合 WaitForSeconds。然后调用多次cloneSkill
细节:StartCoroutine是MonoBehaviour类的成员方法,必须通过继承MonoBehaviour的类的实例调用
例子:

using UnityEngine;
using System.Collections;

public class RepeatAction : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(RepeatThreeTimes());
    }

    IEnumerator RepeatThreeTimes()
    {
        for (int i = 0; i < 3; i++)
        {
            // 执行你的操作(例如攻击、生成物体等)
            Debug.Log("执行操作,当前次数: " + (i + 1) + ",时间: " + Time.time);
            
            // 前两次执行后等待 1 秒,最后一次不等待
            if (i < 2)
            {
                yield return new WaitForSeconds(1f);
            }
        }
    }
}
### 恶魔城游戏的源代码获取 恶魔城游戏通常指的是具有横版卷轴、探索性强以及高难度战斗的游戏风格。如果希望找到似的开源项目或者学习如何开发这样的游戏,可以考虑以下几个方面: #### 开源项目的查找方式 可以通过一些知名的代码托管平台来寻找恶魔城游戏的开源实现。GitHub 是目前最常用的代码托管服务之一,在其中搜索关键词如 `Metroidvania` 或者 `Castlevania-like game` 可能会发现许多有价值的资源[^1]。 对于具体下载地址,由于网络环境变化频繁,建议直接访问 GitHub 并输入上述关键字进行检索。例如,“Metroidvania Game Engine” 就是一个基于 Godot 游戏引擎构建的例子[^2]。 另外还有 itch.io 这样的独立开发者社区也经常分享完整的项目文件供爱好者研究学习[^3]。 #### 使用特定框架简化开发过程 除了现成的完整作品外,还可以利用某些专为制作此游戏设计的技术栈来自行搭建原型。比如 Unity 和 Unreal Engine 都提供了丰富的插件支持;而像 Godot 则因为其轻量级特性和内置脚本语言 GDScript 更适合初学者快速上手创建简单的 Metroidvania 型产品[^4]。 下面展示一段基本的角色移动逻辑作为参考: ```csharp // C# Example for Unity using UnityEngine; public class PlayerMovement : MonoBehaviour { public float speed = 5f; void Update() { float moveHorizontal = Input.GetAxis("Horizontal"); Vector3 movement = new Vector3(moveHorizontal, 0.0f, 0.0f); transform.position += movement * Time.deltaTime * speed; } } ``` 请注意以上仅为演示目的编写的小片段,并未包含碰撞检测等功能模块[^5]。 #### 法律与版权注意事项 无论从何处获得代码素材,请务必确认该软件许可协议允许二次分发或商业用途等活动之前就擅自行动可能导致侵权风险【^6】。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值