unity3d 学习笔记(三)

场景视图的操作:


飞行模式: 按住鼠标右键 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中设置
	}





    关键字yield: 在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。迭代器块有两个特殊语句:           ●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) 有层级关系的物体间的通信
BroadcastMessage Calls the method named methodName on every MonoBehaviour in this game object or any of its children.
SendMessage Calls the method named methodName on every MonoBehaviour in this game object.
SendMessageUpwards Calls 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;
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值