【发布时间】:2020-04-20 05:20:05
【问题描述】:
无法让线渲染器跟随光线投射? 这是光线投射代码和子弹轨迹代码。线渲染按预期射出,但它只是在玩家面前直线前进,而不是玩家点击/光线投射射出的地方。
public class Weapon : MonoBehaviour
{
public float fireRate = 0;
public float Damage = 0;
public LayerMask whatToHit;
public Transform BulletTrailPrefab;
float timeToFire = 0;
Transform firePoint;
// Start is called before the first frame update
void Awake() {
firePoint = transform.Find("FirePoint");
if (firePoint == null)
{
Debug.LogError("No Firepoint?");
}
}
// Update is called once per frame
void Update()
{
if (fireRate == 0)
{
if (Input.GetButtonDown("Fire1"))
{
Shoot();
}
}
else
{
if (Input.GetButton("Fire1") && Time.time > timeToFire)
{
timeToFire = Time.time + 1/fireRate;
Shoot();
}
}
}
void Shoot() {
Vector2 mousePosition = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
Vector2 firePointPosition = new Vector2(firePoint.position.x, firePoint.position.y);
RaycastHit2D hit = Physics2D.Raycast(firePointPosition, mousePosition-firePointPosition, 100, whatToHit);
Effect();
Debug.DrawLine(firePointPosition, (mousePosition - firePointPosition)*100, Color.cyan);
if (hit.collider != null)
{
Debug.DrawLine(firePointPosition, hit.point, Color.red);
Debug.Log("Hit " + hit.collider.name + "and did" + Damage + "Damage");
}
}
void Effect()
{
Instantiate(BulletTrailPrefab, firePoint.position, firePoint.rotation);
}
}
还有子弹轨迹:
public class Trail : MonoBehaviour
{
public int moveSpeed = 20;
// Update is called once per frame
void Update()
{
transform.Translate (Vector3.right * Time.deltaTime * moveSpeed);
Destroy(GameObject, 1);
}
}
任何帮助将不胜感激
【问题讨论】:
-
它是否适用于
Debug.DrawLine并且是否根据鼠标位置旋转firePoint? -
@derHugo 是的,这条线可以在场景视图中看到,但由于某种原因,线渲染器只是在玩家面前直线射击,调试显示光线投射正在击中鼠标所在的对象指向
-
是的,但主要问题是您从未真正将
firePoint朝向鼠标旋转 => 它始终具有默认旋转 =>transform.Translate (Vector3.right * Time.deltaTime * moveSpeed);将始终沿世界正确方向移动(仅在X 轴),因为它不考虑鼠标方向 -
@derHugo 哦,好的,谢谢,我要如何更改代码才能做到这一点?
标签: c# unity3d game-physics