游戏制作之路-愤怒的小鸟-2

接着上一篇的说,首先我想介绍两种我常用的一个脚本获取并改变另一个脚本的方法或参数的方法。
第一种:find到另一个挂载脚本的物体,然后getComponent找到脚本,改变参数。
第二种:单例模式
例如有一个Start.cs

public class Start :MonoBehaviour {
	public static Start _instance;
	pubic static Start Instance {
		get { return _instance }
		}
	private void Awake() {
		_instance = this ;
		}
	void change(){
	}
	void fly(){
	}
}
			

其它脚本想要使用Start脚本中的change()方法,直接——instance.change()就ok了,这只是我目前会用的两个方法,肯定会有更好的实现方法,仅供大家参考。

再说下Unity3d脚步中常用的两个方法:
Update():每帧被调用一次。
FixedUpdate():每隔Time.fixedDeltaTime被调用一次。Time.fixedDeltaTime默认是0.02s,可以通过Edit->ProjectSettings->Time来设置。
有时我们想让一个物体匀速运动,在update中调用translate的话,运动会发生卡顿,这是因为受场景渲染的影响,帧率是时刻在变的,所以每段时间运动的有快有慢。
解决方法是乘以Time.deltaTime(每帧之间的时间)作为补偿,这样就和单位时间运动的距离实现同步了,translate的参数其实是距离,而不是方向。
好,我们开始说游戏,这是我做的第一关在这里插入图片描述

在目前掌握的情况分析,在Unity中参与碰撞的物体分2大块:1.发起碰撞的物体。2.接收碰撞的物体。

  1. 发起碰撞物体有:Rigibody , CharacterController 。
  2. 接收碰撞物体由:所有的Collider 。

工作的原理为:发生碰撞的物体中必须要有“发起碰撞”的物体。否则,碰撞不响应。

比如:墙用BoxCollider ,所以墙与墙之间无反应。

比如:一个带有Rigidbody属性的箱子,能落到带有MeshCollider属性的地面上。

比如:一个带有Rigidbody属性的箱子,可以被一个带有CharacterController 属性的人推着跑。

在所有Collider上有一个Is Trigger 的boolean型参数。
当发生碰撞反应的时候,会先检查此属性。

当激活此选项时,会调用碰撞双方的脚本 OnTrigger***, 反之,脚本方面没有任何反应。

当激活此选项时,不会发生后续物理的反应。反之,发生后续的物理反应。

总结:Is Trigger 好比是一个物理功能的开关, 是要“物理功能”还是要“OnTrigger脚本”。

下面说一下什么是刚体 Rigibody
附着了刚体的物体,同时也就拥有了物理行为,有三种类型的rigibody
第一种:Dynamic
设置刚体有动态行为mass:质量kg,drag:空气阻力,angular drag:扭转阻力,gravityscale:重力比例;
第二种:kinematic
若启用,物体将不受力的作用,只能通过直接设置位置,旋转来操作它;
第三种:Static
静态的,不受力的作用。

猜你喜欢

转载自blog.csdn.net/weixin_42927264/article/details/82842573