Unity 中的 C# Instantiate() 方法解析


官方文档(https://docs.unity3d.com/ScriptReference/Object.Instantiate.html)本身已经讲得比较详细了。

用于描述 rotation 的四元数,这个也阅读过了有关四元数的资料。

目前主要只有一点比较迷惑,先来一段简单的代码,然后再描述疑惑点。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Game : MonoBehaviour
{
    public GameObject chesspiece;

    void Start()
    {
        Instantiate(chesspiece, new Vector3(0, 0, -1), Quaternion.identity);
    }
}

关于我的疑惑点,就是为什么 chesspiece 这个不经初始化就可以直接被克隆?然后结合我看的视频教程,发现,我们在给某一个 GameObject 添加脚本 Component 时,有一步操作,是将我们预制的 Prefab 资源给拖到相关脚本代码的相关属性下,我们之前将 chesspiece 的访问权限设置为 public 正是为了可以在 Unity 的 Inspector 窗口看到它,如下图所示:

20210217210745

就是属性名有了有了一些变化,但是这里的 Chesspiece 和脚本中的 chesspiece 是一致的。

然后我们在脚本中执行 Instantiate() 方法,其实克隆的就是 ChessPiece 这个预制资源,我的这个预制资源在资源管理器中就是这样:

20210217211055

按:GameObject 指的就是在 Unity 的 Hierachy 窗口中显示的资源,如下所示。

20210217210328