Вопрос по методу Instantiate() в Unity

129
21 ноября 2021, 04:20

Необходимо сделать так, что бы при смерти моего главного героя на этом месте появлялся объект - его душа. Почему то в данный момент получается так что его "Душа" "инстантиэйтится" в месте коардинат 0,0,0, хотя задано место где находится в данный момент gameobject главного героя.

public GameObject GhostPref;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
    if (Gnome.dead)
    {
        var b = GameObject.Find("Prototype Body");
        var t = this.transform.rotation;
        Debug.Log(b.transform.position);
        Debug.Log("Сработал инстантиэйт");
        Instantiate(GhostPref,b.transform.position,t);
        Debug.Log(b.transform.position);
        Gnome.dead = false;
    }
}

Причем Debug.Log(b.transform.position); показывает именно те координаты где и должен появляться объект, но появляется он именно в координатах 0,0,0.

Cам скрипт находится в компонентах объекта из которого хочу запустить Instantiate();

Если пишу так:

if(Gnome.dead)
{
         Instantiate(Ghostpref);
         Gnome.dead = false;
} 

ситуация никак не изменяется. Ghostpref появляется в координатах 0,0,0.

Пробовал разные способы, получилось только так:

if (Gnome.dead)
{
    var body = GameObject.Find("Prototype Body");
    var ghost = Instantiate(GhostPref).transform;
    ghost.SetParent(body.transform);
}

теперь объект ghost появляется в нужном мне месте, но мне нужно что бы объект был независимым и не двигался вместе с объектом body когда он двигается.

Answer 1
Debug.Log(b.transform.position);
Instantiate(GhostPref,b.transform.localPosition,t);

Причем Debug.Log(b.transform.position); показывает именно те координаты где и должен появляться объект

В лог вы пишите position, а присваиваете localPosition. Не перепутали тёплое с мягким.

Answer 2

Лучше не дергать Instantiate просто так, это крайне дорого. Сделайте EmptyObject и внутри проложите две модели, одной уберите active галку и включайте через SetActive.

READ ALSO
Загрузка System.Runtime.InteropServices.RuntimeInformation

Загрузка System.Runtime.InteropServices.RuntimeInformation

После ошибки "Пакет Shared Web Component не был правильно загружен" удалил Visual Studio Community 17 и установил Visual Studio Community 19

117
Парсер на c#. IndexOf выдает -1 [дубликат]

Парсер на c#. IndexOf выдает -1 [дубликат]

Пытаюсь получить значение после определенного текста в html коде страницыpage

165
cannot convert from 'System.Security.Claims.ClaimsPrincipal' to 'Microsoft.AspNetCore.Identity.IdentityUser'

cannot convert from 'System.Security.Claims.ClaimsPrincipal' to 'Microsoft.AspNetCore.Identity.IdentityUser'

когда user передаю в метод OrderTicket выдает такую ошибку

259
Проблема с реализацией интерфейса

Проблема с реализацией интерфейса

Столкнулся с проблемой: по заданию курсовой надо создать интерфейс и реализовать его

115