【Unity发射射线】最简单直观的射线发射学习代码

 这个程序是一个简单的射击交互系统,主要功能是当玩家按下鼠标左键时,从玩家位置发射一条射线,如果射线击中场景中的物体,则销毁该物体并在控制台输出被击中物体的名称。程序使用了Unity引擎的物理系统来检测射线与物体的碰撞,并利用Unity的调试工具来可视化射线的路径。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ShMainShot : MonoBehaviour
{
    // 这个用来实现发射交互系统
    // 按下左键,发射射线、获取击中的物体、销毁物体、触发加分系统函数
    public GameObject OneMain; // 定义一个公共的游戏对象,用于存储玩家对象

    Ray oneRay; // 定义一个射线对象,用于存储发射的射线

    private void Start()
    {
        // 在游戏开始时,通过标签 "Player" 找到玩家对象并赋值给 OneMain
        OneMain = GameObject.FindGameObjectWithTag("Player");
        
        // 初始化射线,起点为玩家对象的位置,方向为玩家对象的前方
        oneRay = new Ray(OneMain.transform.position, OneMain.transform.forward);
    }

    private void Update()
    {
        // 检测是否按下鼠标左键
        if (Input.GetMouseButtonDown(0))
        {
            // 开始发射射线
            RaycastHit TempHitObj; // 定义一个 RaycastHit 对象,用于存储射线击中的信息
            
            // 发射射线,检测是否击中物体,并将击中的信息存储在 TempHitObj 中
            if (Physics.Raycast(oneRay, out TempHitObj))
            {
                // 如果你射中了一个碰撞器,就进到这 if 语句里面了!
                Debug.Log("射中了一个物体,这个物体叫什么:" + TempHitObj.transform.gameObject.name);
                
                // 销毁被击中的物体,延迟 2 秒后执行
                GameObject.Destroy(TempHitObj.transform.gameObject, 2f);
            }
            
            // 在场景中绘制射线,起点为玩家位置,方向为玩家前方,颜色为红色
            Debug.DrawRay(OneMain.transform.position, OneMain.transform.forward, Color.red);
        }
    }
}

关键点解释

  1. RaycastHit: 这是一个结构体,用于存储射线击中物体的信息,包括击中点的位置、法线、距离、击中的物体等。

  2. Physics.Raycast: 这是一个Unity的物理函数,用于发射射线并检测是否与场景中的物体发生碰撞。如果发生碰撞,返回 true,并将碰撞信息存储在 out 参数中。

  3. Debug.DrawRay: 这是一个调试工具,用于在场景中绘制射线,帮助开发者可视化射线的路径。

  4. GameObject.Destroy: 这是一个Unity的函数,用于销毁游戏对象。第二个参数 2f 表示延迟 2 秒后执行销毁操作。

总结

这个程序通过简单的射线检测实现了基本的射击功能,适用于简单的射击游戏或交互场景。通过调试工具,开发者可以直观地看到射线的路径,便于调试和优化。

猜你喜欢

转载自blog.csdn.net/leoysq/article/details/142590102