разница gameObject.transform.position и transform.position ?

Общие вопросы о Unity3D

разница gameObject.transform.position и transform.position ?

Сообщение NCsoft 14 фев 2017, 06:41

Всем привет !
подскажите пожалуйста , а чём разница между

Синтаксис:
Используется csharp
        transform.position = new Vector3(0,0,0);
        gameObject.transform.position = new Vector3(0, 0, 0);
 

или это для упрощения было сделано ?

кто-то сказал что :

если получать данные из gameObject.transform.position.x то они будут в float
а если получать данные из transform.position.x то они будут в double
проверил , создал var и оказывается что var стаёт float что там - что там
бред полный в общем

теперь задался ещё больше вопросом , зачем 2 метода выполняющие одну и ту же функцию ?

или это равносильно что в собственном классе example вызвать функцию example.Function() за место простого Function() ?
:-B :-?

хотя помню были такие ситуации когда с перехода из юнити версии 3 на 4 они много изменили синтаксисов функций но при этом оставили и старые варианты
а в 5 версии полностью их убрали
похожая ситуация была с Application.LoadLevelAsync
https://docs.unity3d.com/ScriptReference/Application.LoadLevelAsync.html

вот почему то подумал что какой то из них устаревший наверное ...
кто что подскажет ?

:ymdaydream:
 
Аватара пользователя
NCsoft
UNIт
 
Сообщения: 147
Зарегистрирован: 14 мар 2014, 05:47
Откуда: Украина
Skype: GM_NCsoft

Re: разница gameObject.transform.position и transform.position ?

Сообщение jetyb 14 фев 2017, 08:08

кто-то сказал что :
если получать данные из gameObject.transform.position.x то они будут в float

Кто-то бредил.

Есть два разных класса Component (от которого унаследован MonoBehaiviour, от которого унаследованы скрипты) и GameObject.
Обоим классам удобно иметь свойство transform ссылающееся на один и тот же компонент. Это не самоповторение, а ссылка на нужную вещь в разных классах.
Разницы нет, удобно использовать свойство того класса где находишься.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: разница gameObject.transform.position и transform.position ?

Сообщение NCsoft 15 фев 2017, 04:04

jetyb писал(а):удобно использовать свойство того класса где находишься.

вот это мне не понятно , как это понять ?

к примеру я пишу свой скрипт передвижения персонажа от сетевых данных
мой класс называется TransformNET.css и естественно он public class TransformNET: MonoBehaviour

и как мне узнать где я нахожусь ?
как мне правильно года считывать позицию и устанавливать ?

Синтаксис:
Используется csharp
using System;
using System.IO;
using UnityEngine;
using UnityEngine.AI;

public class TransformNET : MonoBehaviour
{
    private static int id;
    private static int num;
    private static Vector3 position;
    private NavMeshAgent navMeshAgent;
    private void Start()
    {
        navMeshAgent = GetComponent<NavMeshAgent>();
        int.TryParse(transform.name, out id);
    }
    private void Update()
    {
        if(id != database.player.id) Set();
        else if(id == database.player.id) Send();
    }
    public static void Get(int Id, int Num, Vector3 Position)    // Hander устанавливает новые пакеты передвижения через TransformNET.Get();
    {
        if(id == Id && num < Num)    // Проверяем принадлежат ли они этому объекту и не являются ли они устаревшими которые потерялись по пути
        {
            num = Num;    //    Счётчик отправленных пакетов , что бы отфильтровать потерянные пакеты которые могут прийти с опазданием
            position = Position;    // Запоминаем новые координаты
        }
    }
    private void Set()
    {
        // Если координаты не изменились не заставляем систему устанавливать на те-же координаты
        if (transform.position != position) navMeshAgent.SetDestination(position);
    }
    private void Send()
    {
        // Не спамим серверу если мы не двигались
        if (transform.position != position)
        {
            num++;
            position = transform.position;
            server.Send(id, num, position);
        }
    }
}
 


В общем что мне в этом случае использовать ?
gameObject.transform.position или transform.position ?
подскажите пожалуйста !

:D :D :D
 
Аватара пользователя
NCsoft
UNIт
 
Сообщения: 147
Зарегистрирован: 14 мар 2014, 05:47
Откуда: Украина
Skype: GM_NCsoft

Re: разница gameObject.transform.position и transform.position ?

Сообщение Dewa1s 15 фев 2017, 05:35

Это ссылки на один и тот же объект, никакой разницы нет
Аватара пользователя
Dewa1s
Старожил
 
Сообщения: 564
Зарегистрирован: 26 дек 2011, 02:12

Re: разница gameObject.transform.position и transform.position ?

Сообщение samana 15 фев 2017, 10:12

Здесь уже объяснили разными словами, добавлю и ещё один вариант.
Любой ваш скрипт MonoBehaviour - это компонент (такой же как и RigidBody, BoxCollider и т.д.). Компоненты можно повесить только на игровой объект, то-есть на GameObject. Любой компонент автоматически знает, на каком объекте он висит, для этого у компонента и есть свойство gameObject, которое имеет ссылку на объект сцены.
Любой объект на сцене (GameObject) не может существовать без позиции в пространстве, ведь он конкретный объект, который где-то находится в 3d мире. Поэтому у каждого GameObject-а автоматически есть компонент Transform, без которого объект на сцене просто не может существовать. А так как GameObject и его Transform - всегда в связке, то любой компонент (скрипт MonoBehaviour) имеет так же свойство transform, которое указывает на Transform того объекта сцены, которому принадлежит данный компонент.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: разница gameObject.transform.position и transform.position ?

Сообщение jetyb 15 фев 2017, 10:28

Используйте что лаконичнее - transform.position.

Если же вы индусский программист, и вам платят за количество кода, то можете писать и так:
Синтаксис:
Используется csharp
gameObject.transform.gameObject.transform.gameObject.transform.gameObject.transform.gameObject.transform.position = new Vector3();
 
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: разница gameObject.transform.position и transform.position ?

Сообщение samana 15 фев 2017, 10:29

jetyb писал(а):Если же вы индусский программист, и вам платят за количество кода, то можете писать и так:
Синтаксис:
Используется csharp
gameObject.transform.gameObject.transform.gameObject.transform.gameObject.transform.gameObject.transform.position = new Vector3();
 


=))
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: разница gameObject.transform.position и transform.position ?

Сообщение getAlex 15 фев 2017, 11:31

jetyb писал(а):Используйте что лаконичнее - transform.position.

Если же вы индусский программист, и вам платят за количество кода, то можете писать и так:
Синтаксис:
Используется csharp
gameObject.transform.gameObject.transform.gameObject.transform.gameObject.transform.gameObject.transform.position = new Vector3();
 


Сразу видно что вы с индусами не работали. Индусы пишут так:

Синтаксис:
Используется csharp
int variableX = 1;
int variableY = 1;
int variableZ = 1;

void Start()
{
bool ok = true;
int iter = 0;
while(ok)
{
float variableXf = (float)variableX;
float variableYf = (float)variableY;
float variableZf = (float)variableZ;
Vector3 vctr = new Vector3(variableXf, variableYf, variableZf );
vctr = vctr *0f;
if(vctr.x>=-0.0001f && vctr.x<=0.0001f && vctr.y>=-0.0001f && vctr.y<=0.0001f && vctr.z>=-0.0001f && vctr.z<=0.0001f)
{
this.gameObject.transform.position = vctr;
ok = false;
}
else
{
iter=iter+1;
if(iter>100)
{
this.gameObject.transform.position = new Vector3(0.000f,0.000f,0.000f);
if(this.gameObject.transform.position.x!=0f || this.gameObject.transform.position.y!=0f || this.gameObject.transform.position.z!=0f )
this.gameObject.transform.position = Vector3.zero;
ok = false;
}
}
}
}
 
getAlex
Адепт
 
Сообщения: 1775
Зарегистрирован: 10 авг 2013, 18:30

Re: разница gameObject.transform.position и transform.position ?

Сообщение jetyb 15 фев 2017, 13:57

getAlex , :)) :ymapplause:
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: разница gameObject.transform.position и transform.position ?

Сообщение NCsoft 18 фев 2017, 11:04

jetyb писал(а):Используйте что лаконичнее - transform.position.
Если же вы индусский программист, и вам платят за количество кода, то можете писать и так:
Синтаксис:
Используется csharp
gameObject.transform.gameObject.transform.gameObject.transform.gameObject.transform.gameObject.transform.position = new Vector3();
 



getAlex писал(а):
Сразу видно что вы с индусами не работали. Индусы пишут так:

Синтаксис:
Используется csharp
int variableX = 1;
int variableY = 1;
int variableZ = 1;

void Start()
{
bool ok = true;
int iter = 0;
while(ok)
{
float variableXf = (float)variableX;
float variableYf = (float)variableY;
float variableZf = (float)variableZ;
Vector3 vctr = new Vector3(variableXf, variableYf, variableZf );
vctr = vctr *0f;
if(vctr.x>=-0.0001f && vctr.x<=0.0001f && vctr.y>=-0.0001f && vctr.y<=0.0001f && vctr.z>=-0.0001f && vctr.z<=0.0001f)
{
this.gameObject.transform.position = vctr;
ok = false;
}
else
{
iter=iter+1;
if(iter>100)
{
this.gameObject.transform.position = new Vector3(0.000f,0.000f,0.000f);
if(this.gameObject.transform.position.x!=0f || this.gameObject.transform.position.y!=0f || this.gameObject.transform.position.z!=0f )
this.gameObject.transform.position = Vector3.zero;
ok = false;
}
}
}
}
 



=)) =)) =)) =)) =)) =)) :)) :)) :)) :)) :)) :))
Аватара пользователя
NCsoft
UNIт
 
Сообщения: 147
Зарегистрирован: 14 мар 2014, 05:47
Откуда: Украина
Skype: GM_NCsoft

Re: разница gameObject.transform.position и transform.position ?

Сообщение NICO 31 июл 2021, 03:44

NCsoft писал(а):Всем привет !
подскажите пожалуйста , а чём разница между

Синтаксис:
Используется csharp
        transform.position = new Vector3(0,0,0);
        gameObject.transform.position = new Vector3(0, 0, 0);
 

или это для упрощения было сделано ?

кто-то сказал что :

если получать данные из gameObject.transform.position.x то они будут в float
а если получать данные из transform.position.x то они будут в double
проверил , создал var и оказывается что var стаёт float что там - что там
бред полный в общем

теперь задался ещё больше вопросом , зачем 2 метода выполняющие одну и ту же функцию ?

или это равносильно что в собственном классе example вызвать функцию example.Function() за место простого Function() ?
:-B :-?

хотя помню были такие ситуации когда с перехода из юнити версии 3 на 4 они много изменили синтаксисов функций но при этом оставили и старые варианты
а в 5 версии полностью их убрали
похожая ситуация была с Application.LoadLevelAsync
https://docs.unity3d.com/ScriptReference/Application.LoadLevelAsync.html

вот почему то подумал что какой то из них устаревший наверное ...
кто что подскажет ?

:ymdaydream:
 

Насколько я понял, transform.position - ты прописываешь координаты на тот объект, на котором висит данный скрипт, т. е. обходишься без его наименования, так как сам скрипт на нем, а в gameObject.transform.position в поле gameObject можно прописать любой объект, который есть вообще. Можно задать координаты сторонним объектам в зависимости от определенных действий и наоборот. Например:
Синтаксис:
Используется csharp
        if (Player.transform.position.x < 347.5
            transform.position = Vector3.MoveTowards (transform.position, new Vector3 (0, 0, 0), 100f);

Здесь я ссылаюсь на сторонний объект, т. е. прописываю: ежели игрок по оси х меньше 347.5, то transform.position ... Т. е. в данном контексте просто transform.position - это ссыль на тот объект, на котором висит сам скрипт.
NICO
UNIт
 
Сообщения: 123
Зарегистрирован: 30 июл 2021, 23:30


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 14