Unity 脚本:鼠标右键生成预制体并移动至右键位置(协程)
以下是一个使用协程在 Unity 中实现鼠标右键生成预制体并移动的脚本:\n\ncsharp\nusing UnityEngine;\n\npublic class RightClickSpawn : MonoBehaviour\n{\n public GameObject prefab; // 预制体\n public float moveSpeed = 5f; // 移动速度\n\n private void Update()\n {\n // 检测鼠标右键按下\n if (Input.GetMouseButtonDown(1))\n {\n // 获取鼠标右键位置\n Vector3 spawnPosition = GetSpawnPosition();\n\n // 生成预制体并开始移动\n StartCoroutine(SpawnAndMove(spawnPosition));\n }\n }\n\n private Vector3 GetSpawnPosition()\n {\n // 获取鼠标右键位置\n Vector3 mousePosition = Input.mousePosition;\n mousePosition.z = transform.position.z;\n\n // 将屏幕坐标转换为世界坐标\n Vector3 spawnPosition = Camera.main.ScreenToWorldPoint(mousePosition);\n\n // 将生成位置调整到右键的左斜上方靠近相机边缘位置\n float offset = 0.5f; // 生成位置偏移量\n spawnPosition += new Vector3(-offset, offset, 0f);\n\n return spawnPosition;\n }\n\n private IEnumerator SpawnAndMove(Vector3 spawnPosition)\n {\n // 生成预制体\n GameObject spawnedObject = Instantiate(prefab, spawnPosition, Quaternion.identity);\n\n // 获取预制体当前位置\n Vector3 targetPosition = Input.mousePosition;\n targetPosition.z = spawnedObject.transform.position.z;\n\n // 将目标位置调整为鼠标右键位置\n targetPosition = Camera.main.ScreenToWorldPoint(targetPosition);\n\n // 移动预制体\n while (Vector3.Distance(spawnedObject.transform.position, targetPosition) > 0.1f)\n {\n spawnedObject.transform.position = Vector3.MoveTowards(spawnedObject.transform.position, targetPosition, moveSpeed * Time.deltaTime);\n yield return null;\n }\n\n // 销毁预制体\n Destroy(spawnedObject);\n }\n}\n\n\n解释:\n\n1. Update 函数中检测鼠标右键按下,如果按下则获取鼠标位置并生成预制体。\n2. GetSpawnPosition 函数用于获取生成位置,首先获取鼠标右键位置,然后将其转换为世界坐标,并进行偏移调整。\n3. SpawnAndMove 协程函数用于生成预制体并移动,首先生成预制体,然后获取鼠标右键位置作为目标位置,并开始移动预制体。在移动过程中,使用 Vector3.MoveTowards 函数逐渐将预制体移动到目标位置,直到到达目标位置后销毁预制体。\n4. 移动速度通过 moveSpeed 变量控制,可以在 Inspector 视图中调整。\n5. prefab 变量为需要实例化的预制体,可以在 Inspector 视图中将预制体拖拽到该变量中。
原文地址: https://www.cveoy.top/t/topic/pP3z 著作权归作者所有。请勿转载和采集!