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