从另一个 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 的脚本设置变换的主要内容,如果未能解决你的问题,请参考以下文章
NGUI的怎么在一个Gameobject(游戏物体)中调用另一个Gameobject(游戏物体)的脚本(C#)