Unity 脚本:鼠标右键生成预制体并移动到鼠标位置(协程实现)
using UnityEngine; \n\npublic class SpawnAndMove : MonoBehaviour \n{ \n public GameObject prefab; // 预制体 \n public float moveSpeed = 5f; // 移动速度 \n\n private Camera mainCamera; \n private bool isMoving = false; \n\n private void Start() \n { \n mainCamera = Camera.main; \n } \n\n private void Update() \n { \n // 鼠标右键按下时生成预制体并开始移动 \n if (Input.GetMouseButtonDown(1)) \n { \n Vector3 spawnPosition = GetSpawnPosition(); \n if (spawnPosition != Vector3.zero) \n { \n GameObject newObject = Instantiate(prefab, spawnPosition, Quaternion.identity); \n StartCoroutine(MoveToMousePosition(newObject)); \n } \n } \n } \n\n // 获取生成预制体的位置 \n private Vector3 GetSpawnPosition() \n { \n Vector3 spawnPosition = Vector3.zero; \n\n // 获取鼠标右键位置 \n Vector3 mousePosition = Input.mousePosition; \n mousePosition.z = mainCamera.transform.position.y; \n\n // 将屏幕坐标转换为世界坐标 \n Vector3 worldPosition = mainCamera.ScreenToWorldPoint(mousePosition); \n\n // 计算生成位置 \n Vector3 cameraForward = mainCamera.transform.forward; \n Vector3 cameraRight = mainCamera.transform.right; \n float spawnDistance = 1f; // 生成距离相机的距离 \n spawnPosition = worldPosition + (spawnDistance * cameraForward) - (spawnDistance * cameraRight); \n\n return spawnPosition; \n } \n\n // 协程:移动预制体到鼠标右键位置 \n private System.Collections.IEnumerator MoveToMousePosition(GameObject obj) \n { \n isMoving = true; \n\n // 获取鼠标右键位置 \n Vector3 targetPosition = GetMousePosition(); \n\n // 移动预制体 \n while (Vector3.Distance(obj.transform.position, targetPosition) > 0.01f) \n { \n obj.transform.position = Vector3.MoveTowards(obj.transform.position, targetPosition, moveSpeed * Time.deltaTime); \n yield return null; \n } \n\n // 销毁预制体 \n Destroy(obj); \n\n isMoving = false; \n } \n\n // 获取鼠标右键位置 \n private Vector3 GetMousePosition() \n { \n Vector3 mousePosition = Input.mousePosition; \n mousePosition.z = mainCamera.transform.position.y; \n return mainCamera.ScreenToWorldPoint(mousePosition); \n } \n}
原文地址: https://www.cveoy.top/t/topic/pP3v 著作权归作者所有。请勿转载和采集!