Увеличение / уменьшение индексов x и z средства визуализации строк на основе GameObject

#c# #unity3d

#c# #unity3d

Вопрос:

Я пытаюсь увеличить / уменьшить индексы x и z заданных позиций средства визуализации строк на основе позиции другого игрового объекта. Таким образом, если GameObject перемещается вперед / назад, выполняется ось x средства визуализации строк и аналогична оси z, если она перемещается влево / вправо.

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

[RequireComponent (typeof (LineRenderer))]
public class LineRenderer_Test : MonoBehaviour
{
    private LineRenderer line;
    public bool DrawLine = false;
    public GameObject Follow_Obj;
    float posx;
    float posz;

    // Start is called before the first frame update
    void Start () {
       
        line = GetComponent<LineRenderer>();

        line.SetPosition(0, new Vector3(0,0,0));
        DrawLine = true;
        
    }

    // Update is called once per frame
    void Update () {
        if (DrawLine == true) {
            //Calculate if Follow_Obj is moving forward/backward/left/right
            posx  = 0.1f*Time.deltaTime;//Forward
            posx -= 0.1f*Time.deltaTime;//Backward
            posz  = 0.1f*Time.deltaTime;//Right
            posz -= 0.1f*Time.deltaTime;//left
            line.SetPosition(1, new Vector3(posx,0,posz));
        }
    }
}
 

Ответ №1:

Чтобы узнать, в каком направлении движется объект, просто отслеживайте его последнюю позицию и сравнивайте их:

 [SerializeField] private float length = 0.5f;
private Vector3 lastPos;

void Update () 
{
    if (DrawLine) 
    {
        var delta = Follow_Obj.transform.position - lastPos;
        var direction = delta.normalized;

        line.SetPosition(0, Follow_Obj.transform.position);
        line.SetPosition(1, Follow_Obj.transform.position - direction * length));
    }

    lastPos = Follow_Obj.transform.position;
}
 

Комментарии:

1. Привет, спасибо за ваш ответ. Знаете ли вы, почему я получаю сообщение об ошибке для Vector3 (направление * длина)? Vector3 does not contain a constructor that takes 1 arguments

2. Я знаю почему, потому что это неправильно ^^ Просто была опечатка (я на смартфоне), обновил код

3. Спасибо. Но это не совсем так, как я хотел. Видите ли, моя логика заключается в том, чтобы строка начиналась с позиции Follow_Obj и продолжала следовать за ней. Индекс (1) должен быть затронут. Итак, это то, чего я пытаюсь достичь.

4. Ну, вы создаете позицию 0 , 0,0,0 чтобы она никогда не начиналась с позиции объектов.. итак, еще раз, что именно должна делать строка? Помогает ли вам мое обновление кода? 😉