繁体   English   中英

Unity3D - 在相机和玩家之间发射光线 - 透明墙

[英]Unity3D - Shooting a Ray between Camera and Player - Transparent Walls

我正在尝试在相机和玩家之间拍摄一条光线,当它拍摄我的墙壁时,我的墙壁将着色器更改为透明,但出于某种原因,只有当我在墙壁的角落时它才会消失。这个想法是每次墙壁在我的播放器和相机之间它会消失。

此脚本附加到一个空的游戏对象。

public class WallManager : MonoBehaviour
{
    [SerializeField] private string transparentTag = "Transparent";
    [SerializeField] private Material transparentMaterial;
    [SerializeField] private Material defaultMaterial;

    public LayerMask transparencyMask;


    private Transform _selection;

    // Update is called once per frame
    void Update()
    {

        Vector3 transparentTarget = GameObject.FindGameObjectsWithTag("Player")[0].transform.position;

        if (_selection != null)
        {
            var selectionRenderer = _selection.GetComponent<Renderer>();
            selectionRenderer.material = defaultMaterial;
            _selection = null;
        }

        Ray ray = Camera.main.ScreenPointToRay(transparentTarget);

        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, transparencyMask))
        {
            var selection = hit.transform;
            if (selection.CompareTag(transparentTag))
            {
                var selectionRenderer = selection.GetComponent<Renderer>();
                if (selectionRenderer != null)
                {
                    selectionRenderer.material = transparentMaterial;
                }

                _selection = selection;
            }


        }
    }

我认为问题是这一行:

 Ray ray = Camera.main.ScreenPointToRay(transparentTarget);

这个函数应该在屏幕上取一个点,但你在世界空间中给它一个点。 尝试用这个替换它:

 Ray ray = Camera.main.ScreenPointToRay(
     new Vector3(Camera.main.pixelWidth/2, Camera.main.pixelHeight/2, 0));

这应该会给你一条从相机视图中心到玩家的光线(如果相机直接指向玩家),我认为这就是你想要的。 你也可以试试:

Ray ray = new Ray(Camera.main.transform.position, 
    transparentTarget - Camera.main.transform.position);

这将为您提供一条从相机指向玩家的光线。 即使玩家不在相机视图中居中,此代码仍然有效。

暂无
暂无

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

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