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仅仅只是一个标识!