Unity中在鼠标点击的UI地方创建预制件+在指定地方创建预制件

目录

一、目的:

1、想知道:Unity中在鼠标点击的UI地方创建预制件

二、参考:

1、Unity中动态给button的OnClick添加代码

1、Unity 在代码中设置RectTransform的锚点、位置

1、unity 加载预制物体资源

三.操作:一:完成:在指定地方创建预制件

1.运行效果

1.代码

1.Unity设置

三、操作:一:完成:在鼠标点击的UI地方创建预制件

1、目的:需要出现的UI预制件像这样的坐标出现在鼠标点击地方

1、代码:

1、Unity中制定预制件出现在某父物体下面 

1、运行效果:点击的地方有预制件出现

1、注意:

三、操作:二:完成:模拟操作:一,在父物体身上加一个框

1、AddChildInParent

1、调用

1、Unity设置:

1、运行效果:每一个按钮外面都有了一个框


一、目的:

1、想知道:Unity中在鼠标点击的UI地方创建预制件

 

二、参考:

1、Unity中动态给button的OnClick添加代码

https://mp.csdn.net/editor/html/115001904

  • 总结:good:动态加载的物体身上没有代码,这个方法解决了button的OnClick的动态添加代码

 

 

1、Unity 在代码中设置RectTransform的锚点、位置

https://blog.csdn.net/qq_40544338/article/details/104845578

  • ①总结:good:知道如何设置UI的RectTransform;but:不够详细也没有例子,下面我自己写了一个

 

1、unity 加载预制物体资源

https://blog.csdn.net/qq_40544338/article/details/104845606

  • ①总结:good:知道如何 加载预制物体资源

 

三.操作:一:完成:在指定地方创建预制件

1.运行效果

会在父物体地方创建子物体

 

1.代码

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


/// <summary>
/// 功能:创建 留言欣赏时候的小图
/// </summary>
public class MyCreateRawImage_enjoy_small : MonoBehaviour
{
    /// <summary>GameObject:留言欣赏时候的小图 的预制件</summary>
    [Tooltip("GameObject:留言欣赏时候的小图 的预制件")]
    [Header("GameObject:留言欣赏时候的小图 的预制件")]
    public GameObject objRawImage_enjoy_small;

    // Use this for initialization
    void Start()
    {
        Init();
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    int Init()
    {
        //在父物体地方 创建 留言欣赏时候的小图
        Button[] obj = GameObject.FindWithTag("ScriptsHold").gameObject.GetComponent<MyButtonOnClick>().arr_btn_leaveWordContents;

        SetCreateChildInParentl(obj[0].gameObject, objRawImage_enjoy_small);

        return 0;
    }

    /// <summary>
    /// 功能:设置 在父物体的RectTransform下面 创建 子物体
    /// </summary>
    /// <param name="_objParent">父物体</param>
    /// <param name="_objChild">产生的物体</param>
    /// <returns></returns>
    int SetCreateChildInParentl(GameObject _objParent,GameObject _objChild)
    {
        GameObject InstantiateChild = Instantiate(_objChild);//加载完的资源相当于一个类,用 GameObject obj1 = Instantiate(obj);这样的形式实例一个类obj1;这样屏幕上会加载出来一个资源物体

        InstantiateChild.transform.SetParent(_objParent.transform);

        Vector3 vec3 = _objParent.GetComponent<RectTransform>().transform.position;
        InstantiateChild.transform.position = new Vector3(vec3.x, vec3.y, vec3.z);
        return 0;
    }

}

 

1.Unity设置

 

三、操作:一:完成:在鼠标点击的UI地方创建预制件

1、目的:需要出现的UI预制件像这样的坐标出现在鼠标点击地方

1、代码:

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

/// <summary>
/// 功能:预制件出现在鼠标点击位置
/// </summary>
public class My_test19_prefabsShowUI_MouseClickUI : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        ///功能:鼠标特效在点击地方出现
        if (Input.GetMouseButtonUp(0))
        {
            //在挂在的脚本中先加载资源 GameObject obj =Resources.Load<GameObject>("ttt");如果放在Resources目录下建的目录下,如在Resources/RRR 则为GameObject obj =Resources.Load<GameObject>("RRR/ttt");
            //加载函数有Resources.Load<GameObject>("ttt");和 Resources.Load<GameObject>();如( Resources.LoadAll<Sprite>("Tttt/NormalSprite/ttt/");)
            GameObject addScoreEffect = (GameObject)Resources.Load<GameObject>("test10/Prefabs/AddScoreEffect");
            GameObject addScoreParent = GameObject.FindGameObjectWithTag("AddScoreEffectParent");
            GameObject addScoreEffect_instantiate = Instantiate(addScoreEffect);//加载完的资源相当于一个类,用 GameObject obj1 = Instantiate(obj);这样的形式实例一个类obj1;这样屏幕上会加载出来一个资源物体

            addScoreEffect_instantiate.transform.SetParent(addScoreParent.transform);
            float width = addScoreEffect_instantiate.GetComponent<RectTransform>().rect.width;
            float height = addScoreEffect_instantiate.GetComponent<RectTransform>().rect.height;
            addScoreEffect_instantiate.GetComponent<RectTransform>().SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, width);
            addScoreEffect_instantiate.GetComponent<RectTransform>().SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 0, height);
            addScoreEffect_instantiate.GetComponent<RectTransform>().localScale = new Vector3(2, 2, 2);
 addScoreEffect_instantiate.GetComponent<RectTransform>().localEulerAngles = new Vector3(0, 0, 0);

            Vector3 vec3 = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0);
            print("vec3:" + vec3);
            addScoreEffect_instantiate.GetComponent<RectTransform>().anchoredPosition3D = vec3;//必须使用3d,否则会出现UI的Z轴数值很变态,跑出UI很远,
            print(" addScoreEffect_instantiate.GetComponent<RectTransform>().anchoredPosition:" + addScoreEffect_instantiate.GetComponent<RectTransform>().anchoredPosition3D);
        }
    }


}

1、Unity中制定预制件出现在某父物体下面 

 

1、运行效果:点击的地方有预制件出现

1、注意:

①addScoreEffect_instantiate.GetComponent<RectTransform>().anchoredPosition3D = vec3;//必须使用3d,否则会出现UI的Z轴数值很变态,跑出UI很远,

 

三、操作:二:完成:模拟操作:一,在父物体身上加一个框

 

1、AddChildInParent

    /// <summary>
    /// 目的 : 添加子物体在父物体下面
    /// </summary>
    /// <returns></returns>
    private bool AddChildInParent(GameObject _obj_child,GameObject _obj_parent)
    {
        bool bReturn = false;

        //GameObject obj_child = (GameObject)Resources.Load<GameObject>("MyProfebs/rawImage_deleteFrame");
        //GameObject addScoreParent = GameObject.FindGameObjectWithTag("AddScoreEffectParent");
        GameObject obj_tmp_child = Instantiate(_obj_child);//加载完的资源相当于一个类,用 GameObject obj1 = Instantiate(obj);这样的形式实例一个类obj1;这样屏幕上会加载出来一个资源物体

        obj_tmp_child.transform.SetParent(_obj_parent.transform);
        float width = obj_tmp_child.GetComponent<RectTransform>().rect.width;
        float height = obj_tmp_child.GetComponent<RectTransform>().rect.height;
        //obj_tmp_child.GetComponent<RectTransform>().SetInsetAndSizeFromParentEdge(RectTransform.Edge.l, 0, width);
        //obj_tmp_child.GetComponent<RectTransform>().SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 0, height);
        obj_tmp_child.GetComponent<RectTransform>().localScale = new Vector3(1, 1, 1);
        obj_tmp_child.GetComponent<RectTransform>().localEulerAngles = new Vector3(0, 0, 0);

        Vector3 vec3 = new Vector3(0, 0, 0);
        print("vec3:" + vec3);
        obj_tmp_child.GetComponent<RectTransform>().anchoredPosition3D = vec3;//必须使用3d,否则会出现UI的Z轴数值很变态,跑出UI很远,
        return bReturn;
    }

1、调用

  GameObject obj_child = (GameObject)Resources.Load<GameObject>("MyProfebs/rawImage_deleteFrame");
            for (int i = 0; i < arr_btn_leaveWordContents.Length; i++)
            {
                GameObject obj_parent = arr_btn_leaveWordContents[i].gameObject;
                AddChildInParent(obj_child, obj_parent);
            }

 

1、Unity设置:

 

1、运行效果:每一个按钮外面都有了一个框

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值