为什么在某些地方用鼠标在地形上划线时,它没有画任何东西?

时间:2017-09-09 18:29:15

标签: c# unity3d unity5

我想要做的是一个自由绘图,所以当我移动鼠标时,它将绘制一条连续/连续的线也与曲线。但是在地形上的某些地方,它并没有画画,而且在高地/丘陵的某些地方它并没有画画。即使我慢慢移动鼠标。

LineRenderer组件和脚本附加到Camera。不是主摄像头,而是新摄像头。

我之前尝试过使用:

if (Physics.Raycast(ray, out hit, 1000))

但同样的问题。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DrawLinesWithMouse : MonoBehaviour
{
    private List<Vector3> pointsList;

    // Use this for initialization
    void Start()
    {
        pointsList = new List<Vector3>();
    }

    // Update is called once per frame
    void Update()
    {
        RaycastHit hit;
        //if (Physics.Raycast(ray, out hit, 1000))
        if (Physics.Raycast(GetComponent<Camera>().ScreenPointToRay(Input.mousePosition),out hit))
        {
            Vector3 hitpoint = hit.point;
            pointsList.Add(hitpoint);

            if (pointsList.Count > 1)
                DrawLine(pointsList[pointsList.Count - 2], pointsList[pointsList.Count - 1], Color.red, 0.2f);
        }
    }

    void DrawLine(Vector3 start, Vector3 end, Color color, float duration = 0.2f)
    {
        GameObject myLine = new GameObject();
        myLine.transform.position = start;
        myLine.AddComponent<LineRenderer>();
        LineRenderer lr = myLine.GetComponent<LineRenderer>();
        lr.startColor = color;
        lr.startWidth = 3f;
        lr.endWidth = 3f;
        lr.SetPosition(0, start);
        lr.SetPosition(1, end);
        //GameObject.Destroy(myLine, duration);
    }
}

Line

1 个答案:

答案 0 :(得分:0)

物理相关代码通常应该在FixedUpdate内部而不是Update。

我自己经历过一次错误,如果我在Update内部进行Raycas而不是FixedUpdate,它会在不移动光标的情况下错过其目标。

因此,请尝试将代码移至FixedUpdate。