1、改进飞碟(Hit UFO)游戏:
游戏内容要求:
- 按 adapter模式设计图修改飞碟游戏
- 使它同时支持物理运动与运动学(变换)运动
新设计图如下:
在上次作业基础上进行改进:
- 给飞碟增加重力属性:

- 添加Adapter:
public class Adapter : MonoBehaviour,AdaActionmanager {
public FlyActionManager fly_action_manager;
public PhyActionManager phy_action_manager;
public void UFOFly(GameObject disk,float angle,float power,bool op){
if (op) phy_action_manager.UFOFly(disk,angle,power);
else fly_action_manager.UFOFly(disk,angle,power);
}
void Start(){
fly_action_manager=gameObject.AddComponent<FlyActionManager>() as FlyActionManager;
phy_action_manager=gameObject.AddComponent<PhyActionManager>() as PhyActionManager;
}
}
- 添加PhyUFOFlyAction:
public class PhyUFOFlyAction : SSAction{
private Vector3 start_vector; //初速度向量
public float power;
private PhyUFOFlyAction() {}
public static PhyUFOFlyAction GetSSAction(Vector3 direction, float angle, float power){
//初始化物体将要运动的初速度向量
PhyUFOFlyAction action = CreateInstance<PhyUFOFlyAction>();
if (direction.x == -1) action.start_vector = Quaternion.Euler(new Vector3(0, 0, -angle)) * Vector3.left * power;
else action.start_vector = Quaternion.Euler(new Vector3(0, 0, angle)) * Vector3.right * power;
action.power = power;
return action;
}
public override void Update() {
if (this.transform.position.y < -10){
this.destroy = true;
this.callback.SSActionEvent(this);
}
}
public override void Start(){
//使用重力以及给一个初速度
gameobject.GetComponent<Rigidbody>().velocity = power / 13 * start_vector;
gameobject.GetComponent<Rigidbody>().useGravity = true;
}
}
- 添加PhyActionManager:
public class PhyActionManager : SSActionManager{
public PhyUFOFlyAction fly;
protected void Start(){
}
//飞碟飞行
public void UFOFly(GameObject disk, float angle, float power){
fly = PhyUFOFlyAction.GetSSAction(disk.GetComponent<DiskData>().direction, angle, power);
this.RunAction(disk, fly, this);
}
259

被折叠的 条评论
为什么被折叠?



