C# 统一线渲染器不会跟随光线投射?

C# 统一线渲染器不会跟随光线投射?,c#,unity3d,game-physics,C#,Unity3d,Game Physics,无法使线渲染器跟随光线投射? 这是raycast代码和子弹痕迹代码。线渲染按预期的方式弹出,但它只是在播放器前面沿直线移动,而不是在播放器单击/光线投射弹出的位置 public class Weapon : MonoBehaviour { public float fireRate = 0; public float Damage = 0; public LayerMask whatToHit; public Transform BulletTrailPrefab; float timeTo

无法使线渲染器跟随光线投射? 这是raycast代码和子弹痕迹代码。线渲染按预期的方式弹出,但它只是在播放器前面沿直线移动,而不是在播放器单击/光线投射弹出的位置

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);
}
}

任何帮助都将不胜感激

我的猜测:您的问题是您没有旋转
火点
指向鼠标位置

因此使用

Instantiate(BulletTrailPrefab, firePoint.position, firePoint.rotation); 
可能相当于

Instantiate(BulletTrailPrefab, firePoint.position, Quaternion.identity); 
因此

transform.Translate (Vector3.right * Time.deltaTime * moveSpeed);
始终仅在世界X方向移动


我将使用一个专用的方法用所需的信息初始化生成的对象,并将
Destroy
调用移动到那里,以便只执行一次:

public class Trail : MonoBehaviour
{
    public int moveSpeed = 20;

    private Vector2 _direction;
    private bool _isInitialized;

    public void Initialize(Vector2 direction)
    {
        _direction = direction;
        _isInitialized = true;

        Destroy(gameObject, 1);
    }

    // Update is called once per frame
    void Update()
    {
        if(!_isInitialized) return;

        transform.Translate (_direction * Time.deltaTime * moveSpeed);
    }
}
然后像这样使用它

// Use the correct type here
public Trail BulletTrailPrefab;

private void Shoot()        
{ 
    Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    Vector2 firePointPosition = firePoint.position;
    var direction = (mousePosition-firePointPosition).normalized;
    var hit = Physics2D.Raycast(firePointPosition, direction, 100, whatToHit);

    // no pass in the direction
    Effect(direction);

    Debug.DrawLine(firePointPosition, direction * 100, Color.cyan);

    if (hit.collider != null)
    {
        Debug.DrawLine(firePointPosition, hit.point, Color.red);
        Debug.Log("Hit " + hit.collider.name + "and did" + Damage + "Damage");
    }
}

private void Effect(Vector2 direction)
{
    var bullet = Instantiate(BulletTrailPrefab, firePoint.position, firepoint.rotation);
    bullet.Initialize(direction);
}

它是否适用于
Debug.DrawLine
,是否根据鼠标位置旋转
firePoint
?@derHugo是的,可以在场景视图中看到该线,但出于某种原因,线渲染器只是在播放器前面的直线上拍摄,调试显示光线投射正在撞击鼠标指向的对象是的,但主要问题是您从未真正朝鼠标方向旋转
火点=>它将始终具有默认旋转=>
transform.Translate(Vector3.right*Time.deltaTime*moveSpeed)将始终沿世界右方向(仅在X轴上)移动,因为它不会将鼠标方向带入account@derHugo哦,好的,谢谢,我该如何更改代码才能做到这一点?谢谢,看起来很棒,我收到一个错误CS0103,当前上下文中不存在名称“origin”。这应该是什么?是打字错误。。现在试试