如何在 Unity 中通过拖放生成地形而不是对象?

How can I generate terrain rather than an object on drag and drop in Unity?

背景

我想知道如何在Unity3D 2020.3版本中编写一个玩家可以通过拖放生成地形的代码。

到目前为止我尝试了什么

我可以在执行前为不可改变的背景创建地形,并在执行期间着陆。

在对象(预制件)的情况下,我确认玩家可以在选定位置生成新对象。

附加到游戏对象的代码

ClickSphere.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ClickSphere : MonoBehaviour
{
    public GameObject prefab;
    private Vector3 mousePosition;
 
    void Update()
    {
        if (Input.GetMouseButtonDown(0)) //the case of drag -> OnMouseDrag() 
        {
        mousePosition = Input.mousePosition;
        mousePosition.z = 10.0f;
        Instantiate(prefab, Camera.main.ScreenToWorldPoint(mousePosition),Quaternion.identity);
        }
    }
}

如何将代码附加到地形以及与对象生成相比如何处理地形?

如果您尝试在 3D 项目中执行此操作,我建议您放置一个平面(您可以在其上放置对象)。然后从相机投射光线(在相机方向 http://docs.unity3d.com/ScriptReference/Physics.Raycast.html)并根据光线击中的对象,实例化要放置在光线击中的高度的对象。所以你可以生成你想要的地形,当用户需要放置东西时,它不会重叠,因为你知道射线和你最初生成的任何地形之间的交点。