以下是一个使用协程在鼠标右键点击位置生成预制体的 Unity 脚本示例:

using UnityEngine;

public class SpawnPrefabOnRightClick : MonoBehaviour
{
    public GameObject prefab; // 需要生成的预制体

    private void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            Vector3 spawnPosition = GetMouseWorldPosition();
            StartCoroutine(SpawnPrefab(spawnPosition));
        }
    }

    private Vector3 GetMouseWorldPosition()
    {
        Vector3 mousePosition = Input.mousePosition;
        mousePosition.z = -Camera.main.transform.position.z;
        return Camera.main.ScreenToWorldPoint(mousePosition);
    }

    private IEnumerator SpawnPrefab(Vector3 spawnPosition)
    {
        GameObject newPrefab = Instantiate(prefab, spawnPosition, Quaternion.identity);
        yield return null; // 等待一帧,确保生成的预制体已经被实例化

        // 在这里可以添加其他需要等待的逻辑

        yield break; // 协程结束
    }
}

这段脚本首先在 Update 方法中检测鼠标右键点击事件。当检测到右键点击后,获取鼠标在世界坐标系中的位置,并调用 SpawnPrefab 协程来生成预制体。

GetMouseWorldPosition 方法将鼠标屏幕坐标转换为世界坐标。SpawnPrefab 协程则使用 Instantiate 方法在指定位置生成预制体,并使用 yield return null 来等待一帧,确保预制体已经被实例化。

你可以将以上代码添加到一个空的游戏对象上,然后将需要生成的预制体赋值给 prefab 变量。


原文地址: https://www.cveoy.top/t/topic/pP2f 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录