从另一个GameObject的脚本设置转换

时间:2014-05-31 23:35:48

标签: unity3d instantiation unityscript gameobject

我正在尝试制作一个脚本,以便在实例化时设置对象。问题是,我不清楚如何做到这一点。我有这个功能..

function spawnPlayer()
{
    var CameraScript = GameObject.Find(PlayerPrefab.name).GetComponent("Camera Control");
    Network.Instantiate(PlayerPrefab, spawnObject.position, Quaternion.identity, 0);
}

PlayerPrefab将成为将要实例化的预制件。当发生这种情况时,我需要在另一个GameObject上设置实例化的gameObject,这个GameObject是一个名为“Camera Control”的脚本,里面有一个我想要设置的变换Target。怎么做?

2 个答案:

答案 0 :(得分:21)

您发布的代码不对。您正在使用PlayerPrefab的名称来查找连接到相机的Camera Control脚本?通过该逻辑,然后在实例化PlayerPrefab的那一刻,在第二行,您将有第二个相机。

我认为您想要做的是:实例化播放器预制件并让相机指向播放器

所以我假设创建了CameraControl脚本。在开始编码之前,您需要以下内容。

  1. CameraControl脚本附加到场景中的摄像头。

    enter image description here

  2. 确保Player脚本附加到播放器预制件。

    enter image description here

  3. 有第三个脚本来实例化PlayerPrefab。我会称之为Instantiator。将它附加到场景中的空GameObject,将其视为世界GameObject。我们称之为世界。

  4. 确保Instantiator脚本附加到World GameObject并且它指向PlayerPrefab。

    enter image description here


  5. 代码:Instantiator

    Instantiator脚本将产生并创建我们将在场景中使用的东西。

     #pragma strict
    
    var PlayerPrefab : GameObject;
    
    function Start () 
    {
        // You can add position and rotation to the function call if you like.
        var p = Instantiate(PlayerPrefab) as GameObject;
    
        // Find the camera script and point to Player's transform.
        Camera.main.GetComponent("CameraControl").SendMessage("setTarget", p.transform);
    }
    

    注意我使用的事实是场景中的MainCamera为你标记,因此很容易找到。


    代码:CameraControl

    CameraControl将具有您认为合适的跟随播放器的逻辑。请注意,目标将指向相机将关注的内容。当然,在播放器周围你必须写。

    var target : Transform;
    
    function setTarget(t : Transform)
    {
        target = t;
    }
    

    我刚学会了一些JavaScript。我之前从未使用过它。

答案 1 :(得分:2)

我找到了解决方案。

我在问题上的意思是将我的相机脚本设置为实例化对象的变换。

我没有用每个对象的脚本值制作许多空对象;它花了我几个小时来找到它因为我不知道unity如何处理脚本对象调用。

这就是我的成就:

var PlayerPrefab : GameObject;
var spawnObject : Transform;
private var MainCamera : GameObject;

function spawnPlayer()
{
    var player = Instantiate(PlayerPrefab, spawnObject.position, Quaternion.identity);
    MainCamera = GameObject.Find("MainCamera");

    player.name = "Ball";

    if(MainCamera)
    {
        MainCamera.GetComponent.<CameraControl>().target = player.transform;
        Debug.Log("Succeed.");
    }
}

像这样,我的相机将自动拥有新实例化对象的变换属性。