#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
чтобы она никогда не начиналась с позиции объектов.. итак, еще раз, что именно должна делать строка? Помогает ли вам мое обновление кода? 😉