目錄
- 項目概述
- 🛠? 完整操作步驟(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類
- 在Unity中新建項目(選擇3D模板)
- 在Project窗口右鍵 → Create → Folder,命名為"Scripts"
- 在Scripts文件夾中右鍵 → Create → C# Script
- 命名為"ColorConfig"
- 雙擊打開并替換為以下代碼:
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:創建顏色配置資產
-
在Project窗口中右鍵 → Create → Cube/Color Config
-
將新資產命名為"RedColor"
-
在Inspector中配置:
- Cube Color: 紅色 (255, 0, 0)
- Emission Color: 深紅 (100, 0, 0)
- Pulse Speed: 2
- Max Intensity: 3
- Color Name: 熱情紅
- Description: 充滿活力的紅色
-
同樣方式創建另外兩個配置:
- 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: 自然綠
- BlueColor
步驟3:創建Cube控制器
- 在Scripts文件夾創建新C#腳本,命名為"CubeController"
- 替換為以下代碼:
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
- 創建新文件夾:Resources/ColorConfigs
- 將之前創建的三個顏色配置拖到ColorConfigs文件夾
- 在場景中創建Cube:
- GameObject → 3D Object → Cube
- 重命名為"ColorCube"
- 將CubeController腳本拖到Cube上
- 在Inspector中將RedColor配置拖到CubeController的Color Config字段
步驟5:添加簡單UI提示
- 創建UI:GameObject → UI → Canvas
- 創建文本:右鍵Canvas → UI → Text
- 設置文本內容:
按數字鍵切換Cube顏色:
1 - 紅色
2 - 藍色
3 - 綠色
- 調整文本位置和大小(建議使用Anchor設置為底部居中)
步驟6:添加材質自發光支持
- 選擇Cube
- 在Inspector中找到Material
- 確保材質勾選了"Emission"選項
- 如果沒有,創建一個新材質:
- 右鍵Project窗口 → Create → Material
- 命名為"GlowMaterial"
- 勾選Emission
- 拖到Cube上
🎮 測試你的系統
- 點擊Play按鈕運行場景
- 觀察Cube顯示為紅色并脈動
- 按鍵盤數字鍵:
- 按1:切換到紅色
- 按2:切換到藍色
- 按3:切換到綠色
- 觀察效果:
- 每種顏色有不同的基礎色和自發光
- 脈動速度各不相同
- 控制臺顯示當前顏色名稱
💡 核心概念解析
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:添加旋轉效果
- 在ColorConfig中添加旋轉速度屬性:
public Vector3 rotationSpeed; // 旋轉速度
- 在CubeController的Update中添加:
transform.Rotate(colorConfig.rotationSpeed * Time.deltaTime);
- 為每個顏色配置設置不同的旋轉速度
擴展2:創建隨機顏色按鈕
- 在UI中添加按鈕
- 創建新方法:
public void SetRandomColor()
{ColorConfig[] allColors = Resources.LoadAll<ColorConfig>("ColorConfigs");if (allColors.Length > 0){colorConfig = allColors[Random.Range(0, allColors.Length)];ApplyColorConfig();}
}
擴展3:添加大小變化
- 在ColorConfig中添加:
public Vector3 cubeScale = Vector3.one; // Cube大小
- 在ApplyColorConfig中添加:
transform.localScale = colorConfig.cubeScale;
📚 實際應用場景
ScriptableObject在游戲開發中用途廣泛:
- 敵人屬性:不同敵人類型的血量、速度、傷害
- 武器系統:槍械的射速、傷害、后坐力
- 技能配置:冷卻時間、效果強度、持續時間
- 游戲設置:難度級別、控制靈敏度
- 對話系統:NPC對話內容和選項
💎 總結
通過本教程,你學會了:
- 創建和使用ScriptableObject的基本流程
- 通過ScriptableObject分離數據和邏輯
- 動態加載和應用不同配置
- 創建簡單的顏色動畫效果
- 實現按鍵切換配置功能
ScriptableObject是Unity中提升工作效率的強大工具,它讓游戲配置變得靈活可調,是每個Unity開發者都應該掌握的核心技能!