首页 > 解决方案 > 我需要通过滑块改变对象的透明度

问题描述

我有这个脚本来更改最初关闭的对象的透明度,当我单击打开它的按钮时,它的克隆出现......但是当我打开这个对象时,我无法更改透明度。 ..统一没有错误,只是没有透明度变化......

     public class ChangeOpacity : MonoBehaviour
       {
        public GameObject currentGameObject;
        private AsistantControll AsistantControllScript;
        public float alpha = 0.5f;//half transparency
                  //Get current material
     private Material currentMat;

     // Start is called before the first frame update
     void Start()
      {
         AsistantControllScript = FindObjectOfType<AsistantControll>();

       currentMat = currentGameObject.GetComponent<Renderer>().material;

    }

      // Update is called once per frame
     void Update()
      {

       }



        void ChangeAlpha(Material mat, float alphaVal)
     {
     Color oldColor = mat.color;
     Color newColor = new Color(oldColor.r, oldColor.g, oldColor.b, alphaVal);
    mat.SetColor("_Color", newColor);


     }

      public void ChangeAlphaOnValue(Slider slider)
     {
 ChangeAlpha(currentMat, slider.value);
 }




 }

标签: c#androidunity3daugmented-reality

解决方案


您的代码中有些地方有问题,或者您没有编写所有代码。
从哪里调用您的 ChangeAlphaValue 方法?什么滑块在参数中传递给它?
您应该在脚本中添加滑块的序列化字段并在检查器中引用它。

[SerializeField] private Slider m_slider = null;

void Start()
{
    ...
    m_slider.onValueChanged.AddListener(ChangeAlphaOnValue);
}

void OnDestroy()
{
    m_slider.onValueChanged.RemoveListener(ChangeAlphaOnValue);
}

public void ChangeAlphaOnValue(float value)
{
    ChangeAlpha(currentMat, value);
}

使用该代码,只要您的滑块更改值(当您在运行时拖动它或通过代码设置它时),就会调用您的 ChangeAlphaOnValue。


推荐阅读