【Unity】当人物主角被障碍物遮挡后,将障碍物半透明化

  1.  脚本功能:当人物主角被障碍物遮挡的时候(从摄像机视角看去),使障碍物半透明化,当主角可见时,恢复障碍物透明度  
  2.  脚本位置:MainCamera 或者任意一个可以始终存在的游戏对象身上即可  
  3.  创建时间:2015年12月29日  
  4.  障碍物Shader使用的是Unity内置的Standard  
  5.  Rendering Mode选择Transparent模式  



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


public class Obstacle2transparente : MonoBehaviour {  
  
    // 所有障碍物的Renderer数组  
    private List<Renderer> _ObstacleCollider;  
  
    // 人物主角(之后通过名字识别?还是tag?目前手动拖过来)  
    public GameObject _target;  
  
    // 临时接收,用于存储  
    private Renderer _tempRenderer;  
    void Start()  
    {  
        _ObstacleCollider = new List<Renderer>();  
    }  
    void Update()  
    {  
        // 调试使用:红色射线,仅Scene场景可见     
        #if UNITY_EDITOR  
        Debug.DrawLine(_target.transform.position, transform.position, Color.red);  
        #endif  
        RaycastHit[] hit;  
        hit = Physics.RaycastAll(_target.transform.position, transform.position);  
        //  如果碰撞信息数量大于0条  
        if (hit.Length > 0)  
        {   // 设置障碍物透明度为0.5  
            for (int i = 0; i < hit.Length; i++)  
            {  
                _tempRenderer = hit[i].collider.gameObject.GetComponent<Renderer>();  
                _ObstacleCollider.Add(_tempRenderer);  
                SetMaterialsAlpha(_tempRenderer, 0.5f);  
                Debug.Log(hit[i].collider.name);  
            }  
  
  
        }// 恢复障碍物透明度为1  
        else  
        {  
            for (int i = 0; i < _ObstacleCollider.Count; i++)  
            {  
                _tempRenderer = _ObstacleCollider[i];  
                SetMaterialsAlpha(_tempRenderer, 1f);  
            }  
        }  
  
    }  
     
  
    // 修改障碍物的透明度  
    private void SetMaterialsAlpha(Renderer _renderer, float Transpa)  
    {  
        // 一个游戏物体的某个部分都可以有多个材质球  
        int materialsCount = _renderer.materials.Length;  
        for (int i = 0; i < materialsCount; i++)  
        {  
  
            // 获取当前材质球颜色  
            Color color = _renderer.materials[i].color;  
  
            // 设置透明度(0--1)  
            color.a = Transpa;  
  
            // 设置当前材质球颜色(游戏物体上右键SelectShader可以看见属性名字为_Color)  
            _renderer.materials[i].SetColor("_Color", color);  
        }  
  
    }  
} 


  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值