目录
一、目的:
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添加代码
/editor/html/115001904
总结:good:动态加载的物体身上没有代码,这个方法解决了button的OnClick的动态添加代码
1、Unity 在代码中设置RectTransform的锚点、位置
/qq_40544338/article/details/104845578
①总结:good:知道如何设置UI的RectTransform;but:不够详细也没有例子,下面我自己写了一个
1、unity 加载预制物体资源
/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 initializationvoid Start(){Init();}// Update is called once per framevoid 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 initializationvoid Start(){}// Update is called once per framevoid 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);}