Unity克隆物体并控制显隐

克隆物体的子物体的控制属于动态显隐控制,无法提前拖动到代码的变量之上,正好项目中遇到了,因此专门写了一个小程序测试了一下 克隆物体的子物体名字的不变性,克隆的物体这里我单独命名了。主界面如下(包括了hide按钮的挂载代码情况):

 主代码CloneObject.cs如下

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

public class CloneObject : MonoBehaviour
{
    public GameObject boneOriginal;
    public GameObject boneReposition;
    public GameObject bonetop;
    public GameObject Targetplane;
    // Start is called before the first frame update
    void Start()
    {
        
    }

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

        //       GameObject targetobject = GameObject.Find("ModelTarget/TestObject");//
        GameObject targetobject = GameObject.Find("AJ19_Tibia");
        Vector3 cubeposition = targetobject.transform.position;
        Quaternion cuberotation = targetobject.transform.rotation;//这段可以用的,只是获得的cubeposition和markerposition之间又多了一层误差。要知道本来获得的markerposition是有眼镜环境定位的误差的
                                                                  //        Vector3 cubeposition = markerposition + markerrotation * (cubeposition - markerposition);//此句虽然是用的向量加旋转,但依然是眼镜获得的两个全局值再运算,跟上面一个效果,多一层误差。

        Debug.Log($"cubeposition is ({cubeposition.x},{cubeposition.y},{cubeposition.z}),cuberotation is ({cuberotation.eulerAngles.x},{cuberotation.eulerAngles.y},{cuberotation.eulerAngles.z})");
        Debug.Log($"cube local position is ({targetobject.transform.localPosition.x},{targetobject.transform.localPosition.y},{targetobject.transform.localPosition.z}),cube local rotation is ({targetobject.transform.localRotation.eulerAngles.x},{targetobject.transform.localRotation.eulerAngles.y},{targetobject.transform.localRotation.eulerAngles.z})");
        GameObject newobject = GameObject.Instantiate(targetobject, cubeposition, cuberotation);
        newobject.name = "newtibia";
        Debug.Log("cube is created!");
        targetobject.SetActive(false);

        boneReposition = GameObject.Find("newtibia/Tibia dis repositionsegmentation");
        Targetplane= GameObject.Find("newtibia/Target planesegmentation");
    }
    public void hide()
    {
        if (!boneReposition.activeInHierarchy)
        {
            boneReposition.SetActive(true);
            Targetplane.SetActive(true);
        }
        else
        {
            boneReposition.SetActive(false);
            Targetplane.SetActive(false);
        }
    }
}

克隆按钮的挂在如下,四个prefab物体变量都是空着的,运行过程中赋值。

 运行,点击clone按钮之后如下(左侧生成了新的克隆物体,右侧的prefab因动态赋值,多了两个物体):

 

点击hide按钮之后如下(其实此时物体有两个部分隐藏了):

 再次点击Hide按钮如下(都又出来了):

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值