Я работаю над игрой для игрового варенья. Я работаю в Unity2d версии 6000.0.32f1. Я пытаюсь получить круг, который является моим врагом, чтобы встретиться с моим игроком, который также является кругом, обновляя вращение вражеского круга каждый кадр, чтобы встретиться с положением круга игрока. Я использую код, который я построил, который заставляет игрока кружок следовать положению мыши, вычисляя угол между смещениями x и y местоположения указателя в мировых координатах. Я пытаюсь использовать Transform. Возвратное значение функции колеблется между тем, что я ожидаю, которая является позицией круга игрока относительно круга врага, и значение, которое я не ожидал на оси x на оси y. < /p>
я использовал следующий код. Как упомянуто выше, я получил возвращаемые значения от функции Transform.inversetransformpoint (PlayerPos), который был неожиданным, был неожиданным каждый другой призыв к функции. Смотрите изображение ниже вывода. < /P>
using System;
using UnityEngine;
public class Enemy : MonoBehaviour {
Player player;
void Start () {
player = FindFirstObjectByType
();
}
void Update () {
EnemyAI();
}
void EnemyAI () {
if (player == null) return;
Vector3 playerPos = player.gameObject.transform.position;
// Look at Player
Debug.Log("Enemy Player Position: " + playerPos);
Vector3 playerPosRel = transform.InverseTransformPoint(playerPos);
Debug.Log("Enemy Player Position Relative: " + playerPosRel);
float rotationAngle = playerPosRel.x < Mathf.Epsilon ? 0 :
Mathf.Atan(playerPosRel.y/playerPosRel.x) * Mathf.Rad2Deg;
Debug.Log("Enemy Rotation Degrees: " + rotationAngle);
transform.rotation = Quaternion.Euler(
0,
0,
Mathf.Sign(playerPosRel.x) < 0 ?
90 + rotationAngle :
-90 + rotationAngle
);
// Approach Player
transform.position = Vector3.Lerp(
transform.position,
playerPos,
Time.deltaTime
);
}
}
< /code>
Вывод моего кода, который возвращает неожиданное значение, каждый другой вызов Inversetransformpoint
Почему Inversetransformpoint возвращает эти неожиданные значения? Как работает Inversetransformpoint? Какую операцию я могу попробовать отдельно независимо от Inversetransformpoint, чтобы получить позицию игрока относительно врага?
Подробнее здесь: https://stackoverflow.com/questions/794 ... in-unity-6
Transform.inversetransformpoint Неожиданные возвратные значения в Unity 6 ⇐ C#
Место общения программистов C#
1739108844
Anonymous
Я работаю над игрой для игрового варенья. Я работаю в Unity2d версии 6000.0.32f1. Я пытаюсь получить круг, который является моим врагом, чтобы встретиться с моим игроком, который также является кругом, обновляя вращение вражеского круга каждый кадр, чтобы встретиться с положением круга игрока. Я использую код, который я построил, который заставляет игрока кружок следовать положению мыши, вычисляя угол между смещениями x и y местоположения указателя в мировых координатах. Я пытаюсь использовать Transform. Возвратное значение функции колеблется между тем, что я ожидаю, которая является позицией круга игрока относительно круга врага, и значение, которое я не ожидал на оси x на оси y. < /p>
я использовал следующий код. Как упомянуто выше, я получил возвращаемые значения от функции Transform.inversetransformpoint (PlayerPos), который был неожиданным, был неожиданным каждый другой призыв к функции. Смотрите изображение ниже вывода. < /P>
using System;
using UnityEngine;
public class Enemy : MonoBehaviour {
Player player;
void Start () {
player = FindFirstObjectByType
();
}
void Update () {
EnemyAI();
}
void EnemyAI () {
if (player == null) return;
Vector3 playerPos = player.gameObject.transform.position;
// Look at Player
Debug.Log("Enemy Player Position: " + playerPos);
Vector3 playerPosRel = transform.InverseTransformPoint(playerPos);
Debug.Log("Enemy Player Position Relative: " + playerPosRel);
float rotationAngle = playerPosRel.x < Mathf.Epsilon ? 0 :
Mathf.Atan(playerPosRel.y/playerPosRel.x) * Mathf.Rad2Deg;
Debug.Log("Enemy Rotation Degrees: " + rotationAngle);
transform.rotation = Quaternion.Euler(
0,
0,
Mathf.Sign(playerPosRel.x) < 0 ?
90 + rotationAngle :
-90 + rotationAngle
);
// Approach Player
transform.position = Vector3.Lerp(
transform.position,
playerPos,
Time.deltaTime
);
}
}
< /code>
Вывод моего кода, который возвращает неожиданное значение, каждый другой вызов Inversetransformpoint
Почему Inversetransformpoint возвращает эти неожиданные значения? Как работает Inversetransformpoint? Какую операцию я могу попробовать отдельно независимо от Inversetransformpoint, чтобы получить позицию игрока относительно врага?
Подробнее здесь: [url]https://stackoverflow.com/questions/79425003/transform-inversetransformpoint-unexpected-return-values-in-unity-6[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия