You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码实现游戏中鼠标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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:10:16