【问题标题】:Unity - Affect only clicked GameObjectUnity - 仅影响单击的游戏对象
【发布时间】:2020-05-25 04:19:53
【问题描述】:

我是 Unity 新手,我尝试为游戏中的图块创建预制件。因此,每当用户单击图块时,它都应该更改其精灵。问题是我游戏中的所有副本(实例)都在改变它们的精灵。

这是我尝试过的:

   void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject gameObject = this.gameObject;
            SpriteRenderer renderer = gameObject.GetComponent<SpriteRenderer>();
            Sprite sprite = Resources.Load<Sprite>("Sprites/red");
            renderer.sprite = sprite;
        }
    }

我做错了什么?提前致谢

【问题讨论】:

  • 所以看起来你没有被点击精灵,当你点击有这个脚本的鼠标按钮时你改变了所有的游戏对象精灵,你必须点击瓷砖然后只改变这个瓷砖。

标签: c# unity3d


【解决方案1】:

您正在检测鼠标按钮是否被按下,而不是鼠标按钮是否被按下 给定的图块。

有几种方法可以做到,但我会说标准方法是:

  1. 对撞机附加到游戏对象
  2. 实施OnMouseDown
void OnMouseDown()
{
     GameObject gameObject = this.gameObject;
     SpriteRenderer renderer = gameObject.GetComponent<SpriteRenderer>();
     Sprite sprite = Resources.Load<Sprite>("Sprites/red");
     renderer.sprite = sprite;
}

【讨论】:

    【解决方案2】:

    就像 akin 说的那样,您通过鼠标单击更改所有精灵,您可以将光线投射到您的对象并检查它们是否被击中然后更改它

    在附加到播放器或相机的脚本上运行此部分

    void FixedUpdate()
    {
        RaycastHit hit;
    
        if (Physics.Raycast(transform.position, -Vector3.up, out hit, 100.0f)) {
    if (hit.transform.gameObject.GetComponent<yourscript>()) {    
    hit.transform.gameObject.GetComponent<yourscript>().ChangeSprite();
            }
    }
    }
    

    附加到平铺游戏对象

    public class yourscript : MonoBehaviour
    
    {
    
    public void ChangeSprite() {
                SpriteRenderer renderer = gameObject.GetComponent<SpriteRenderer>();
                Sprite sprite = Resources.Load<Sprite>("Sprites/red");
                renderer.sprite = sprite;
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      相关资源
      最近更新 更多