c# - 使组件上的脚本仅适用于一个游戏对象?统一
问题描述
使用此脚本创建一个允许单击右键的组件,我用它来更改精灵。我已经将脚本放在几个不同的游戏对象上,但是当我右键单击一个游戏对象时,它会更改每个具有该组件的游戏对象的精灵。
如何使脚本仅适用于它所在的游戏对象,而不影响所有其他对象?谢谢!
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using System.Collections;
[ExecuteInEditMode]
[AddComponentMenu("Event/RightButtonEvent")]
public class RightButtonEvent : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler {
[System.Serializable]public class RightButton : UnityEvent{}
public RightButton onRightDown;
public RightButton onRightUp;
private bool isOver = false;
void Start () {
}
void Update () {
if (Input.GetMouseButtonDown(1)) {
onRightDown.Invoke();
}
if (Input.GetMouseButtonUp(1)) {
onRightUp.Invoke();
}
}
public void OnPointerEnter(PointerEventData eventData) {
isOver = true;
}
public void OnPointerExit(PointerEventData eventData) {
isOver = false;
}
}
解决方案
你已经有了isOver
标志,所以只需另外检查它Update
void Update ()
{
if(!isOver) return;
if (Input.GetMouseButtonDown(1)) {
onRightDown.Invoke();
}
if (Input.GetMouseButtonUp(1)) {
onRightUp.Invoke();
}
}
public void OnPointerEnter(PointerEventData eventData)
{
isOver = true;
}
public void OnPointerExit(PointerEventData eventData)
{
isOver = false;
// Would also do this here
onRightUp.Invoke();
}
而不是Update
你实际上也可以实现IPointerDownHandler
and IPointerUpHandler
,它们首先只在相应的对象上调用
public void OnPointerDown(PointerEventData eventData)
{
if(eventData.button == InputButton.Right)
{
onRightDown.Invoke();
}
}
public void OnPointerUp(PointerEventData eventData)
{
if(eventData.button == InputButton.Right)
{
onRightUp.Invoke();
}
}
实际上你也可以简单地使用void OnMouseDown
and OnMouseUp
which 也只在相应的对象上调用
当用户在 Collider 上方按下鼠标按钮时调用 OnMouseDown。
此事件通过 Collider 或 GUIElement 发送到 GameObject 的所有脚本。
并在那里检查按下了哪个鼠标按钮
void OnMouseDown()
{
if(Input.MouseButtonDown(1))
{
onRightDown.Invoke();
}
}
void OnMouseUp()
{
if(Input.MouseButtonUp(1))
{
onRightUp.Invoke();
}
}
推荐阅读
- github - 如何重置 Magit 上的用户信息?
- python - Python 继承 - TypeError: __init__() 接受 1 个位置参数,但给出了 4 个
- python - 在类内实例化对象
- android - 为 Sony 设备构建 AOSP 时出现 Ninja 错误
- python - Pyinstaller 不能很好地与 ImageTk 和 Tkinter 配合使用
- php - 在其他服务器上运行脚本
- sql - 满足条件时的 SQL 选择
- c# - 模仿 HTML 控制台的 WPF 控件
- javascript - 功能提升中的奇怪行为
- android - 如何在 macOS 上启动 AVD 管理器而不启动 Android Studio