【问题标题】:Set transform from another GameObject's script从另一个 GameObject 的脚本设置变换
【发布时间】:2014-07-21 10:37:20
【问题描述】:

我正在尝试制作一个脚本来在实例化时设置一个对象。问题是,我不清楚该怎么做。我有这个功能..

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

PlayerPrefab 将是要被实例化的 Prefab。发生这种情况时,我需要将实例化的游戏对象设置在另一个游戏对象上,该游戏对象是相机,并且有一个名为“相机控制”的脚本,里面有一个我正在尝试设置的转换目标。如何做到这一点?

【问题讨论】:

  • 你的游戏真的是多人游戏,还是Network.Instantiate 打错了?
  • 我什至无法理解您遇到的问题。

标签: unity3d instantiation unityscript gameobject


【解决方案1】:

您发布的代码不正确。您正在使用 PlayerPrefab 的名称来查找附加到相机的相机控制脚本吗?按照这个逻辑,当您在第二行实例化 PlayerPrefab 时,您将拥有第二个摄像头。

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

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

  1. CameraControl脚本附加到场景中的相机。

  2. 确保 Player 脚​​本已附加到 Player Prefab。

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

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


代码:实例化器

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);
}

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


代码:CameraControl

CameraControl 将具有按照您认为合适的方式跟随播放器的逻辑。请注意,目标将指向相机将聚焦的内容。当然跟着你身边的玩家就得写了。

var target : Transform;

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

我刚刚自学了一点 JavaScript。我以前从未使用过。

【讨论】:

    【解决方案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.");
        }
    }
    

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

    【讨论】:

    • 你确实知道我发布的内容是一样的吗?
    • 这似乎是不同的,因为代码使用不同的功能或不同的顺序并且解释文本不同。可能没有恶意。
    • 你应该要么接受你自己的解决方案,要么接受来自 FunctionR 的解决方案,以便问题得到一个接受的答案,否则它将保留在不接受的答案列表中......
    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多