版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1.使用场景
看起来屌就完事了
可以使用在FPS外挂上(?)
2.算法
2.1 逻辑
- 从相机射出一条射线(视线)指向聚焦的物体
- 如果视线上出现碰撞体,则修改其材质的透明度,并缓存(材质的渲染队列要设置为transparent)
- 如果移出碰撞的视线后,则将之前的缓存的碰撞体的材质的透明度设置回原来的,并置空
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);
}
}
}