gpt4 book ai didi

c# - 如何使用等距相机在 Unity 中将光线转换与 mousepostition 对齐?

转载 作者:太空宇宙 更新时间:2023-11-03 11:57:49 25 4
gpt4 key购买 nike

当鼠标不居中时,我无法弄清楚如何弥补鼠标位置的偏移量。 Unity 中的相机处于角度 (30, 45, 0) 并且是正交的。有关示例,请参见图片。

我考虑过在光线转换位置渲染十字准线,但这仍然会使目标变得棘手。

Example Image

linerenderer 代码的光线转换:

void Shoot ()
{
timer = 0f;

gunAudio.Play ();

gunLight.enabled = true;

gunParticles.Stop ();
gunParticles.Play ();

gunLine.enabled = true;
gunLine.SetPosition (0, transform.position);

shootRay.origin = transform.position;
shootRay.direction = transform.forward;

if(Physics.Raycast (shootRay, out shootHit, range, shootableMask))
{
EnemyHealth enemyHealth = shootHit.collider.GetComponent<EnemyHealth>();

if(enemyHealth != null)
{
enemyHealth.TakeDamage (damagePerShot, shootHit.point);
}
gunLine.SetPosition (1, shootHit.point);
}
else
{
gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);
}
}

用于转动播放器的光线转换:

void Turning()
{
Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);

RaycastHit floorHit;

if (Physics.Raycast(camRay, out floorHit, camRayLength, floorMask))
{
Vector3 playerToMouse = new Vector3(floorHit.point.x, transform.position.y, floorHit.point.z);
transform.LookAt(playerToMouse);
}
}

最佳答案

Player 似乎正对着我旋转。


对于 LineRenderer/shoot raycast,您不会检查仅击中敌人的地板。所以在 else block 中你做

gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);

在给定的方向上将光线延续到“永恒”(或 range)。您还应该在此处将地板添加到 floorMask,这样您的光线也会射到地板上。

或者您可以使用类似的方法组合图层值

 if(Physics.Raycast (shootRay, out shootHit, range, shootableMask | floorMask))

关于c# - 如何使用等距相机在 Unity 中将光线转换与 mousepostition 对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58859694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com