prefab unity изменяет размеры prefab в игровом режиме, когда в другой сцене - PullRequest
0 голосов
/ 03 мая 2018

У меня возникла эта проблема с моими 2d спрайтами (в моем случае - с персонажами врагов), где, если у меня уже есть готовый префаб из одной сцены, который работает просто отлично, и я использую этот префаб в другой сцене, размер не то же самое, но он ведет себя так же, если сталкивается со стеной или чем-то другим (он поворачивает в другом направлении). Это не скрипт, потому что скрипт движения прикреплен к другим игровым объектам, которые на данный момент ведут себя так же, и эти префабы просто отлично импортируются в другие сцены. Кто-нибудь знает, если это ошибка Unity или что-то? Это не проблема сценария, я уверен. На самом деле, я знаю, что это не потому, что это случилось с другими врагами с разными сценариями. Иногда эта проблема возникает только в одной сцене, иногда в нескольких, иногда во всех, если только это не оригинальная сцена, в которой был создан игровой объект и сборный дом.

Я должен также упомянуть, что когда я создаю настоящую игру, игровые объекты работают так, как должны. Это происходит только тогда, когда я участвую в программе единства. Но я не могу должным образом протестировать некоторые сцены, если не буду строить игровую сцену снова и снова, что было бы очень контрпродуктивно.

вот сценарий, прикрепленный к врагу для тех, кто настаивает.

using UnityEngine;
using System.Collections;

public class foeHP : MonoBehaviour {

public GameObject deathFlamePrefab;
Rigidbody2D erb;
public float Walk= 2.5f;
private float idle = 0f;
public float move = 2.5f;
public float hp = 3f;
private slicer slicy;
Animator anim;
private bool alive = true;
private bool damager = false;
private float invuln = 0f;
private bool nothurt = true;
public float wallCheckRadius;
public LayerMask whatIsWall;
private bool wallHit;
private bool goRight;
private bool atEdge = false;

public bool spotted;
public float xScale;
public float yScale;


public Transform wallCheck;

public Transform edgeCheck;
public GameObject bonePrefab;
public Transform boneSpawn;
public float fireDelay = 0.5f;
public float coolDownTimer = 0f;
public float timer3 = 0.75f;
private bool damagePlayed = false;


void Start ()
{
    anim = GetComponent<Animator>();
    erb = GetComponent<Rigidbody2D> ();


}

void Update ()
{

    invuln -= Time.deltaTime;
    Recover ();
    HandleMovement ();
    notHurting ();
//      Born ();
    damagePlayed = false;
}
public void takeDamage (float amount)
{
    hp -= amount;
    damager = true;



    if (!damagePlayed && alive && hp <= 0) 
    {

        Instantiate (deathFlamePrefab, transform.position, transform.rotation); 
        Destroy (gameObject); 

    } 
    if (alive && hp > 0) {
        anim.SetTrigger ("damaged");
        invuln = 0.5f;
        gameObject.layer = 14;
        Invoke ("layerReturn", timer3);
    }
    if (alive && hp > 0 && !damagePlayed) {
            soundManager.PlaySFX ("enemyHit");
            damagePlayed = true;
    }
}

void layerReturn()
{
    gameObject.layer = 12;
}

public void HandleMovement()
{
    if (wallCheck == null) {
        return;
    } else {

    wallHit = Physics2D.OverlapCircle (wallCheck.position, wallCheckRadius, whatIsWall);
    atEdge = Physics2D.OverlapCircle (edgeCheck.position, wallCheckRadius, whatIsWall);


        if (wallHit || !atEdge)
            goRight = !goRight;

        if (goRight) {
            transform.localScale = new Vector3 (-xScale, yScale, 1f);
            erb.velocity = new Vector2 (move, erb.velocity.y);
            anim.SetFloat ("walk", Mathf.Abs (move));
        } else {
            transform.localScale = new Vector3 (xScale, yScale, 1f);
            erb.velocity = new Vector2 (-move, erb.velocity.y);
            anim.SetFloat ("walk", Mathf.Abs (move));

        }
    }

    Physics2D.IgnoreLayerCollision (12, 12);
}

public void Recover ()
{
    if (invuln <= 0)
        gameObject.layer = 12;
    nothurt = false;


    if (invuln <= 0)
        anim.SetLayerWeight (1, 0);
    nothurt = true;
}


public void notHurting()
{
    if (invuln > 0)
        erb.velocity = Vector2.zero;
}


void OnTriggerEnter2D (Collider2D other)
{

    if (other.gameObject.tag == "Player")
        spotted = true;
    else
        spotted = false;

}


/*  void Born ()
{
    coolDownTimer -= Time.deltaTime;


    if (spotted && coolDownTimer <= 0) 
    {


        coolDownTimer = fireDelay;

        anim.SetTrigger ("Throw");
        Instantiate (bonePrefab, boneSpawn.position, boneSpawn.rotation);

        if (!spotted)
            fireDelay = 0;  
    }   
}
*/
}
...