首页 > 解决方案 > unity c# 如何 CreatePrimitive 自定义对象?

问题描述

我试图统一制作一个传送带系统,我有一个网格,当我点击那里时,所有对象都会放置在上面(它来自 jason weimanns 的教程视频)。现在它只是制作立方体。有什么方法可以让我拥有一个包含材料、纹理和组件的预制对象,然后复制它而不是普通的立方体?

这是相关代码:

using UnityEngine;

public class CubePlacer : MonoBehaviour
{
    private Grid grid;

    private void Awake()
    {
        grid = FindObjectOfType<Grid>();
    }

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hitInfo;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out hitInfo))
            {
                PlaceCubeNear(hitInfo.point);
            }
        }
    }

    private void PlaceCubeNear(Vector3 clickPoint)
    {
        var finalPosition = grid.GetNearestPointOnGrid(clickPoint);
        GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position = finalPosition;

        //GameObject.CreatePrimitive(PrimitiveType.Sphere).transform.position = nearPoint;
    }
}

标签: c#unity3d

解决方案


你的意思是在Unity中称为预制件。请查看文档

基本上,您将一个现成的对象存储在您的项目中(例如,通过将其从层次结构拖到项目文件夹中)并使用GameObject.Instantiate(...)而不是您的GameObject.CreatePrimitive(...)调用来创建它。

修改后的代码:

[SerializeField] GameObject prefabToBeUsed;

private void PlaceCubeNear(Vector3 clickPoint)
{
    Vector3 finalPosition = grid.GetNearestPointOnGrid(clickPoint);
    GameObject.Instantiate(prefabToBeUsed, finalPosition, Quaternion.identity);
}

推荐阅读