码迷,mamicode.com
首页 > 编程语言 > 详细

Unity属性(Attributes)

时间:2016-07-31 11:23:23      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

Unity3d中的属性(Attributes)

Attributes属性属于U3DRunTimeClass,所以加上以下的命名空间是必须的了。

using UnityEngine;

using System.Collections;

 

0.Property Attributes变量属性(放在方括号内变量申明前)(常用)

 

1/ Range(min,max)

技术分享

 

如: [SerializeField, Range(0, 5)]

      int count;

技术分享如: [SerializeField, Range(0,5)]

     int[] counts;

 

技术分享2/ Multiline 多行

如: [Multiline]

   public string b;

 

3/ TextArea 文本区域

 

可以设置的最大值和最小值的行数

如: [TextArea]

     public string c;

 

技术分享

 

 

技术分享 

4/ ContextMenu上下文菜单

如: [ContextMenu("Hello World!")]

     void HelloWorld()

     {

        Debug.Log("Hello World!");

     }                               

 

5/ ContextMenuItem(右击变量调用方法)

如:[ContextMenuItem("Resetvalue","resetValue")]

    public int e=100;

    public void resetValue(){

        e=50;

技术分享     }

 

 

 

 

 

 

6/ Head("This is a variable") 头显示

 

7/ Space(5)

设置字段与字段之间的空间

 

8/ [Tooltip("this is a nasha!")]

如果鼠标光标是在字段上,显示的说明文本。  

1.AddComponentMenu 添加组件菜单

这函数只是起方便用,原本的脚本(组建)都会在“Component/Script”菜单下,在类之前声明一下这个,它便可以出现在"Componet"菜单下的任何位置。说明指的是要重启U3D才能显示,不过测试貌似直接可以显示。

 

[AddComponentMenu("MyPhysic/PhysicType")]

public class PhysicType: MonoBehaviour

{

}

 

2.ContextMenu 上下文菜单

技术分享这个译名我觉得很不自然,其实上下文算是啥东西……这个函数是在Inspector的脚本中加一个触发事件,就是删除脚本重置脚本按钮的那个小拉菜单中,具体很难说清位置,所以我截了个图。

public class Attributes : MonoBehaviour {

    [ContextMenu("Hello World!")]

    void HelloWorld()    

    {

        Debug.Log("Hello World!");

    }   

}

 

3.ExecuteInEditMode Editor模式下运行

跟名字一样,在编辑器中运行。不过有三种函数的调用方式。

a- "Update()" is only called when something in the scene changed.

b- "OnGUI()" is called when the Game View recieves an Event.

c- "OnRenderObject()" and the other rendering callback functions are called on every repaint of the Scene View or Game View.

 

[ExecuteInEditMode]

public class ExecuteInEditModeTest: MonoBehaviour

{

    private Vector3 vec_Rotation = new Vector3(0.0f, 0.5f, 0.0f);

    //Rotate all the time

    void OnRenderObject()

    {

        transform.Rotate(vec_Rotation);

    }

}

 

4.HideInInspector 在检视面板中隐藏

public class HideInspectorTest : MonoBehaviour

{

    

    [HideInInspector]

    public Transform m_Target;

    void Start()

    {

        m_Target = GameObject.Find("test").transform;

    }

}

 

5.RequireComponent 必须要有相应的组建

加入一个组建之前必须存在另一个相应的组建,若没有则自动创建。这个在项目中非常有必要用到,尤其是项目人员比较多的时候(大于三四个)。

[RequireComponent (typeof (Rigidbody))]

public class RequireComponentTest : MonoBehaviour {

    void FixedUpdate()  {

        rigidbody.AddForce(Vector3.up);

    }

}

 

6.NonSerialized 不被序列化

不被序列化该变量,且不显示在检视面板中。

public class Test {

    [System.NonSerialized]

    public int i_Helloword = 5;

}

 

7.Serializable 可序列化

这个属性可以让子类(继承类)的变量属性显示在检视面板中,也能序列化它。(JS的话完全不需要这个属性。)

//SerializableTest.cs

[System.Serializable]

public class SerializableTest

{

    public int p = 5;

    public Color c = Color.white;

}

 

//SerializableTest2.cs

public class SerializableTest2 : MonoBehaviour

技术分享{

    public SerializableTest test;

 

}

 

8.SerializeField 序列化域(强制序列化)

这里写得比较清楚,可以将私有变量序列化,将U3D的内建变量序列化等。

技术分享 

 

 

Unity属性(Attributes)

标签:

原文地址:http://www.cnblogs.com/caymanlu/p/5722581.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!