参考教程:https://www.youtube.com/watch?v=mOqHVMS7-Nw
一:射线检测方法
1.场景中添加两个立方体和一个圆柱体,两个立方体是被隐藏的对象,一个圆柱体是玩家
2.分别为两个立方体创建可设置透明度的材质,步骤如下
(1)右键->创建材质,命名red
(2)设置渲染模式为Transparent
(3)设置该材质的颜色和透明度
(4)设置好材质后将材质拖到立方体上。另一个立方体的材质设置为同样操作
3.新建脚本 objectFader.cs,脚本内容如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class objectFader : MonoBehaviour
{
public float fadeSpeed, fadeAmount;//分别是透明速度和透明度
float originalOpacity;
Material mat;
public bool DoFade = false;
// Start is called before the first frame update
void Start()
{
mat = GetComponent<Renderer>().material;
originalOpacity = mat.color.a;
}
// Update is called once per frame
void Update()
{
if (DoFade)
{
FadeNow();
}
else
{
RestFade();
}
}
void FadeNow()
{
Color currentColor = mat.color;
Color smoothColor =new Color(currentColor.r, currentColor.g, currentColor.b,
Mathf.Lerp(currentColor.a, fadeAmount, fadeSpeed*Time.deltaTime));
mat.color = smoothColor;
}
void RestFade()
{
Color currentColor = mat.color;
Color smoothColor = new Color(currentColor.r, currentColor.g, currentColor.b,
Mathf.Lerp(currentColor.a, originalOpacity, fadeSpeed*Time.deltaTime));
mat.color = smoothColor;
}
}
4,新建完脚本将脚本添加到两个立方体上,分别设置淡化速度和透明度,将点击运行将Dofade标志位勾上,立方体慢慢透明说明脚本书写正确
5.新建脚本Cam.cs,脚本内容如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Cam : MonoBehaviour
{
private objectFader _fader;
void Update()
{
GameObject player = GameObject.FindGameObjectWithTag("Player");
if (player != null)
{
Vector3 dir = player.transform.position- transform.position ;
Ray ray = new Ray(transform.position, dir);
RaycastHit hit;
Debug.DrawLine(ray.origin, ray.origin + ray.direction*1000, Color.red);
if (Physics.Raycast(ray, out hit))
{
if (hit.collider == null)
return;
if (hit.collider.gameObject == player)
{
if (_fader)
{
_fader.DoFade = false;
}
}
else
{
_fader = hit.collider.gameObject.GetComponent<objectFader>();
if (_fader)
{
_fader.DoFade = true;
}
}
}
}
}
}
6.将脚本添加到相机下
7.将圆柱体的tag标签定为Player
8.点击运行后,移动圆柱体碰到立方体后立方体变隐形,远离后立方体恢复透明度