Unity3d 打飞碟-物理运动版
github 传送
视频演示
题目要求
改进飞碟(Hit UFO)游戏:
- 按 adapter模式 设计图修改飞碟游戏;
- 使它同时支持物理运动与运动学(变换)运动。
Adapter 模式
实现
效果如下
- 和上一个版本的主要区别是添加了刚体后,飞碟碰撞会反弹。
主要写一下修改的地方。
接口
- 根据模式变化,需要修改接口。新加一个
IActionManager
接口。另外,在 userAction
中添加了 getMode()
,switchMode()
方法,方便 GUI 获取当前模式和在动力学 (Dynamics) 模式,即物理运动,和运动学 (Kinematics) 模式之间进行切换。
namespace Interfaces {
public interface ISceneController {
}
public interface UserAction {
void Hit(Vector3 pos);
int getScore();
int getRound();
bool getMode();
void stopGame();
void Restart();
void switchMode();
}
public enum SSActionEventType: int {
Started, Completed}
public interface ISSActionCallback {
void SSActionCallback(SSAction source);
}
public interface IActionManager {
void MoveDisk(Disk disk);
}
}
CCPhysisAction 的添加
- 和
CCMoveToAction
一个道理,CCPhysisAction
也是一个继承了 SSAction
的具体的运动类。CCMoveToAction
是基于运动学的动作变换,是通过计算物体中心的运动方程,轨迹,位移,速度,旋转来直接变换游戏对象;CCPhysisAction
考虑了物体实际的重力和本身的形状,外部力对物体的影响,使游戏对象的运动更加逼真。
- 通过物理引擎更新的
CCPhysisAction
类需要使用 FixedUpdate
(尽管这里只需要在 start()
中赋一次初始速度,无需在 FixedUpdate 中一直添加速度,但为了区别,我还是写了一个 FixedUpdate
),所以在其继承的 SSAction
中添加了一个 FixedUpdate
虚函数,然后在 CCPhysicAction
中实现。而需要重写的 Update
函数空着即可。
public class CCPhysisAction : SSAction {
public float speedx, speedy, speedz;
public float gravity =