unity脚本鼠标右键后在右键的左斜上方靠近屏幕边缘位置生成一个预制体然后向鼠标右键位置移动到达位置后销毁使用协程来完成添加注释
下面是一个示例的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);
}
}
使用时,将该脚本挂载到一个空GameObject上,并将需要生成的预制体赋值给prefab变量。可以根据需要调整moveSpeed变量来控制预制体的移动速度
原文地址: https://www.cveoy.top/t/topic/h69j 著作权归作者所有。请勿转载和采集!