繁体   English   中英

统一使用 slider 使 3d 游戏对象 object 透明

[英]Make 3d gameobject object transparent using slider in unity

我正在尝试使用 slider 使多个 object 透明,但不是同时。 什么意思,意思是选择的object应该可以有透明的阴影。 我已经为它写了一个代码。 但是我需要帮助来识别我的错误或纠正我在代码中的错误。 代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TransparentObject : MonoBehaviour  
{
private GameObject objectTotransparent;
public float alpha = 0.5f;
private Material currentMat;
public Slider transparentSlider;

void Awake()
{
    transparentSlider.onValueChanged.AddListener(OnSliderChanged);
}

//void Start()
//{
    //objectTotransparent = gameObject;
    //currentMat = objectTotransparent.GetComponent<Renderer>().material;
//}

void Update()
{
    //ChangeAlpha(currentMat, alpha);
    Touch touch = Input.GetTouch(0);
    if (touch.phase == TouchPhase.Began)
    {
        Ray ray = Camera.current.ScreenPointToRay(touch.position);
        RaycastHit hitObject;
        if (Physics.Raycast(ray, out hitObject))
        {
            objectTotransparent = hitObject.transform.parent.transform.parent.gameObject;
            objectTotransparent.GetComponent<Recolour>().SetSelected();
        }
    }
}

/*void ChangeAlpha(Material mat, float alphaVal)
{
    
}*/

void OnSliderChanged(float alphaVal)
{
    //ChangeAlpha(currentMat, transparentSlider.value);
    //Color oldColor = mat.color;
    //Color newColor = new Color(oldColor.r, oldColor.g, oldColor.b, alphaVal);
    //mat.SetColor("_Color", newColor);
    transparentSlider = GUI.HorizontalSlider( Rect(20,135,175,30), transparentSlider, 1, 0);
    renderer.material.color.a = transparentSlider;
}

public void Deselect()
{
    objectTotransparent.GetComponent<Recolour>().SetOriginalMaterial();
    objectTotransparent = null;
    transparentSlider.value = alpha;
} 
}

OnSliderChanged方法中,尝试将 alpha 分量设置为transparentSlider.value而不是 Slider object。 以下是您应该如何在一个简单的脚本中更改 object 的透明度:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeTransparency : MonoBehaviour
{
    //renderer attached to the object that you want to make transparent
    public Renderer rend;
    //ui slider that you want to use to controll the transparency
    public Slider slider;


    private void Update()
    {
        rend.material.color = new Color(
            rend.material.color.r,
            rend.material.color.g,
            rend.material.color.b,
            slider.value
            );       
    }
}

注意:应用于 object 的要使其透明的材料应将其渲染模式设置为透明:

材料检验员

现在您可以更改反照率和所有其他参数来模仿您的原始材质。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM