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

【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.xdnf.cn/news/10033.html

相关文章:

  • 【Phytium】飞腾FT2000/4 GPIO功能开发实例
  • Android Gnss模块初步整理
  • Transformer模型:多头注意力机制深度解析
  • 在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.3,运行demo,显示label
  • leetcode刷题 java总结
  • 数据库 | 使用timescaledb和大模型进行数据分析
  • Allegro 输出生产数据详解
  • BigemapPro 数据坐标转度分秒格式教程
  • C++_核心编程_ 左移运算符重载 “<<” 左移运算符
  • 解释k8s种ConfigMap和Secret的作用,如何在Pod中挂载环境变
  • PortSwigger-04-cors
  • 快递物流查询接口如何用C#进行调用?
  • 微机消谐装置:保障PT柜安全的核心设备
  • 第二章支线一:影之殿堂 · 阴影与过渡魔法
  • 下一代数模ai智能体研发意见征集
  • Win11安装Dify
  • 【Linux】(1)—进程概念-③Linux进程概念与PCB
  • 重温经典算法——选择排序
  • 从“刚性扩容”到“弹性供给”:移动充电服务重构配电网边际成本
  • Node.js 中 require 源码解析
  • 从零起步认知微内核操作系统(AGI)
  • JavaScript 循环语句总结
  • Linux浅谈
  • VMware安装esd格式系统镜像
  • Java实现命令行图书管理系统(附完整源码)
  • 使用 C/C++ 和 OpenCV 调用摄像头
  • Java打包在加载外面的yaml文件
  • 2025LitCTF 复现
  • 【SQL】关键字
  • 【笔记】suna部署之获取 Supabase API key 和 project URL