prefab以错误的比例实例化(统一2d)

时间:2017-10-27 16:30:29

标签: c# unity3d scale local instantiation

我已经看到这个问题在网上问了一堆,但解决方案从来没有在脚本中输入,这正是我想要弄清楚的。我每隔4秒实例化一个对象,并且工作正常。但预制的我实例化在游戏中更大。奇怪的是,在场景视图中(当游戏正在播放时)预制件的大小正确。同样奇怪的是,放大版本是原始精灵比例的版本。但我有其他预编辑与编辑尺度,正确地从大量其他脚本实例化。所以我要做的就是告诉脚本在本地范围内实例化这个预制件,因为我读到它可能是一个世界范围的问题。我的问题是,我该怎么输出????我试过去,Instantiate(敌人,transform.position * transform.localScale.x,transform.rotation * transform.localScale.y);但这显然没有成功:/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class enemySpawnerBasic : MonoBehaviour {

public GameObject enemy;
public Transform enemys;
public float spawnTimer = 0f;
public float spawnDelay = 4f;
private bool spawned;

void Update () 
{
    SpawnEnemy ();
    spawnTimer -= Time.deltaTime;
}

void SpawnEnemy()
{
    if (!spawned && spawnTimer <= 0) {

        Instantiate (enemy, transform.position, transform.rotation);
        spawnTimer = spawnDelay;

    }
}
}

1 个答案:

答案 0 :(得分:0)

  

<强> instantiateInWorldSpace

     

在指定父对象时传递true以维护对象的世界位置,而不是相对于新父对象设置其位置。传递false以设置对象相对于其新父对象的位置。

文档没有说清楚,但同样的布尔值适用于旋转和缩放以及位置。我相信你需要通过false来获得你想要的行为。

由于RectTransforms的行为和预期的行为方式,此参数(以及SetParent(...)上的类似参数)随新UI一起添加。 DMGregory在GameDev SE上有an answer about this个结束。