學習游戲制作記錄(凍結敵人時間與黑洞技能)7.30

1.實現劍擊中敵人時凍結敵人時間

Enemy腳本:


public float defaultMoveSpeed;//默認速度

defaultMoveSpeed = moveSpeed;//Awake()中設置

? ? public virtual void FreezeTime(bool _timeFreeze)//凍結設置函數
{
if (_timeFreeze)
{
moveSpeed = 0;
anim.speed = 0;
}

? ? ? ? else
{
moveSpeed = defaultMoveSpeed;
anim.speed = 1;
}
}

? ? protected virtual IEnumerator FreezeTimeFor(float _seconds)//凍結協程
{
FreezeTime(true);

? ? ? ? yield return new WaitForSeconds(_seconds);

? ? ? ? FreezeTime(false);//解除凍結

? ? }

Sword_Skill腳本:

? ? [Header("FreezeTime info")]
[SerializeField] private float freezeTimeDuration;//凍結時間

newSkillScript.SetupSword(finalDir, swordGravity, player,freezeTimeDuration);//設置

Sword_Skill_Control腳本:

? ? [Header("FreezeTime info")]
private float freezeTimeDuration;//接受傳入的凍結時間

?if(collision.GetComponent<Enemy>() != null)//觸發器函數中調用
{
Enemy enemy = collision.GetComponent<Enemy>();
enemy.Damage();//將這兩句提取為SwordSkillDamage方法,方便調用
enemy.StartCoroutine("FreezeTimeFor", freezeTimeDuration);//啟用協程

?}

SwordSkillDamage(enemyTarget[enemyIndex].GetComponent<Enemy>());//彈跳邏輯函數中

?SwordSkillDamage(hit.GetComponent<Enemy>());//旋轉邏輯函數中

2.實現劍超過一定時間會自行銷毀

Sword_Skill_Control腳本:

? ? public void DestroyMe()//自毀函數
{
Destroy(gameObject);
}

Invoke("DestroyMe", 7f);//7秒后自毀,SetupSword調用

3.實現在技能管理器中設置返回速度和彈跳速度(其它類似)

Sword_Skill_Control腳本:


returnSpeed = _returnSpeed;

bouncingSpeed= _BounceSpeed;//在各自的設置函數里添加

Sword_Skill腳本:
[SerializeField] private float bounceSpeed;

[SerializeField] private float returnSpeed;//可以直接修改

?newSkillScript.SetupSword(finalDir, swordGravity, player,freezeTimeDuration,returnSpeed);

newSkillScript.SetupBounce(true, bounceAmount,bounceSpeed);//傳入參數

4.實現黑洞與快速時間事件

當釋放黑洞技能時,會創建一個隨時間增大的圓形物體,它會檢測圓內的所有敵人并凍結敵人時間,并且在每個敵人頭上會生成一個快捷預制按鍵,當玩家按下按鍵時會調用函數將相應的敵人添加到一個未來的目標列表中,當所有按鍵都被按下或者時間耗盡時,我們會在目標列表敵人處創建一個克隆攻擊。

實現黑洞的增大與敵人列表獲取

準備好Blackhole_Skill_Control腳本和圓形對象(添加碰撞器并勾選觸發器):

? ? public float maxSize;//最大尺寸
public float growSpeed;//變化速度
public bool canGrow;//是否可以變大

? ? public List<Transform> EnemyTarget;//獲取的敵人
private void Update()
{
if (canGrow)
{
transform.localScale=Vector2.Lerp(transform.localScale,new Vector2(maxSize, maxSize),growSpeed*Time.deltaTime);//Lerp是緩慢變化,變化transform的規模
}

? ? ? ?
}

? ? private void OnTriggerEnter2D(Collider2D collision)//觸發器函數
{
if(collision.GetComponent<Enemy>() != null)
{
EnemyTarget.Add(collision.GetComponent<Enemy>().transform);
}
}

實現黑洞中敵人的凍結和敵人頭頂預制快捷鍵的生成

Blackhole_Skill_Control腳本:

? ? ? ? if(collision.GetComponent<Enemy>() != null)
{
collision.GetComponent<Enemy>().FreezeTime(true);//直接調用凍結函數
}

安裝TextMeshPro

創建一個黑色方塊對象,添加ui文字

設置黑色背景

畫布設置,調整大小

文本設置,記得居中

最終效果:

創建Blackhole_HotKey_Control腳本掛載在上面的對象:

? ? private KeyCode myhotKey;//我的預制鍵
private TextMeshProUGUI myText;//文本

? ? public void SetupHotKey(KeyCode _mynewhotKey)//觸發器里會調用它
{
myText = GetComponentInChildren<TextMeshProUGUI>();

? ? ? ? myhotKey = _mynewhotKey;
myText.text =_mynewhotKey.ToString();//修改文本
}

? ? public void Update()
{
if(Input.GetKeyUp(myhotKey)) //調試
{
Debug.Log("i enter"+ myhotKey.ToString());

? ? ? ? }
}

Blackhole_Skill_Control腳本:

? ? [SerializeField] private GameObject hotKeyPrefab;//按鍵預制體
[SerializeField] private List<KeyCode> KeyCodeList;//鍵的列表,自行添加

? ? private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.GetComponent<Enemy>() != null)
{
collision.GetComponent<Enemy>().FreezeTime(true);//可以把下面的代碼提取方法為CreateHotKey()

???????if(KeyCodeList.Count<=0)
{
return;
}

? ? ? ? ? ? GameObject newhotKey= Instantiate(hotKeyPrefab,collision.transform.position+new Vector3(0,2),Quaternion.identity);//在敵人頭上創建預制鍵

? ? ? ? ? ? KeyCode chooseKey = KeyCodeList[Random.Range(0,KeyCodeList.Count)];//隨機選擇一個鍵碼


? ? ? ? ? ? KeyCodeList.Remove(chooseKey);//選擇后移除防止重復

? ? ? ? ? ? Blackhole_HotKey_Control newhotKeyScript=newhotKey.GetComponent<Blackhole_HotKey_Control>();

? ? ? ? ? ? newhotKeyScript.SetupHotKey(chooseKey);//設置鍵碼
}
}

}

演示:

實現按下相應按鍵將敵人添加到列表中并且使按鍵不可見:

Blackhole_Skill_Control腳本:

?private List<Transform> EnemyTarget=new List<Transform>();

?newhotKeyScript.SetupHotKey(chooseKey, collision.transform, this);//傳入參數

public void AddEnemyToList(Transform _enemyTransform) => EnemyTarget.Add(_enemyTransform);//添加列表函數

Blackhole_HotKey_Control腳本:

private SpriteRenderer sr;

private Transform myEnemy;//每個按鍵對應的敵人
private Blackhole_Skill_Control Blackhole;//按鍵對應的黑洞

? ? public void SetupHotKey(KeyCode _mynewhotKey,Transform _myEnemy,Blackhole_Skill_Control _Blackhole)//重新初始化
{
myText = GetComponentInChildren<TextMeshProUGUI>();

? ? ? ? myhotKey = _mynewhotKey;
myText.text =_mynewhotKey.ToString();

? ? ? ? myEnemy = _myEnemy;
Blackhole = _Blackhole;
}

? ? public void Update()
{
if(Input.GetKeyUp(myhotKey))?
{
Blackhole.AddEnemyToList(myEnemy);//添加到列表

? ? ? ? ? ? myText.color = Color.clear;//設置透明
sr.color = Color.clear;
}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91266.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據結構】真題 2016

待補充已知表頭元素為c的單鏈表在內存中的存儲狀態如下表所示地址元素鏈接地址1000Ha1010H1004Hb100CH1008Hc1000H100CHdNULL1010He1004H1014H現將f存放于1014H處并插入到單鏈表中&#xff0c;若f在邏輯上位于a和e之間&#xff0c;則a, e, f的“鏈接地址”依次是&#xff08; &…

雙線串行的 “跨界對話”:I2C 與 MDIO 的異同解析

在電子系統設計中,串行總線憑借其精簡的信號線數量和靈活的拓撲結構,成為芯片間通信的主流選擇。I2C(Inter-Integrated Circuit)和 MDIO(Management Data Input/Output)作為兩種典型的雙線串行總線,雖同屬低速信號范疇,卻在各自的應用領域扮演著不可替代的角色。本文將…

算法精講:二分查找(二)—— 變形技巧

&#x1f3af; 算法精講&#xff1a;二分查找&#xff08;二&#xff09;—— 變形技巧 &#x1f50d; 友情提示&#xff1a;&#xff1a;本小節含高能代碼片段 &#x1f964; 閱讀前請確保已掌握基礎二分原理與實現代碼片段可能包含不同程度的變形&#xff0c;請根據實際情況選…

兩個程序配合實現了基于共享內存和信號量的進程間通信,具體說明如下:

第一個程序&#xff1a;共享內存讀取程序&#xff08;消費者&#xff09;該程序作為消費者&#xff0c;從共享內存中讀取數據&#xff0c;通過信號量保證只有當生產者寫入數據后才能讀取。/*4 - 讀共享內存*/ #include<stdio.h> // 標準輸入輸出庫 #inc…

JeecgBoot(1):前后臺環境搭建

1 項目介紹 JeecgBoot 是一款基于 Java 的 AI 低代碼平臺&#xff0c;它采用了 SpringBoot、SpringCloud、Ant Design Vue3、Mybatis 等技術棧&#xff0c;并集成了代碼生成器、AI 對話助手、AI 建表、AI 寫文章等功能。JeecgBoot 的設計宗旨是實現簡單功能零代碼開發&#xf…

Nestjs框架: 關于 OOP / FP / FRP 編程

概述 在軟件開發過程中&#xff0c;不同的編程范式為我們提供了多樣化的思維方式與實現路徑它們不僅影響著代碼的結構和邏輯組織方式&#xff0c;也深刻影響著項目的可維護性、可擴展性以及團隊協作效率 什么是 OOP、FP 和 FRP&#xff1f;首先從三個術語的含義入手 1 &#xf…

elememtor 添加分頁功能

各位看官好&#xff0c;最近在忙著使用elementor搭建自己的網站&#xff0c;由于我不是專業的程序員和前端&#xff0c;又沒有很多錢去找外包公司實現自己的設計&#xff0c;所以選擇了elementor. 總的來說這是一個不錯的wordpress 插件&#xff0c;也讓我們這種非專業的網站設…

關于“PromptPilot” 之2 -目標系統:Prompt構造器

目標系統&#xff1a;Prompt構造器想法首先&#xff0c;在抽象層對PromptPilot進行封裝給出提示詞形成過程的全部環節。然后&#xff0c;在 形成一套確定的提示詞后再為 小規模試點方案生成一整套開發工具并配套集成開發環境和指南。最后&#xff0c;在小規模試點成功后進行拓展…

短劇小程序系統開發:重塑影視內容消費格局

在數字化浪潮的推動下&#xff0c;影視內容消費正經歷著深刻的變革。短劇小程序系統開發作為這一變革的重要力量&#xff0c;正在重塑影視內容消費的格局&#xff0c;為用戶帶來更加個性化、便捷化的觀影體驗。傳統影視內容消費往往受到時間和空間的限制&#xff0c;用戶需要前…

一文掌握最新版本Monocle3單細胞軌跡(擬時序)分析

許多大佬的軟件想要構建一個大而美的生態&#xff0c;從 monocle2 開始就能做單細胞的質控、降維、分群、注釋這一系列的分析&#xff0c;但不幸的是我們只知道 monocle 系列還是主要做擬時序分析&#xff0c;一方面是因為 Seurat 有先發優勢&#xff0c;出名要趁早&#xff0c…

spark入門-helloword

我們學習編程語言的時候&#xff0c;第一個程序就是打印一下 “hello world” &#xff0c;對于大數據領域的第一個任務則是wordcount。那我們就開始我們的第一個spark任務吧&#xff01; 下載spark 官方下載地址&#xff1a;Apache Download Mirrors 下載完畢以后&#xff0c…

雷達系統設計學習:自制6GHz FMCW Radar

國外大神自制6GHZ FMCW Radar開源項目: https://github.com/Ttl/fmcw3 引言 之前我做過一個簡單的調頻連續波&#xff08;FMCW&#xff09;雷達&#xff0c;能夠探測到100米范圍內人體大小的物體。雖然它確實能用&#xff0c;但由于預算有限&#xff0c;還有很大的改進空間。 …

系統選擇菜單(ubuntu grub)介紹

好的&#xff0c;我們來詳細解釋一下什么是Ubuntu的GRUB菜單。 簡單來說&#xff0c;GRUB菜單是您電腦啟動時看到的第一個交互界面&#xff0c;它就像一個“系統選擇”菜單&#xff0c;讓您決定接下來要啟動哪個操作系統或進入哪種模式。詳細解釋 1. GRUB是什么&#xff1f; GR…

方案C,version2

實現一個簡單的Helloworld網頁,并通過GitHub Actions自動構建并推送到公開倉庫的gh-pages分支。同時,使用PAT進行認證,確保源碼在私有倉庫中,構建后的靜態文件在公開倉庫中。 重新設計deploy.yml內容如下(針對純靜態文件,無需構建過程): 步驟: 檢出私有倉庫源碼。 由于…

R 語言科研繪圖 --- 其他繪圖-匯總1

在發表科研論文的過程中&#xff0c;科研繪圖是必不可少的&#xff0c;一張好看的圖形會是文章很大的加分項。 為了便于使用&#xff0c;本系列文章介紹的所有繪圖都已收錄到了 sciRplot 項目中&#xff0c;獲取方式&#xff1a; R 語言科研繪圖模板 --- sciRplothttps://mp.…

webpack 原理及使用

【點贊收藏加關注,前端技術不迷路~】 一、webpack基礎 1.核心概念 1)entry:定義入口,webpack構建的第一步 module.exports ={entry:./src/xxx.js } 2)output:出口(輸出) 3)loader:模塊加載器,用戶將模塊的原內容按照需求加載成新內容 比如文本加載器raw-loade…

「日拱一碼」039 機器學習-訓練時間VS精確度

目錄 時間-精度權衡曲線&#xff08;不同模型復雜度&#xff09; 訓練與驗證損失對比 帕累托前沿分析&#xff08;3D&#xff09; 在機器學習實踐中&#xff0c;理解模型收斂所需時間及其與精度的關系至關重要。下面介紹如何分析模型收斂時間與精度之間的權衡&#xff0c;并…

面試刷題平臺項目總結

項目簡介&#xff1a; 面試刷題平臺是一款基于 Spring Boot Redis MySQL Elasticsearch 的 面試刷題平臺&#xff0c;運用 Druid HotKey Sa-Token Sentinel 提高了系統的性能和安全性。 第一階段&#xff0c;開發基礎的刷題平臺&#xff0c;帶大家熟悉項目開發流程&#xff…

負載均衡、算法/策略

負載均衡一、負載均衡層級對比特性四層負載均衡 (L4)七層負載均衡 (L7)工作層級傳輸層 (TCP/UDP)應用層 (HTTP/HTTPS等)決策依據源/目標IP端口URL路徑、Header、Cookie、內容等轉發方式IP地址/端口替換重建連接并深度解析報文性能更高吞吐量&#xff0c;更低延遲需內容解析&…

StackingClassifier參數詳解與示例

StackingClassifier參數詳解與示例 StackingClassifier是一種集成學習方法&#xff0c;通過組合多個基分類器的預測結果作為元分類器的輸入特征&#xff0c;從而提高整體模型性能。以下是關鍵參數的詳細說明和示例&#xff1a; 1. classifiers&#xff08;基分類器&#xff09;…