【Unity基礎】Unity新手實戰教程:用ScriptableObject控制Cube顏色

目錄

    • 項目概述
    • 🛠? 完整操作步驟(10分鐘內完成)
      • 步驟1:創建ScriptableObject類
      • 步驟2:創建顏色配置資產
      • 步驟3:創建Cube控制器
      • 步驟4:設置場景和Cube
      • 步驟5:添加簡單UI提示
      • 步驟6:添加材質自發光支持
    • 🎮 測試你的系統
    • 💡 核心概念解析
      • ScriptableObject是什么?
      • 為什么使用ScriptableObject?
      • 關鍵代碼解析
    • 🚀 擴展練習
      • 擴展1:添加旋轉效果
      • 擴展2:創建隨機顏色按鈕
      • 擴展3:添加大小變化
    • 📚 實際應用場景
    • 💎 總結

在這里插入圖片描述

本教程將帶你創建一個簡單的Unity項目,使用ScriptableObject來控制Cube的顏色變化。這個示例非常適合Unity新手,只需要基本的Cube對象即可實現。

項目概述

我們將創建一個顏色配置系統:

  • 創建多個顏色配置(紅、藍、綠)
  • 將配置應用到Cube上
  • 實現按鍵切換不同顏色
  • 添加簡單的顏色動畫效果

🛠? 完整操作步驟(10分鐘內完成)

步驟1:創建ScriptableObject類

  1. 在Unity中新建項目(選擇3D模板)
  2. 在Project窗口右鍵 → Create → Folder,命名為"Scripts"
  3. 在Scripts文件夾中右鍵 → Create → C# Script
  4. 命名為"ColorConfig"
  5. 雙擊打開并替換為以下代碼:
using UnityEngine;// 創建資源菜單項
[CreateAssetMenu(fileName = "NewColor", menuName = "Cube/Color Config")]
public class ColorConfig : ScriptableObject
{[Header("顏色設置")]public Color cubeColor = Color.white;  // 基礎顏色public Color emissionColor = Color.black; // 自發光顏色[Header("動畫效果")]public float pulseSpeed = 1f; // 脈動速度public float maxIntensity = 2f; // 最大發光強度[Header("描述")]public string colorName; // 顏色名稱[TextArea] public string description; // 描述文本
}

步驟2:創建顏色配置資產

  1. 在Project窗口中右鍵 → Create → Cube/Color Config

  2. 將新資產命名為"RedColor"

  3. 在Inspector中配置:

    • Cube Color: 紅色 (255, 0, 0)
    • Emission Color: 深紅 (100, 0, 0)
    • Pulse Speed: 2
    • Max Intensity: 3
    • Color Name: 熱情紅
    • Description: 充滿活力的紅色
  4. 同樣方式創建另外兩個配置:

    • BlueColor
      • Cube Color: 藍色 (0, 100, 255)
      • Emission Color: 深藍 (0, 0, 100)
      • Pulse Speed: 1.5
      • Max Intensity: 2.5
      • Color Name: 寧靜藍
    • GreenColor
      • Cube Color: 綠色 (0, 255, 100)
      • Emission Color: 深綠 (0, 100, 0)
      • Pulse Speed: 1
      • Max Intensity: 2
      • Color Name: 自然綠

步驟3:創建Cube控制器

  1. 在Scripts文件夾創建新C#腳本,命名為"CubeController"
  2. 替換為以下代碼:
using UnityEngine;public class CubeController : MonoBehaviour
{[Header("顏色配置")]public ColorConfig colorConfig;private Material cubeMaterial;private float pulseTimer;void Start(){// 獲取Cube的材質cubeMaterial = GetComponent<Renderer>().material;// 啟用自發光cubeMaterial.EnableKeyword("_EMISSION");// 應用初始顏色配置ApplyColorConfig();}void Update(){// 應用脈動效果if (colorConfig != null && colorConfig.pulseSpeed > 0){pulseTimer += Time.deltaTime * colorConfig.pulseSpeed;float intensity = Mathf.Abs(Mathf.Sin(pulseTimer)) * colorConfig.maxIntensity;cubeMaterial.SetColor("_EmissionColor", colorConfig.emissionColor * intensity);}// 按鍵切換顏色if (Input.GetKeyDown(KeyCode.Alpha1)) SetColorConfig("RedColor");if (Input.GetKeyDown(KeyCode.Alpha2)) SetColorConfig("BlueColor");if (Input.GetKeyDown(KeyCode.Alpha3)) SetColorConfig("GreenColor");}// 應用顏色配置public void ApplyColorConfig(){if (colorConfig == null) return;cubeMaterial.color = colorConfig.cubeColor;cubeMaterial.SetColor("_EmissionColor", colorConfig.emissionColor);Debug.Log($"應用顏色配置: {colorConfig.colorName}");}// 通過名稱設置顏色配置public void SetColorConfig(string configName){// 加載ScriptableObject資源ColorConfig newConfig = Resources.Load<ColorConfig>($"ColorConfigs/{configName}");if (newConfig != null){colorConfig = newConfig;ApplyColorConfig();}else{Debug.LogWarning($"找不到顏色配置: {configName}");}}
}

步驟4:設置場景和Cube

  1. 創建新文件夾:Resources/ColorConfigs
  2. 將之前創建的三個顏色配置拖到ColorConfigs文件夾
  3. 在場景中創建Cube:
    • GameObject → 3D Object → Cube
    • 重命名為"ColorCube"
  4. 將CubeController腳本拖到Cube上
  5. 在Inspector中將RedColor配置拖到CubeController的Color Config字段

步驟5:添加簡單UI提示

  1. 創建UI:GameObject → UI → Canvas
  2. 創建文本:右鍵Canvas → UI → Text
  3. 設置文本內容:
按數字鍵切換Cube顏色:
1 - 紅色
2 - 藍色
3 - 綠色
  1. 調整文本位置和大小(建議使用Anchor設置為底部居中)

步驟6:添加材質自發光支持

  1. 選擇Cube
  2. 在Inspector中找到Material
  3. 確保材質勾選了"Emission"選項
  4. 如果沒有,創建一個新材質:
    • 右鍵Project窗口 → Create → Material
    • 命名為"GlowMaterial"
    • 勾選Emission
    • 拖到Cube上

🎮 測試你的系統

  1. 點擊Play按鈕運行場景
  2. 觀察Cube顯示為紅色并脈動
  3. 按鍵盤數字鍵:
    • 按1:切換到紅色
    • 按2:切換到藍色
    • 按3:切換到綠色
  4. 觀察效果:
    • 每種顏色有不同的基礎色和自發光
    • 脈動速度各不相同
    • 控制臺顯示當前顏色名稱

💡 核心概念解析

ScriptableObject是什么?

  • 數據容器:存儲游戲配置和設置
  • 獨立資源:保存在項目文件中(.asset格式)
  • 可復用:多個對象可共享同一配置
  • 編輯器友好:設計師可直接編輯數值

為什么使用ScriptableObject?

場景傳統方法ScriptableObject方法
顏色配置在腳本中硬編碼顏色值創建可編輯的顏色資產
修改配置需要修改代碼并重新編譯直接在Inspector中調整
多對象共享每個對象單獨設置多個Cube共享同一配置
團隊協作程序員需要設置所有參數設計師可自主創建配置

關鍵代碼解析

// 創建資源菜單
[CreateAssetMenu(fileName = "NewColor", menuName = "Cube/Color Config")]
public class ColorConfig : ScriptableObject
{// 可配置屬性public Color cubeColor;// ...其他屬性
}
// 應用配置
public void ApplyColorConfig()
{cubeMaterial.color = colorConfig.cubeColor;// ...應用其他設置
}
// 動態加載配置
ColorConfig newConfig = Resources.Load<ColorConfig>($"ColorConfigs/{configName}");

🚀 擴展練習

學會了基礎操作后,嘗試以下擴展:

擴展1:添加旋轉效果

  1. 在ColorConfig中添加旋轉速度屬性:
public Vector3 rotationSpeed; // 旋轉速度
  1. 在CubeController的Update中添加:
transform.Rotate(colorConfig.rotationSpeed * Time.deltaTime);
  1. 為每個顏色配置設置不同的旋轉速度

擴展2:創建隨機顏色按鈕

  1. 在UI中添加按鈕
  2. 創建新方法:
public void SetRandomColor()
{ColorConfig[] allColors = Resources.LoadAll<ColorConfig>("ColorConfigs");if (allColors.Length > 0){colorConfig = allColors[Random.Range(0, allColors.Length)];ApplyColorConfig();}
}

擴展3:添加大小變化

  1. 在ColorConfig中添加:
public Vector3 cubeScale = Vector3.one; // Cube大小
  1. 在ApplyColorConfig中添加:
transform.localScale = colorConfig.cubeScale;

📚 實際應用場景

ScriptableObject在游戲開發中用途廣泛:

  1. 敵人屬性:不同敵人類型的血量、速度、傷害
  2. 武器系統:槍械的射速、傷害、后坐力
  3. 技能配置:冷卻時間、效果強度、持續時間
  4. 游戲設置:難度級別、控制靈敏度
  5. 對話系統:NPC對話內容和選項

💎 總結

通過本教程,你學會了:

  • 創建和使用ScriptableObject的基本流程
  • 通過ScriptableObject分離數據和邏輯
  • 動態加載和應用不同配置
  • 創建簡單的顏色動畫效果
  • 實現按鍵切換配置功能

ScriptableObject是Unity中提升工作效率的強大工具,它讓游戲配置變得靈活可調,是每個Unity開發者都應該掌握的核心技能!

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

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

相關文章

One Year~

入局 作為科班學生&#xff0c;沒事就在CSDN閑逛&#xff0c;只作為旁觀者的身份去體會別人的好文。當時也沒想著說去自己寫一些博客記錄學習過程。相信大多數同學和我有一樣的心理。 但在看魚皮哥的課程時&#xff0c;發現他有著寫文檔和博客的習慣&#xff0c;整理自己的思路…

【Redis】第3節|深入理解Redis線程模型

一、Redis基礎認知 &#xff08;一&#xff09;定義與定位 Redis&#xff08;Remote Dictionary Server&#xff09;是開源高性能鍵值數據庫&#xff0c;核心特點如下&#xff1a; 數據結構豐富&#xff1a;支持字符串、哈希、列表、集合、有序集合等復雜數據類型&#xff0…

vben-admin 2.8.0 版本修改 axios響應處理邏輯

此前端框架下的 Axios 在后端返回的結果老是無法正常解析&#xff0c;找到他源碼的封裝類&#xff0c;修正這個問題 文件位于 src\utils\http\axios\index.ts 修改前 transformResponseHook: (res: AxiosResponse<Result>, options: RequestOptions) > {const { t }…

深入理解JavaScript設計模式之原型模式

目錄 前言引入原型模式頭腦風暴傳統方式 vs 原型模式實戰案例&#xff1a;飛機大戰中的分身術 原型模式實現的關鍵秘密實戰演練&#xff1a;造一架能分身的飛機克隆是創建對象的手段原型模式&#xff1a;輕裝上陣的造物術 原型編程范型的一些規則原型編程的四大門規&#xff1a…

【數據庫】概述(純理論)

數據庫系統引論 數據管理系統的發展 數據管理&#xff1a;對數據分類、組織、編碼、存儲、檢索、維護 發展&#xff1a;人工管理、文件系統、數據庫系統 40-50年代 人工管理 數據不保存&#xff0c;沒有專門軟件管理數據&#xff0c;應用程序完全依賴于數據&#xff0c;數據…

語音合成之十七 語音合成(TTS)中文自然度:問題、成因、解決方案

語音合成&#xff08;TTS&#xff09;中文自然度&#xff1a;問題、成因、解決方案 中文TTS系統基本架構中文TTS常見問題深度剖析與解決方案音色跳變成因分析解決方案 聲調與重讀錯誤成因分析業界解決方案 漏讀與斷句錯誤成因分析業界解決方案 在跨語言TTS系統比較中&#xff0…

我在 Linux 進程管理中踩過的坑:僵尸、瞬時與不可中斷進程實戰實錄

作為運維老鳥&#xff0c;我曾在 Linux 進程管理上栽過不少跟頭。記得第一次遇到滿屏僵尸進程時&#xff0c;服務器直接卡到連 SSH 都登不上&#xff0c;看著ps命令里一排排刺眼的Z狀態進程&#xff0c;手心直冒冷汗。后來又碰到過瞬時進程搞崩日志系統&#xff0c;明明監控顯示…

【設計模式】簡單工廠模式,工廠模式,抽象工廠模式,單例,代理,go案例區分總結

工廠模式三種類型&#xff1a; 一、簡單工廠模式&#xff08;Simple Factory&#xff09; 定義&#xff1a; 用一個工廠類&#xff0c;根據傳入的參數決定創建哪一種具體產品類實例。 面試說法&#xff1a; 由一個統一的工廠創建所有對象&#xff0c;增加新產品時需要修改工…

某標桿房企BI平臺2.0升級實踐

當房地產行業從“規模競賽”轉向“精益運營”&#xff0c;數字化轉型成為破局關鍵。某千億房企攜手億信華辰&#xff0c;以“用數據重構業務價值鏈”為目標&#xff0c;歷經6個月完成BI平臺戰略性升級。在這場從“數據可視化”到“決策智能化”的躍遷中&#xff0c;億信華辰ABI…

Lua 腳本在 Redis 中的運用-24 (使用 Lua 腳本實現原子計數器)

實踐練習:使用 Lua 腳本實現原子計數器 實現原子計數器是許多應用程序中的常見需求,例如跟蹤網站訪問量、限制 API 請求或管理庫存。雖然 Redis 提供了 INCR 命令用于遞增整數,但在復雜場景或與其他操作結合時直接使用它可能并不足夠。本課程探討了如何在 Redis 中利用 Lua…

Rust 學習筆記:使用迭代器改進 minigrep

Rust 學習筆記&#xff1a;使用迭代器改進 minigrep Rust 學習筆記&#xff1a;使用迭代器改進 minigrep不使用 clone&#xff0c;而使用迭代器使用迭代器適配器使代碼更清晰在循環或迭代器之間進行選擇 Rust 學習筆記&#xff1a;使用迭代器改進 minigrep 前情提要&#xff1…

el-table配置表頭固定而且高度變化

根據官網提示只要在 el-table 元素中定義了 height 屬性&#xff0c;即可實現固定表頭的表格&#xff0c;而不需要額外的代碼。 如果你想既要固定表頭&#xff0c;又要下方表格高度自適應&#xff0c;可以設置為 height"100%" &#xff1a; 然后外層設置scroll:

弱光環境下如何手持相機拍攝靜物:攝影曝光之等效曝光認知

寫在前面 博文內容為一次博物館靜物拍攝筆記的簡單總結內容涉及&#xff1a;弱光環境拍攝靜物如何選擇&#xff0c;以及等效曝光的認知理解不足小伙伴幫忙指正 &#x1f603;,生活加油 我看遠山&#xff0c;遠山悲憫 持續分享技術干貨&#xff0c;感興趣小伙伴可以關注下 _ 采…

ARM筆記-ARM偽指令及編程基礎

第四章 ARM偽指令及編程基礎 4.1 偽指令概述 4.1.1 偽指令定義 人們設計了一些專門用于指導匯編器進行匯編工作的指令&#xff0c;由于這些指令不形成機器碼指令&#xff0c;它們只是在匯編器進行匯編工作的過程中起作用&#xff0c;所以被叫做偽指令。 4.1.2 偽指令特征 …

智能手表怎么申請歐盟EN 18031認證

智能手表申請歐盟 EN 18031 認證&#xff08;針對消費類物聯網設備的網絡安全標準&#xff09;的流程與智能門鎖類似&#xff0c;但需結合手表的功能特性&#xff08;如數據交互、定位、支付等&#xff09;調整合規重點。以下是具體流程和關鍵要點&#xff1a; 一、標準適配與…

算法-全排列

1、全排列函數的使用 舉例&#xff1a;{1,2,3}的全排列 #include<iostream> #include<bits/stdc.h> using namespace std; typedef long long ll; int main(){ll a[3] {1, 2, 3};do{for (ll i 0; i < 3;i){cout << a[i] << " ";}cout…

面試加分秘籍:校招數據傾斜場景下的SQL優化方案

校招面試經常會問大家有沒有過調優的經驗&#xff0c;相信大家的回答基本都是往數據傾斜和小文件問題這兩方面回答&#xff0c;對于數據傾斜相信大部分同學對熱key打散或null值引發的傾斜已經非常熟悉&#xff0c;但這些內容面試官也是聽膩了&#xff0c;希望大家在面試時候講一…

Elasticsearch索引機制與Lucene段合并策略深度解析

引言 在現代分布式搜索引擎Elasticsearch中&#xff0c;文檔的索引、更新和刪除操作不僅是用戶交互的核心入口&#xff0c;更是底層存儲架構設計的關鍵挑戰。本文圍繞以下核心鏈路展開&#xff1a; 文檔生命周期管理&#xff1a;從客戶端請求路由到分片定位&#xff0c;從內存…

git提交更改

第一步&#xff1a;添加改動 git add . 第二步&#xff1a;提交改動 git commit -m “替換了 SerialPort 庫文件” 第三步&#xff1a;推送到遠程 git push 為什么git 的UI界面做的遠不如SVN

WPF的基礎控件:布局控件(StackPanel DockPanel)

布局控件&#xff08;StackPanel & DockPanel&#xff09; 1 StackPanel的Orientation屬性2 DockPanel的LastChildFill3 嵌套布局示例4 性能優化建議5 常見問題排查 在WPF開發中&#xff0c;布局控件是構建用戶界面的基石。StackPanel和DockPanel作為兩種最基礎的布局容器&…