关于Unity UI 怎么实现在代码里面动态加载自定义的UI 面板

关于Unity UI 怎么实现在代码里面动态加载自定义的UI 面板,第1张

我用的是4.55版本的unity 所以对于UI方面一直使用NGUI的,如果 你要在代码里边创建一个新的UI,你可以用GameObject newUI=GameObject.Instantiate(UI对象).as GameObject这个UI对象包含了 你新的UI里边出现的所有元素,(比如说Label,Button之类的),可以不赋值,直接在代码里边获取这个lable或者button为其添加相关东西就好了。

"在UITexture对象上挂一个控制脚本,脚本里定义一个UITexture类型的变量,可以把这个变量设为公有暴露出来外部把这个UITexture拖进去赋值,也可以用GetComponent()赋值,得到这个值后随你改它的属性了。话说用了NGUI如果只是有简单的改变透明度,直接加一个Tween Alpha不就OK了。

通过脚本修改ngui的UILabel字体的方法

首先我们创建一个Label一个Button,然后创建两个C#类,一个FloatingText绑定到Label上,一个FloatingTextDriver绑定到Button上,这样我们Inspector面板中把相应的参数赋值即可,当我们点击按钮的时候,Label文本出现,并且位置一直跟随Target运动。

Label中的Target为空,我们在FloatingTextDriver的OnClick事件中动态添加了Target对象。

下面是FloatingTextDriver与FloatingText两个类的具体实现:

Source code

using UnityEngine

using System.Collections

public class FloatingTextDriver : MonoBehaviour {

public GameObject target

public FloatingText ft

public UIFont font

IEnumerator OnClick()

{

ft.Target = target

ft.Text = "libufan"

ft.Active = true

yield return new WaitForSeconds(2.0f)

ft.Font = font

ft.FontSize = new Vector3(50, 50, 1)

}

}

Source code

using UnityEngine

using System.Collections

public class FloatingText : MonoBehaviour {

private UILabel _lbl

public GameObject _target

public Camera worldCamera

public Camera guiCamera

private Vector3 pubPos

private bool _active

void Awake()

{

_lbl = GetComponent<UILabel>()

if(_lbl == null)

{

Debug.LogError("Could not fint the UILabel!")

}

}

void Start()

{

guiCamera = NGUITools.FindCameraForLayer(gameObject.layer)

}

public Color TextColor

{

get {return _lbl.color}

set {_lbl.color = value}

}

public string Text

{

get { return _lbl.text}

set { _lbl.text = value}

}

public bool Active

{

get { return _active}

set { _active = value}

}

public GameObject Target

{

get { return _target}

set {

_target = value

worldCamera = NGUITools.FindCameraForLayer(_target.layer)

}

}

public UIFont Font

{

get { return _lbl.font}

set { _lbl.font = value}

}

public Vector3 FontSize

{

get { return _lbl.transform.localScale}

set { _lbl.transform.localScale = value}

}

void LateUpdate()

{

if (!_active)

{

return

}

pubPos = worldCamera.WorldToViewportPoint(_target.transform.position)

pubPos = guiCamera.ViewportToWorldPoint(pubPos)

pubPos.z = 0

transform.position = pubPos

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11390375.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存