c# - 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;
}
}
解决方案
你的意思是在Unity中称为预制件。请查看文档。
基本上,您将一个现成的对象存储在您的项目中(例如,通过将其从层次结构拖到项目文件夹中)并使用GameObject.Instantiate(...)
而不是您的GameObject.CreatePrimitive(...)
调用来创建它。
修改后的代码:
[SerializeField] GameObject prefabToBeUsed;
private void PlaceCubeNear(Vector3 clickPoint)
{
Vector3 finalPosition = grid.GetNearestPointOnGrid(clickPoint);
GameObject.Instantiate(prefabToBeUsed, finalPosition, Quaternion.identity);
}
推荐阅读
- android - Android POJO 类中的 JSON 解析
- python-3.x - 如何在 Python 中检查字符串语言
- r - 如何根据条件将每一列的值替换为下一列的值
- javascript - 如何在 html webapp 表中过滤和显示工作表数据
- python - 是什么导致 concurrent.futures 死锁?包含代码
- html - 调整浏览器窗口大小时修复两个菜单块中的文本
- python - 获取项目中每个文件的 pylint-score
- python - 查找内部字典中的所有值组合
- c# - 如何创建未知多维参数?
- javascript - resizeObserver vs intersectionObserver 性能