我是靠谱客的博主 曾经汉堡,最近开发中收集的这篇文章主要介绍Leap Motion 基础开发学习之路(二)系列文章目录前言给所有的Joint挂载物体总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

系列文章目录


目录

系列文章目录

前言

给所有的Joint挂载物体

1.在ui编辑器上增添按钮

2.在add方法下书写逻辑

3. 创建一个预制体,指定addboj

4.总代码

总结

遇到的问题



前言

p10给所有的Joint挂载物体


给所有的Joint挂载物体

1.在ui编辑器上增添按钮

 创建一个脚本AddToJoint,挂载到一个空物体上。在uinty面板上添加一个按钮,需要我们继承自一个脚本unity.editor,创建一个新的类,引用unity.editor。

使用override重写editor里面的一个方法,GUI:

使用GUILayot.Button()生成按钮,传递一个string按钮生成的名字,button返回布尔值

加一个标签,传入typeof(AddToJoint)脚本:

[CustomEditor(typeof(AddObjToJoint))]

判断是否点击,输出一句话000

public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        if (GUILayout.Button("挂载物体到所有的关节下"))
        {
            Debug.Log("000");
        }
    }

 

点击时执行一个方法,将其挂载到joint下,封装至AddToJoint类里面,使用target访问不到add方法,因为target是一个object类型,所以我们需要将其强转成addobjtojoint这个类,强转之后调用add方法,然后输出。

if (GUILayout.Button("挂载物体到所有的关节下")) 
        {
            (target as AddObjToJoint).Add();

        }
 public void Add()
    {
        print("12323223");
    
    }

 输出:

 

2.在add方法下书写逻辑

1.首先挂载物体,public一个变量gameobject,既需要挂载的物体。通过foreach遍历当前物体下的两个子物体,使用transform。输出一下item.name,点击后就会出现子物体的名字。

子物体:

 public GameObject addObj;
 public void Add()
    {
        foreach (Transform item in transform)
        {
            print(item.name);
        }
    
    }

  2.另一种方式:通过for循环遍历,长度为transform.childcount(物体子对象的数目),都可以遍历到每一个子物体。

for (int i = 0; i < transform.childcount; i++)
        {
            print(transform.GetChild(i).name);
        }

输出:

3.通过一个方法查找到每一个子物体关节点,查找transform组件。

Transform组件用于控制游戏对象在Unity场景中的位置、旋转和大小比例,每一个游戏对象都包含一个Transform组件,即便创建了一个空物体,它也有Transform组件。

foreach (var child in GetComponentsInChildren<Transform>())
            {
                print(child);//child代表所有的子物体
            }

4.实例化,将addobj传入进去,父类为child

if (child == item) continue;//continue跳出自身循环,执行下一次循环
instantiate(addObj, child);//实例化,将addobj传入进去,父类为child

3. 创建一个预制体,指定addboj

 多次点击后,需要销毁上一次的,所以保存一下实例化的物体:

public List<GameObiect> addList = new List<GameObiect>();

foreach (var item in addList)
        {
            DestroyImmediate(item);
        }
        addList.Clear();//遍历后销毁

4.总代码

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

public class AddObjToJoint : MonoBehaviour
{
    public GameObject addObj;//挂载的预制体
    public List<GameObject> addList = new List<GameObject>();
    public void Add()
    {
        foreach (var item in addList)
        {
            DestroyImmediate(item);
        }
        addList.Clear();//遍历后销毁

        foreach (Transform item in transform)
        {

           //item是每个子物体,会包含自身,所以需要将其排除一下
            foreach (var child in item.GetComponentsInChildren<Transform>())
            {
                if (child == item) continue;//continue跳出自身循环,执行下一次循环
                //Instantiate(addObj, child);//实例化,将addobj传入进去,父类为child
                GameObject temp = Instantiate(addObj, child);//接收挂载物体
                addList.Add(temp);


               // print(child);//child代表所有的子物体
            }
        }
        //for (int i = 0; i < transform.childcount; i++)
        //{
        //    print(transform.GetChild(i).name);
        //}
        //transform.childCount物体的(变换组件的)子对象的数目(不包括自身)
        
    }
}
//加一个标签,传入typeof(AddToJoint)脚本
[CustomEditor(typeof(AddObjToJoint))]
//在uinty面板上添加一个按钮,需要我们继承自一个脚本unity.editor,创建一个新的类,引用unity.editor。
public class AddObjToJointEditor : Editor
{//使用override重写editor里面的一个方法,GUI:

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        if (GUILayout.Button("挂载物体到所有的关节下")) //使用GUILayot.Button()生成按钮,传递一个string按钮生成的名字,button返回布尔值
        {
            (target as AddObjToJoint).Add();

        }
    }
}


 

总结

遇到的问题

1.Multi-Object editing not supported

以Editor命名的文件夹允许其中的脚本访问Unity Editor的API。如果脚本中使用了在UnityEditor命名空间中的类或方法,它必须被放在名为Editor的文件夹中。Editor文件夹中的脚本不会在build时被包含。
在项目中可以有多个Editor文件夹。
原文链接:https://blog.csdn.net/lihuozhiling0101/article/details/41958951

但是依旧没有解决,最后的解决方法:建立一个新的文件夹Editor,然后将脚本放进去,最后重新放回原文件夹,问题解决

 

最后

以上就是曾经汉堡为你收集整理的Leap Motion 基础开发学习之路(二)系列文章目录前言给所有的Joint挂载物体总结的全部内容,希望文章能够帮你解决Leap Motion 基础开发学习之路(二)系列文章目录前言给所有的Joint挂载物体总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部