RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1302172
Accepted
DarMaster
DarMaster
Asked:2022-07-05 19:20:20 +0000 UTC2022-07-05 19:20:20 +0000 UTC 2022-07-05 19:20:20 +0000 UTC

如何在第二次单击时恢复对象的颜色(如果第一次单击时颜色发生变化并且有多个对象)?

  • 772

问题在于重新点击,考虑到对象不是一个(因此它们的颜色不同),如何保存和恢复对象的颜色。比如两个盒子:黄色和蓝色,我们把两者的颜色都改成黑色,如何恢复它们原来的颜色呢?

using System.Collections.Generic;
using UnityEngine;

public class VisualRay : MonoBehaviour
{
    public UnityEngine.UI.Selectable CurrentSelectable;
    private Color color;
    void LateUpdate()
    {   
        Ray ray =  Camera.main.ScreenPointToRay(Input.mousePosition);
        Debug.DrawRay(transform.position, transform.forward*100f, Color.yellow);
        
        
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit))
        {       

            GameObject selectable = hit.collider.gameObject;
            if ((selectable.tag == "Box") && (Input.GetKeyDown(KeyCode.F)))
            {
                color = selectable.GetComponent<Renderer>().material.color;
                selectable.GetComponent<Renderer>().material.color = Color.red;
            }
               
        }
    }
}

我试过这样,但没有奏效:

using System.Collections.Generic;
using UnityEngine;

public class VisualRay : MonoBehaviour
{
    public Transform Pointer;
    public UnityEngine.UI.Selectable CurrentSelectable;
    private Color color;
    bool Transform_color = false;
    void LateUpdate()
    {   
        Ray ray =  Camera.main.ScreenPointToRay(Input.mousePosition);
        Debug.DrawRay(transform.position, transform.forward*100f, Color.yellow);
        
        
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit))
        {
            Pointer.position = hit.point;

            GameObject selectable = hit.collider.gameObject;
            if ((selectable.tag == "Box") && (Input.GetKeyDown(KeyCode.F)))
            {
                if (Transform_color == false)
                {
                    color = selectable.GetComponent<Renderer>().material.color;
                    selectable.GetComponent<Renderer>().material.color = Color.red;
                    Transform_color = true;
                }
                else
                {
                    selectable.GetComponent<Renderer>().material.color = color;
                }
            }
        }
    }
}
unity3d
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Alemkhan Utepkaliev
    2022-07-07T15:11:33Z2022-07-07T15:11:33Z

    首先,您需要为盒子创建一个脚本,例如Box.cs

    Box.cs创建一个带有链接以Renderer将颜色更改为的material.color字段,以及两个带有 的字段Color,一个在选择颜色下,另一个在“基色”下。

    例子:

    private Renderer _renderer;
    
    [Serialize Field] private Color _highlightColor = Color.green;
    [Serialize Field] private Color _defaultColor;
    
    public Color highlightColor { get => _highlightColor ; set => _highlightColor = value; }
    
    private void Awake()
    {
       _renderer = GetComponent<Renderer>();
    }
    
    public void SwitchColor(bool isSelected)
    {
       isSelected == true ? _renderer.material.color = _highlightColor : _renderer.material.color = _defaultColor; // Тернарный оператор
    }
    

    并创建一个根据其参数改变颜色的方法。

    请注意,此脚本位于对象上,Renderer或者您自己指定它的路径。

    现在你只需要转向这个方法:

                RaycastHit hit;
                if (Physics.Raycast(ray, out hit))
                {       
        
                    GameObject selectable = hit.collider.gameObject;
    
                    if ((selectable.GetComponent<Box>()) && (Input.GetKeyDown(KeyCode.F)))
                    {
                        color = selectable.GetComponent<Renderer>().material.color;
                        selectable.GetComponent<Box>().highlightColor = color;
                        selectable.GetComponent<Box>().SwitchColor(true);
                    }
                       
                }
    
    • 1

相关问题

  • 使物体通过 2D 对撞机而不停止

  • 如何将组件与 Unity 变量等同起来

  • 需要制作一个场景来统一加载场景

  • unity 奇怪的相机分辨率

  • Unity 2020 中的长时间加载

  • 改进游戏。如何平衡?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5