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

Posted

技术标签:

【中文标题】从另一个 GameObject 的脚本设置变换【英文标题】:Set transform from another GameObject's script 【发布时间】: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 打错了? 我什至无法理解您遇到的问题。 【参考方案1】:

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

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

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

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

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

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

    确保 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 的解决方案,以便问题得到一个接受的答案,否则它将保留在不接受的答案列表中......

以上是关于从另一个 GameObject 的脚本设置变换的主要内容,如果未能解决你的问题,请参考以下文章

unity每次用手柄点击button,都变换物体的材质

unity3d 如何把gameobject上的脚本删除

NGUI的怎么在一个Gameobject(游戏物体)中调用另一个Gameobject(游戏物体)的脚本(C#)

如何通过脚本查找 GameObject 的子对象或附加到子 GameObject 的脚本

Unity编程标准导引-3.3 Transform

unity3d中给GameObject绑定脚本的代码