Созданный экземпляр gameObject в Unity не будет обновлять Transform.position (РЕШЕНО)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Созданный экземпляр gameObject в Unity не будет обновлять Transform.position (РЕШЕНО)

Сообщение Anonymous »

Недавно я начал программировать на Unity.
Я пытаюсь создать простую 2D-игру в жанре Tower Defense в качестве учебного проекта. У меня есть простой спрайт игрока с торчащим стволом пулемета.
PlayerScript содержит только механику вращения. Дочерним элементом моего PlayerObject является MachineGunObject со своим собственным скриптом, содержащим простую механику перезарядки и стрельбы. В случае выстрела скрипт создает экземпляр префаба MachineGunBullet.

Код: Выделить всё

using UnityEngine;

public class MachineGunScript : MonoBehaviour
{
private float timer = 0f;
private bool reloaded = false;
public GameObject bullet;

[SerializeField] private float floatCooldown = 0.2f;

private void Start() {
reloaded = false;
}

private void Update() {
if (timer > floatCooldown) {
reloaded = true;
timer = 0f;
Debug.Log("Reloaded");
}

if (reloaded == false) {
timer += Time.deltaTime;
}

if (reloaded && Input.GetKey(KeyCode.Z)) {
ShootingMachineGun();
}
}

private void ShootingMachineGun() {
reloaded = false;
Instantiate(bullet, transform.position, GetComponentInParent().rotation);
Debug.Log("Shooting");
}
}
MachineGunBullet содержит собственный скрипт, заключающийся в считывании угла. Теперь я хочу попробовать переместить пулю в направлении угла, используя Transform.position += ...
Это не работает, похоже, Transform.position не хочет меняться. Позиция всегда оставалась (0, 0, 0) для всех параметров, перечисленных ниже, а также для текущего параметра в коде, который будет предпочтительнее.

Код: Выделить всё

using UnityEngine;

public class MachineGunBulletScript : MonoBehaviour
{
private float rotationDirection;
private Vector2 travelDirection;
private Vector3 positionChanger;

[SerializeField] private float moveSpeed = 10f;

private void Start() {
rotationDirection = transform.eulerAngles.z + 90f;
if (rotationDirection >= 360) {
rotationDirection -= 360;
}
Debug.Log(rotationDirection);
rotationDirection = (rotationDirection * Mathf.PI) / 180f;
Vector2 travelDirection = new Vector2(Mathf.Cos(rotationDirection), Mathf.Sin(rotationDirection));
travelDirection = travelDirection.normalized;
Vector3 positionChanger = new Vector3(travelDirection.x, travelDirection.y, 0f);
Debug.Log(travelDirection);
Debug.Log(positionChanger);
}

private void Update() {
transform.position += moveSpeed * Time.deltaTime * positionChanger;
}
}
Пули правильно созданы в правильном направлении, так что в этом нет ничего плохого. Префаб Bullet содержит только преобразование, скрипт и простой капсульный 2D-коллайдер.
  • с использованием FixUpdate() это ничего не меняет, поскольку обновление работает нормально (Debug. Log() может, например, выводить имя клона, поэтому он обязательно обновляется)
  • Я читал, что возможно, что он пытается переместить сборный блок вместо клона, но даже это .gameObject.transform.position += ... нет работа или такие вещи, как myInstance.
  • Я пробовал создать RigidBody2D и использовать скорость, и это тоже не работает (если только не реализовано неправильно)
Странно то, что я создал дерьмовую игру Flappy Bird (после просмотра руководств на yt) и там использую точно такую ​​же технику: создаю экземпляр в другом PipeSpawnerScript, затем перехожу к PipeScript, также используя преобразование. позиция += ...

Подробнее здесь: https://stackoverflow.com/questions/793 ... ion-solved
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Созданный экземпляр gameObject в Unity не будет обновлять Transform.position.
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Созданный экземпляр gameObject в Unity не будет обновлять Transform.position.
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Созданный экземпляр gameObject в Unity не будет обновлять Transform.position.
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Vuetify: justify-position/align-position vs justify="position"/align="position"
    Anonymous » » в форуме CSS
    0 Ответы
    76 Просмотры
    Последнее сообщение Anonymous
  • Unity, Rigidbody.MovePosition() не работает, если Transform.position только что изменен
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»