代码之家  ›  专栏  ›  技术社区  ›  Soner from The Ottoman Empire

使用光线投射从一个物体发出多束激光

  •  0
  • Soner from The Ottoman Empire  · 技术社区  · 6 年前

    enter image description here

    以下代码仅显示一侧的线梁。但从侧面来看。

    using UnityEngine;
    using System.Collections;
    
    public class Laser : MonoBehaviour
    {
    
        private LineRenderer lr;
        private bool clicked = false;
        RaycastHit rh;
    
        // Use this for initialization
        void Start()
        {
            lr = GetComponent<LineRenderer>();
    
        }
    
    
    
    
        // Update is called once per frame
        void Update()
        {
    
    
            if (clicked)
            {
    
                lr.SetPosition(0, transform.position + new Vector3(0, 0, 0));
                RaycastHit hit;
    
                if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), -transform.up, out hit))
                {
                    if (hit.collider)
                    {
                        lr.SetPosition(1, hit.point);
                    }
                }
                else lr.SetPosition(1, -transform.up * 5000);
    
    
                if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), transform.up, out hit))
                {
                    if (hit.collider)
                    {
                        lr.SetPosition(1, hit.point);
                    }
                }
                else lr.SetPosition(1, transform.up * 5000);
    
               if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), transform.right, out hit))
                {
                    if (hit.collider)
                    {
                        lr.SetPosition(1, hit.point);
                    }
                }
                else lr.SetPosition(1, transform.right * 5000);
    
               if (Physics.Raycast(transform.position + new Vector3(0, 0, 0), -transform.right, out hit))
                {
                    if (hit.collider)
                    {
                        lr.SetPosition(1, hit.point);
                    }
                }
                else lr.SetPosition(1, -transform.right * 5000);
    
    
            }
    
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   killer_mech    6 年前
    public LineRenderer lr_up;
    public LineRenderer lr_down;
    public LineRenderer lr_left;
    public LineRenderer lr_right;
    
    private bool clicked = false;
    
    RaycastHit rh;
    
    // Use this for initialization
    void Start()
    {
    
    }
    
    // Update is called once per frame
    void Update()
    {
        if (clicked)
        {
            lr_up.SetPosition(0, transform.position);
            lr_down.SetPosition(0, transform.position);
            lr_left.SetPosition(0, transform.position);
            lr_right.SetPosition(0, transform.position);
    
            RaycastHit hit;
    
            if (Physics.Raycast(transform.position, -transform.up, out hit))
            {
                if (hit.collider)
                {
                    lr_up.SetPosition(1, hit.point);
                }
            }
            else lr_up.SetPosition(1, -transform.up * 5000);
    
    
            if (Physics.Raycast(transform.position, transform.up, out hit))
            {
                if (hit.collider)
                {
                    lr_down.SetPosition(1, hit.point);
                }
            }
            else lr_down.SetPosition(1, transform.up * 5000);
    
            if (Physics.Raycast(transform.position, transform.right, out hit))
            {
                if (hit.collider)
                {
                    lr_left.SetPosition(1, hit.point);
                }
            }
            else lr_left.SetPosition(1, transform.right * 5000);
    
            if (Physics.Raycast(transform.position, -transform.right, out hit))
            {
                if (hit.collider)
                {
                    lr_right.SetPosition(1, hit.point);
                }
            }
            else lr_right.SetPosition(1, -transform.right * 5000);
        }
    }
    

    这是您更正的代码。需要四个线渲染器来表示四个梁。不能有单线渲染器并期望它朝四个方向拍摄。在当前对象中创建四个空子对象。指定行渲染器组件,并在脚本中为它们指定相应的行渲染器。其余代码将负责设置梁。