Unity 鼠标右键生成预制体并移动到点击位置 - 协程实现
{ 'using System.Collections; using UnityEngine;
public class MouseRightClick : MonoBehaviour { public GameObject prefab; // 需要生成的预制体 public float moveSpeed = 5f; // 预制体的移动速度
private Camera mainCamera;
private void Start()
{
mainCamera = Camera.main;
}
private void Update()
{
// 监听鼠标右键按下事件
if (Input.GetMouseButtonDown(1))
{
// 获取鼠标右键的位置
Vector3 mousePosition = Input.mousePosition;
// 计算预制体生成位置
Vector3 spawnPosition = GetSpawnPosition(mousePosition);
// 开始协程,生成预制体并移动
StartCoroutine(SpawnAndMove(prefab, spawnPosition, mousePosition));
}
}
private Vector3 GetSpawnPosition(Vector3 mousePosition)
{
// 将鼠标位置转换为世界坐标
Vector3 worldPosition = mainCamera.ScreenToWorldPoint(mousePosition);
// 在右键的左斜上方靠近屏幕边缘位置生成预制体
Vector3 spawnPosition = new Vector3(worldPosition.x - 1f, worldPosition.y + 1f, 0f);
return spawnPosition;
}
private IEnumerator SpawnAndMove(GameObject prefab, Vector3 spawnPosition, Vector3 targetPosition)
{
// 生成预制体
GameObject clone = Instantiate(prefab, spawnPosition, Quaternion.identity);
// 移动预制体
while (Vector3.Distance(clone.transform.position, targetPosition) > 0.01f)
{
clone.transform.position = Vector3.MoveTowards(clone.transform.position, targetPosition, moveSpeed * Time.deltaTime);
yield return null;
}
// 销毁预制体
Destroy(clone);
}
} '}
原文地址: https://www.cveoy.top/t/topic/pP2X 著作权归作者所有。请勿转载和采集!