Unity3D相机系统 视线上有碰撞体 透视

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_28474981/article/details/94472753

Unity3D相机系统 视线上有碰撞体 透视


在这里插入图片描述

1.使用场景

看起来屌就完事了
可以使用在FPS外挂上(?)

2.算法

2.1 逻辑

  1. 从相机射出一条射线(视线)指向聚焦的物体
  2. 如果视线上出现碰撞体,则修改其材质的透明度,并缓存(材质的渲染队列要设置为transparent)
  3. 如果移出碰撞的视线后,则将之前的缓存的碰撞体的材质的透明度设置回原来的,并置空

2.2 核心代码

        public float FadeObjAlpha { get; set; }

        private GameObject preHitObj;

        void OnFadeObjectUpdate(float deltaTime)
        {
            Ray ray = new Ray(targetCamera.transform.position, (FocusTarget.transform.position - targetCamera.transform.position).normalized);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, (FocusTarget.transform.position - targetCamera.transform.position).magnitude))
            {
                GameObject hitObj = hit.collider.gameObject;
                if (preHitObj != null)
                {
                    preHitObj.GetComponent<Renderer>().material.color = new Color(1, 1, 1, 1);
                }
                if (hitObj.GetComponent<Renderer>() != null)
                {
                    preHitObj = hitObj;
                    preHitObj.GetComponent<Renderer>().material.color = new Color(1, 1, 1, FadeObjAlpha);
                }
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_28474981/article/details/94472753
今日推荐