MyBatis实现动态SQL更新可变化、可扩展

1. 什么是PhysicsRaycaster组件?

PhysicsRaycaster是Unity UGUI中的一个组件,用于在UI元素上进行物理射线检测。它可以检测鼠标或触摸事件是否发生在UI元素上,并将事件传递给相应的UI元素。

2. PhysicsRaycaster的工作原理

PhysicsRaycaster通过发射一条射线来检测UI元素。当射线与UI元素相交时,PhysicsRaycaster会将事件传递给相应的UI元素。

3. PhysicsRaycaster的常用属性

  • Event Mask:指定哪些层的UI元素可以接收事件。
  • Max Raycast Distance:指定射线的最大检测距离。
  • Blocking Objects:指定哪些类型的物体可以阻挡射线检测。

4. PhysicsRaycaster的常用函数

  • Raycast:发射一条射线并返回与之相交的UI元素。

5. 完整例子代码

例子1:点击按钮改变颜色

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class ButtonColorChanger : MonoBehaviour, IPointerClickHandler
{
    private Image image;

    private void Start()
    {
        image = GetComponent<Image>();
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        image.color = Random.ColorHSV();
    }
}

操作步骤

  1. 创建一个Canvas对象,并在Canvas下创建一个Button对象。
  2. 将Button对象的Image组件的Color属性设置为任意颜色。
  3. 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
  4. 将Button对象的ButtonColorChanger脚本挂载到Button对象上。
  5. 运行游戏,点击Button对象,颜色会随机改变。

注意事项

  • 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。

例子2:拖拽物体

using UnityEngine;
using UnityEngine.EventSystems;

public class ObjectDragger : MonoBehaviour, IPointerDownHandler, IDragHandler
{
    private RectTransform rectTransform;

    private void Start()
    {
        rectTransform = GetComponent<RectTransform>();
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        rectTransform.SetAsLastSibling();
    }

    public void OnDrag(PointerEventData eventData)
    {
        rectTransform.anchoredPosition += eventData.delta;
    }
}

操作步骤

  1. 创建一个Canvas对象,并在Canvas下创建一个Image对象。
  2. 将Image对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
  3. 将Image对象的ObjectDragger脚本挂载到Image对象上。
  4. 运行游戏,点击Image对象并拖动,Image对象会跟随鼠标或触摸移动。

注意事项

  • 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。

例子3:点击按钮播放音效

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class ButtonSoundPlayer : MonoBehaviour, IPointerClickHandler
{
    public AudioClip soundClip;

    private Button button;
    private AudioSource audioSource;

    private void Start()
    {
        button = GetComponent<Button>();
        audioSource = GetComponent<AudioSource>();
        audioSource.clip = soundClip;
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        audioSource.Play();
    }
}

操作步骤

  1. 创建一个Canvas对象,并在Canvas下创建一个Button对象。
  2. 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
  3. 在场景中添加一个AudioSource对象,并将音效文件拖拽到ButtonSoundPlayer脚本的soundClip属性上。
  4. 将Button对象的ButtonSoundPlayer脚本挂载到Button对象上。
  5. 运行游戏,点击Button对象,音效会播放。

注意事项

  • 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。

例子4:点击按钮显示/隐藏物体

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class ButtonObjectToggler : MonoBehaviour, IPointerClickHandler
{
    public GameObject targetObject;

    private Button button;

    private void Start()
    {
        button = GetComponent<Button>();
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        targetObject.SetActive(!targetObject.activeSelf);
    }
}

操作步骤

  1. 创建一个Canvas对象,并在Canvas下创建一个Button对象。
  2. 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
  3. 在场景中创建一个需要显示/隐藏的物体,并将该物体拖拽到ButtonObjectToggler脚本的targetObject属性上。
  4. 将Button对象的ButtonObjectToggler脚本挂载到Button对象上。
  5. 运行游戏,点击Button对象,物体会显示或隐藏。

注意事项

  • 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。

例子5:点击按钮切换场景

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class ButtonSceneSwitcher : MonoBehaviour, IPointerClickHandler
{
    public string targetSceneName;

    private Button button;

    private void Start()
    {
        button = GetComponent<Button>();
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        SceneManager.LoadScene(targetSceneName);
    }
}

操作步骤

  1. 创建一个Canvas对象,并在Canvas下创建一个Button对象。
  2. 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
  3. 在场景中创建一个需要切换到的目标场景,并将目标场景的名称拖拽到ButtonSceneSwitcher脚本的targetSceneName属性上。
  4. 将Button对象的ButtonSceneSwitcher脚本挂载到Button对象上。
  5. 运行游戏,点击Button对象,场景会切换到目标场景。

注意事项

  • 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis是一个流行的Java持久层框架,它允许开发者在运行时构建动态SQL查询,从而提高了代码的灵活性和适应性。MyBatis通过结合XML映射文件和注解,实现动态SQL的执行。以下是MyBatis动态SQL的主要实现方式: 1. XML映射文件(Mapper XML):在MyBatis中,`<select>`, `<update>`, `<delete>`等标签可以包含参数占位符,如`#{id}`, `#{name}`,这些占位符会在运行时被实际的值替换,形成动态SQL语句。 ```xml <select id="getUser" parameterType="int" resultType="User"> SELECT * FROM users WHERE id = #{id} </select> ``` 2. 参数查询(Parametrized queries):MyBatis支持使用预编译语句,将参数与SQL语句分离,这样可以防止SQL注入攻击。 3. 显式对象(Parameter Objects):如果动态SQL非常复杂,可以创建一个Java对象作为参数传递给查询,其中包含了多个属性,MyBatis会自动将对象的属性转换为SQL中的列名。 ```java Map<String, Object> params = new HashMap<>(); params.put("startDate", startDate); params.put("endDate", endDate); List<User> users = sqlSession.selectList("getUsers", params); ``` 4. 动态SQL标签:MyBatis提供了`<if>`, `<choose>`, `<when>`, `<otherwise>`等标签,用于根据条件动态生成SQL实现基于条件的分支查询。 ```xml <select id="getUser" parameterType="map" resultType="User"> <if test="id != null"> SELECT * FROM users WHERE id = #{id} </if> <if test="name != null"> AND name LIKE '%' + #{name} + '%' </if> </select> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值