Получить ось относительно вращения Unity3d - PullRequest
0 голосов
/ 28 сентября 2018

В настоящее время я работаю над игрой в стиле Fighting в Unity и Photon.Однако я столкнулся с небольшой проблемой, которую не знаю, как решить.

Игра 1 на 1, поэтому в комнате одновременно не более двух игроков.У меня есть эффект щита с индикатором здоровья и всплывающим уроном.Например, когда игрок поворачивает камеру, текст врага / панель здоровья поворачивается, чтобы посмотреть на камеру.

Проблема с повреждением текста.Это работает до такой степени, что, когда враг поражен, появляется правильное число, и оно направлено в правильном направлении, однако я хотел бы добавить случайную переменную в позицию появления, чтобы она не появлялась в одном и том же месте.Что происходит, так это то, что ось меняется в зависимости от направления, в котором находится объект (смотрит на игрока).Другими словами, если я хочу получить случайную ось x, она изменится на y и z в зависимости от вращения объекта.

Вот несколько картинок, которые помогут описать: enter image description here

Проблема: enter image description here

Это код, который я использую, он прикреплен к символу:

void ShowFloatingText(int amt)
{
    Transform c = transform.Find("DamageSpawn").transform;
    GameObject go = PhotonNetwork.Instantiate("DamageText", transform.position, Quaternion.identity, 0, null);
    go.transform.SetParent(this.transform);
    go.transform.localPosition = c.localPosition;
    go.transform.localPosition += new Vector3(Random.Range(-randomizeInt.x, randomizeInt.x), Random.Range(-randomizeInt.y/2, randomizeInt.y/2), 0);

    go.GetComponent<TextMesh>().text = amt.ToString();
}

Он прикреплен кПовреждение объекта и текст поворота:

 public void GetCamera()
 {
    GameObject[] g = GameObject.FindGameObjectsWithTag("Player");
    foreach (GameObject gg in g)
    { 
        if (gg.gameObject.layer == LayerMask.NameToLayer("isSelf"))
        {
            cam = gg.transform.Find("FirstPersonCharacter").GetComponent<Camera>();


        }
    }

}
private void Start()
{
    Destroy(gameObject, 1.5f);
    //transform.position += offset;
    GetCamera();

}
void Update()
{
    if (cam == null) 
    {
        GetCamera();
    }
    else
    {
        transform.LookAt(transform.position + cam.transform.rotation * Vector3.forward, cam.transform.rotation * Vector3.up);
    }

}

Я был бы признателен и помог бы решить эту проблему.Спасибо

1 Ответ

0 голосов
/ 28 сентября 2018

Попробуйте вместо этого

void ShowFloatingText(int amt)
{
    Transform c = transform.Find("DamageSpawn").transform;
    GameObject go = PhotonNetwork.Instantiate("DamageText", transform.position, Quaternion.identity, 0, null);
    go.transform.SetParent(this.transform);
    go.transform.localPosition = c.localPosition;
    go.transform.localPosition += go.transform.right * Random.Range(-randomizeInt.x/2, randomizeInt.x/2);
    go.transform.localPosition += new Vector3(0, Random.Range(-randomizeInt.y/2, randomizeInt.y/2), 0);

    go.GetComponent<TextMesh>().text = amt.ToString();
}

Это учитывает вращение преобразования и переводит этот вектор вместо простого перемещения игрового объекта вдоль оси X мирового пространства, предполагая, чтоRandom.Range () возвращает int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...