zoukankan      html  css  js  c++  java
  • NGUI-实例化问题

        大家好,我是蜀云泉,我的博客存在的不足之处,希望大家包涵。
    我在研究NGUI的时候发现一个问题。在NGUI下实例化物体,其坐标总是位于原点,也就是UIRoot的(0,0,0)处,困惑了好几天我才发现NGUI下实例化物体分两种情况。
    第一种情况:NGUI下实例化GameObject物体。

        这种情况下实例化物体是没有任何问题的,代码如下:

    1 public Transform target;//定义要实例化精灵的位置处的父物体
    2 public Transform flag;//定义要实例化的物体
    3 void Update()
    4 {
    5 Transform MJ = (Transform)Instantiate(flag, target.position, Quaternion.identity);//实例化sprite,在target的位置 
    6 }

    效果图:



    第二种情况:NGUI下实例化Sprite精灵。

        这种情况是值得一说的,因为这是NGUI的一个特有的情况。首先我们来明确一个概念,NGUI下的东西是不是都在UIRoot下面?答案是一定的。那么现在问题就来了,你在游戏中实例化的物体是sprite,这个sprite是不属于你现在的UIRoot的,所以NGUI会自动的把你实例化的sprite转移到现有的UIRoot下面(强制性吗?呵呵),这个过程就会默认的把你实例化的sprite的位置归为(0,0,0),所以无论你怎么设置其Position都没有用。
    解决办法:手动的为sprite设置父物体。这个父物体是现有的UIRoot下的一个精灵,随便是谁,看你要求了。接下来上代码:

    1 public Transform target;//定义要实例化精灵的位置处的父物体
    2 public Transform flag;//定义要实例化的sprite
    3 void Update()
    4 {
    5 Transform MJ = (Transform)Instantiate(flag.transform, target.position, Quaternion.identity);//实例化sprite,在target的位置
    6 MJ.parent = target; //手动给MJ指定父物体,很重要
    7 MJ.localScale = Vector3.one;//实例化的sprite的大小为(1,1,1)很重要
    8 }

    好了,现在来看一下效果:

    总结:

        感觉学习就是学习原理,只要你懂得原理了,问题也就不可怕了,它再花哨其本质还是一样的,这个问题困扰了我好几天,今天终于有时间研究了一下,懂了之后就写了这篇博客,希望可以帮助到一些学unity的朋友,再见。

  • 相关阅读:
    BootStrap 智能表单系列 五 表单依赖插件处理
    BootStrap 智能表单系列 四 表单布局介绍
    BootStrap 智能表单系列 三 分块表单配置的介绍
    LinQ.OrderBy 多个字段排序
    ABP.NET CORE 遇到的小问题
    vs2017断点无效 当前不会命中断点 已设置断点单还未绑定
    DateTime 取年月日;字符串截取
    C# DateTime 多个时间段循环相加;两个时间段求差值
    ABP.Net Core 小白使用教程 附件:ABP.NET中文文档
    ASP.NET MVC+Easyui 后台管理系统的图片上传
  • 原文地址:https://www.cnblogs.com/yunquan/p/yunquan.html
Copyright © 2011-2022 走看看