[英]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.