- A
GetComponent
означает в основном просто захват компонента объекта. Возьмите простой пример: Main Camera
имеет много компонентов:
1.1. Transform
компонент. Этот компонент, как вы поняли, используется для определения положения, поворота и масштабирования объекта
1.2. Camera
компонент. Здесь много полей
1.3. A Flare Layer
компонент.
et c.
Эти компоненты могут быть получены с помощью скрипта. Причина, по которой разработчики используют это, заключается в их свойствах. Например, сказав Transform playerTransformComp = player.GetComponent<Transform>();
, вы сможете написать playerTransformComp.position
. position
является свойством объектов типа Transform
.
Я не думаю, что GetComponent
, которые вы видели в этом уроке, полезны, потому что каждый игровой объект в любом случае имеет компонент преобразования, поэтому, если они объявили игрока как public GameObject player;
, то вместо этого использовали player.transform.position
было бы намного проще. На самом деле, я не думаю, что имеет смысл даже объявлять что-то как Transform
, а затем захватывать компонент Transform
. Как сказал @BugFinder в предыдущем посте, урок в целом довольно плохой.
shotSpawn
берет свои значения из ... самого себя! Это публичный c объект, поэтому я предполагаю, что вы перетащили и уронили shotSpawn
объект со сцены в поля скрипта. Это означает, что объект shotSpawn
из сценария - это объект, который вы перетаскивали на поля сценария. Вы можете использовать все его функции, и перетаскиваемый объект будет затронут. Таким образом, вы можете использовать shotSpawn.position
и shotSpawn.rotation
. Я мог бы повторить здесь немного, но, пожалуйста, обратите внимание, что shotSpawn
является Transform
объектом, поэтому вы можете использовать типичные свойства Transform
объекта.
В документации на Transform.position
(а также на Transform.rotation
сказано, что вы должны использовать Vector3
объекты для добавления или вычитания значений к ним.
Можно сделать shotSpawn.position + new Vector3(10f, 5f, 10f)
. Естественно, вы также можете сделать
value = new Vector3(10f, 5f, 10f);
, а затем Instantiate(shot, shotSpawn.position + value, shotSpawn.rotation);
Также, пожалуйста (на будущее), попробуйте задать один вопрос за сообщение, иначе люди проигнорируют ваш вопрос или даже пометят его, и он будет удален. Я когда-то был таким, как вы, поэтому я бы не стал этого делать, но, пожалуйста, примите это во внимание при создании следующих сообщений.