Я пытаюсь создать простую 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");
}
}
Это не работает, похоже, 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;
}
}
- с использованием FixUpdate() это ничего не меняет, поскольку обновление работает нормально (Debug. Log() может, например, выводить имя клона, поэтому он обязательно обновляется)
- Я читал, что возможно, что он пытается переместить сборный блок вместо клона, но даже это .gameObject.transform.position += ... нет работа или такие вещи, как myInstance.
- Я пробовал создать RigidBody2D и использовать скорость, и это тоже не работает (если только не реализовано неправильно)
Подробнее здесь: https://stackoverflow.com/questions/793 ... m-position