1.创建一个准星放在屏幕中间
外部找个PNG透明图,拖到Unity文件夹,右上角改成精灵sprite2d
2.添加到UI画布
3.写脚本
首先,我们需要引入一些 "工具",就像我们在玩游戏时要先下载游戏客户端一样。这里的 "工具" 就是一些命名空间,让我们可以方便地使用 System 和 UnityEngine 类。 🔧
接下来,我们创建了一个名为 RayToScreenMid 的 "小玩具"。这个小玩具有一个重要的 "成员"(在程序中,我们称之为变量),那就是 MianCamera。MianCamera 就是我们的 "摄像头",用来观察游戏世界。我们在玩具的 "启动" 阶段(Start 方法)计算了一下屏幕的 "中心位置",并把结果存放在 ScreenMidPos 变量里。 📝
当我们 "玩"(Update 方法)这个小玩具时,如果鼠标左键被按下,RayShot 方法就会被调用。RayShot 方法就像我们在玩游戏时按下的 "射击" 键,它会从 MianCamera(摄像头)出发,向屏幕中间发射一条 "射线"(Ray)。 🎯
然后,我们使用 Physics.Raycast 方法来检查这条射线是否与游戏中的其他物体 "相撞" 了。如果相撞,我们会检查这个物体是不是 "地形" 或者 "角色",如果不是,我们就会 "消灭"(Destroy)这个物体。 🚀
此外,我们还会在游戏中画出一条从 MianCamera(摄像头)到屏幕中间位置的红色射线。这样,我们就可以清楚地看到这条射线,就像我们在玩游戏时看到的 "血条" 一样。 🎭
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class RayToScreenMid : MonoBehaviour
{// 从视角摄像机向屏幕中间发射射线Camera MianCamera; // 这是一个摄像机对象Vector3 ScreenMidPos; // 这是屏幕中央的点的坐标private void Start(){ScreenMidPos = new Vector3(Screen.width / 2, Screen.height / 2, 0); // 初始化屏幕中央的点的坐标}void Update(){if (Input.GetMouseButtonDown(0)){RayShot(); // 如果鼠标左键按下,则发射一条射线}}private void RayShot(){//从摄像机出发向屏幕中间发射射线! Ray OneShotRay = Camera.main.ScreenPointToRay(ScreenMidPos); // 以屏幕中央点为原点,发射射线RaycastHit OnEnemy;if (Physics.Raycast(OneShotRay,out OnEnemy)) // 如果射线碰到了物体{Debug.Log("射线发射成功");if (OnEnemy.transform.name!= "Terrain"&& OnEnemy.transform.name != "Role") // 如果碰到的不是地形和角色{Destroy(OnEnemy.transform.gameObject); // 销毁碰撞到的物体Debug.Log("销毁对方");if (ScreenMidPos != null){Debug.DrawLine(Camera.main.transform.position, ScreenMidPos, Color.red, 10000f); // 画一条从摄像机出发,到屏幕中央点的射线}}}}//end class
这个脚本挂载到哪里都可以,为了符合面向对象,请挂在摄像机或者主角身上
这个脚本是从摄像机往电脑屏幕中间发射射线!前面的UI仅仅只是一个标识!