簡體   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