unity3d 封装 Raycast 调用
例子
Raycast如果您将来需要更改碰撞矩阵,直接调用脚本可能会导致问题,因为您必须跟踪每个LayerMask字段以适应更改。根据您项目的规模,这可能会成为一项艰巨的任务。
封装Raycast调用可能会让您的生活更轻松。
从SoC原理来看,游戏对象真的不应该知道或关心LayerMasks。它只需要一种扫描周围环境的方法。raycast结果是否返回this或that对游戏对象无关紧要。它应该只根据它收到的信息采取行动,而不应该对它所处的环境做出任何假设。
解决此问题的一种方法是将LayerMask值移动到ScriptableObject实例,并将它们用作您注入脚本的一种光线投射服务形式。
//RaycastService.cs
using UnityEngine;
[CreateAssetMenu(menuName = "StackOverflow")]
public class RaycastService : ScriptableObject
{
[SerializeField]
LayerMask layerMask;
public RaycastHit2D Raycast2D(Vector2 origin, Vector2 direction, float distance)
{
return Physics2D.Raycast(origin, direction, distance, layerMask.value);
}
//根据需要添加更多方法
}//MyScript.cs
using UnityEngine;
public class MyScript : MonoBehaviour
{
[SerializeField]
RaycastService raycastService;
void FixedUpdate()
{
RaycastHit2D hit = raycastService.Raycast2D(Vector2.zero, Vector2.down, 1f);
}
}这允许您制作许多光线投射服务,所有这些服务都具有针对不同情况的不同LayerMask组合。你可以有一个只击中地面对撞机,另一个击中地面对撞机和单向平台。
如果您需要对LayerMask设置进行重大更改,则只需更新这些RaycastService资产。
进一步阅读
控制反转
依赖注入
热门推荐
10 医院探望朋友祝福语简短
11 毕业祝福语简短女朋友
12 春节虎年爸妈祝福语简短
13 儿童毕业祝福语 简短6
14 开工仪式横幅祝福语简短
15 孩子日常祝福语大全简短
16 清晨寄语诗句祝福语简短
17 结婚送亲认亲祝福语简短
18 虎年喝酒拜年祝福语简短