我正在尝试制作一个脚本,以便在实例化时设置对象。问题是,我不清楚如何做到这一点。我有这个功能..
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。怎么做?
答案 0 :(得分:21)
您发布的代码不对。您正在使用PlayerPrefab的名称来查找连接到相机的Camera Control脚本?通过该逻辑,然后在实例化PlayerPrefab
的那一刻,在第二行,您将有第二个相机。
我认为您想要做的是:实例化播放器预制件并让相机指向播放器。
所以我假设创建了CameraControl
脚本。在开始编码之前,您需要以下内容。
将CameraControl
脚本附加到场景中的摄像头。
确保Player
脚本附加到播放器预制件。
有第三个脚本来实例化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);
}
注意我使用的事实是场景中的MainCamera为你标记,因此很容易找到。
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.");
}
}
像这样,我的相机将自动拥有新实例化对象的变换属性。