您的位置:首页 > 移动开发 > Unity3D

unity3d 学习笔记(三)

2015-10-02 16:04 363 查看
工作现场查看:

飞行模式: 按住鼠标右键 w s a d 围绕浏览当前视图, q e 上下浏览。 交模式下无效 需透视图

移动吸附:移动状态(w) ctrl+shif 移动吸附在其它物体上移动

顶点吸附:移动状态(w)v 键 移动吸附在其它物体上移动

特定的增量移动: 移动状态(w) ctrl ,按特定的增量移动, 能够设置增量 Edit-snapSettings.

Unity脚本的使用

void Start () {
ScriptB sb = GetComponent<ScriptB>();
sb.Say();
}

void Update () {
this.transform.Rotate(new Vector3(0,speed * Time.deltaTime,0));
rigidbody.mass = Mathf.Sin(Time.deltaTime)+1;
}


!gameObject上的属性都能够直接使用。没有的能够通过getComponent获取訪问

。通常transform 也能够替代gameObject进行使用 eg:transform.renderer... 假设一个gameObject对象没有transform组件就不能在场景中显示,仅仅能用来存储数据(为什么能够替代gameObject使用还没搞懂).

public Transform target;

void Update () {
target.renderer.material.color = Color.red;
}
/////
public GameObject target;
void Start () {
target = GameObject.Find("Main Camera/sphere");
}


//上面假设有多个名称为sphere的他找的是最前面的一个

//依据标签訪问

t
arget = GameObject.FindWithTag("fuck");
GameObject.FindGameObjectWithTag("fuck"
GameObject.FindGameObjectsWithTag("fuck");   多个


时间Time类:

void OnGUI()
{
GUILayout.Label("当前时间:" + Time.time);
GUILayout.Label("自上一帧时间:" + Time.deltaTime);
GUILayout.Label("固定增量时间:" + Time.fixedTime);
GUILayout.Label("固定增量时间间隔:" + Time.fixedDeltaTime);
GUILayout.Label("平滑delata时间:" + Time.smoothDeltaTime);

//增量时间能够在edit-projectSetting-time中设置
}


keywordyield:在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。迭代器块有两个特殊语句: ●yield return <expression_r_r_r_r>; ●yield break; 迭代器块

迭代器块是有一个或多个yield语句的代码块。以下三种类型的代码块中的随意一种都能够是迭代器块: ■方法主体 ■訪问器主体 ■运算符主体

yield语句仅仅能出如今迭代器块中,该块可用作方法、运算符或訪问器的体。

这类方法、运算符或訪问器的体受下面约束的控制:

■不同意不安全块。

■方法、运算符或訪问器的參数不能是 ref 或 out。

void Start () {
StartCoroutine("Example"); //用StartCoroutine进行触发
print("Hello");
print ("world");
}

//全部使用yield的函数必须将返回值类型设置为IEnumerator类型
IEnumerator Example() {
print(Time.time);
yield return new WaitForSeconds(2);
print(Time.time);
}


类似于as、js中的setTimeout

Random:

void Start () {
print(Random.seed);
print(Random.value);
print(Random.Range(0,1));
print(Random.Range(0.0f,1.0f));
}


Returns a random integer number betweenmin [inclusive] and max [exclusive] (Read Only).

If max equalsmin, min will be returned. The returned value will never bemax unless min equals max.

物体间的相互通信

(1) 有层级关系的物体间的通信

BroadcastMessageCalls the method named methodName on every MonoBehaviour in this game object or any of its children.

SendMessageCalls the method named methodName on every MonoBehaviour in this game object.

SendMessageUpwardsCalls the method named methodName on every MonoBehaviour in this game object and on every ancestor of the behaviour.

public class SendMessageUpward : MonoBehaviour {
void OnMouseOver()
{
SendMessageUpwards("someoneSay","fuck u");
}
}

public class RecieveMessage : MonoBehaviour {

void someoneSay(string str)
{
print("someoneSaied" +str);
}
}


(2)没有层级的关系的通信。能够通过c#的托付事件

public class EventDispatcher : MonoBehaviour {

public delegate void EventHandler();
public event EventHandler MouseOver;

void OnMouseOver()
{
if(MouseOver != null)
{
MouseOver();
}
}
}

public class EventListener : MonoBehaviour {

public GameObject dispatcher;
// Use this for initialization
void Start () {

EventDispatcher ds = dispatcher.GetComponent<EventDispatcher>();
ds.MouseOver +=Listen;
}

void Listen()
{
transform.Rotate(new Vector3(0,10*Time.deltaTime,0));
transform.renderer.material.color = Color.cyan;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: