如何通过代码实现游戏中鼠标roof对象无动画定时变色?
实现无动画的周期性颜色切换方案
核心逻辑很简单:通过计时逻辑,每隔固定时间直接修改对象的颜色属性,完全不需要依赖动画系统。下面给你主流游戏引擎的具体实现方式:
Unity(C#)
方式1:手动维护计时器(Update中检测)
把这个脚本挂到你的roof对象上,在Inspector面板配置颜色列表和切换间隔即可:
using UnityEngine; public class RoofColorChanger : MonoBehaviour { // 可配置的颜色列表 public Color[] colorList = { Color.red, Color.green, Color.blue }; // 切换间隔(单位:秒) public float switchInterval = 2f; private float _timer; private int _currentColorIndex; void Start() { // 初始设置第一个颜色 GetComponent<Renderer>().material.color = colorList[0]; } void Update() { // 累加帧间隔时间 _timer += Time.deltaTime; if (_timer >= switchInterval) { // 循环切换到下一个颜色 _currentColorIndex = (_currentColorIndex + 1) % colorList.Length; GetComponent<Renderer>().material.color = colorList[_currentColorIndex]; // 重置计时器 _timer = 0f; } } }
方式2:用引擎内置定时调用(更简洁)
如果不想自己写计时逻辑,可以用InvokeRepeating让引擎帮你定时执行颜色切换:
using UnityEngine; public class RoofColorChanger : MonoBehaviour { public Color[] colorList = { Color.red, Color.green, Color.blue }; public float switchInterval = 2f; private int _currentColorIndex; void Start() { GetComponent<Renderer>().material.color = colorList[0]; // 立即开始,每隔switchInterval秒执行一次ChangeColor方法 InvokeRepeating(nameof(ChangeColor), 0f, switchInterval); } void ChangeColor() { _currentColorIndex = (_currentColorIndex + 1) % colorList.Length; GetComponent<Renderer>().material.color = colorList[_currentColorIndex]; } }
Godot(GDScript)
同样绑定到roof节点,配置好参数即可运行:
extends MeshInstance3D # 根据你的roof对象类型调整,比如2D用Sprite2D # 可配置的颜色列表 @export var color_list: Array[Color] = [Color.RED, Color.GREEN, Color.BLUE] # 切换间隔(单位:秒) @export var switch_interval: float = 2.0 var timer: float = 0.0 var current_color_index: int = 0 func _ready(): # 初始化颜色 material_override.set("albedo_color", color_list[0]) func _process(delta: float): timer += delta if timer >= switch_interval: # 循环切换颜色 current_color_index = (current_color_index + 1) % color_list.size() material_override.set("albedo_color", color_list[current_color_index]) timer = 0.0
通用注意事项
- 如果是2D对象(比如Sprite),要修改对应的颜色属性:Unity改
SpriteRenderer.color,Godot改modulate属性 - 颜色列表可以自定义任意数量的颜色,取模运算会自动实现循环切换
- 切换间隔设为变量后,能随时在编辑器里调整,不用改代码
内容的提问来源于stack exchange,提问作者James Los
相关产品推荐
相关产品推荐

