unity 模仿东方弹幕游戏

首先感谢我们组的两位大佬,认真负责又很有耐心地指导我们,跟着他们学到了不少东西。

先设计好初稿,然后再分析实现步骤,比如列出数学物理公式,最后就是编码实现阶段了。下面是我的代码:

BulletCenterDance:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BulletCenterDance : BulletTypeB {

    public Vector2 Valocity;
	
	// Update is called once per frame
	void Update () {
        transform.Translate(Valocity * Time.deltaTime);
	}
}

RevolveCircle:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RevolveCircle : SpellCard {

	public RevolveCircle() : base(new Circle(), new Vector2(-1.5f, 2.4f), 78f, 15000, "想起「旋转圆舞」 ")
	{
	}
}

class Circle : State<Boss>{
	float time = 2f;
	float timeC = 4f;
	float t = -4f;
	GameObject Revolve;
	public override void Enter(Boss owner)
	{
		Revolve  = ((Satori)owner).RevolveCircleResources.GetComponent<RevolveCircleResource>().RevolveCircle;
		owner.transform.position = new Vector3(-1.53f, 0, 0);
	}
	public override void Execute(Boss owner)
	{
		timeC -= Time.deltaTime;
		time -= Time.deltaTime;
		t += Time.deltaTime;
		if (time < 0) {
			time += 0.1f;
			Vector2 StartLo;
			if (GameManager.player != null) {
				StartLo = GameManager.player.transform.position - owner.transform.position;
			} else {
				StartLo = new Vector2 (0, 1);
			}
			StartLo.Normalize ();
			for (int i = -1; i <= 1; i++) {
				float routeAngle = 30 * Mathf.Deg2Rad * i;
				Vector2 valocity = new Vector2(StartLo.x*Mathf.Cos(routeAngle)-StartLo.y*Mathf.Sin(routeAngle),StartLo.x*Mathf.Sin(routeAngle)+StartLo.y*Mathf.Cos(routeAngle));
				valocity *= 3.0f;
				BulletCenterDance c = GameObject.Instantiate (((Satori)owner).RevolveCircleResources.GetComponent<RevolveCircleResource> ().RevolveCircle, owner.transform.position, Quaternion.identity).GetComponent<BulletCenterDance> ();
				c.Valocity = valocity;
				GameObject.Destroy (c.gameObject, 5f);
			}



		}
		if (timeC<0) {
			timeC += 0.3f;
			for (int i = 0; i < 4; i++) {
				Vector2 StartLocation = new Vector2 (Mathf.Cos (t), Mathf.Sin (t));
				Vector2 valocity = new Vector2 (2f * Mathf.Cos (2f * t + i * Mathf.PI / 2), 2f * Mathf.Sin (2f * t + i * Mathf.PI / 2));
				BulletCenterDance r = GameObject.Instantiate (((Satori)owner).RevolveCircleResources.GetComponent<RevolveCircleResource> ().BulletTriangle, owner.transform.position + (Vector3)StartLocation, Quaternion.identity).GetComponent<BulletCenterDance> ();
				r.Valocity = valocity;
				GameObject.Destroy (r.gameObject, 10f);
			}
			for (int i = 0; i < 4; i++) {
				Vector2 StartLocation = new Vector2 (-Mathf.Cos (t), Mathf.Sin (t));
				Vector2 valocity = new Vector2 (-2f * Mathf.Cos (2f * t + i * Mathf.PI / 2), 2f * Mathf.Sin (2f * t + i * Mathf.PI / 2));
				BulletCenterDance r = GameObject.Instantiate (((Satori)owner).RevolveCircleResources.GetComponent<RevolveCircleResource> ().BulletTriangle, owner.transform.position + (Vector3)StartLocation, Quaternion.identity).GetComponent<BulletCenterDance> ();
				r.Valocity = valocity;
				GameObject.Destroy (r.gameObject, 10f);
			}
		}
	}
			


}



RevolveCircleResources:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RevolveCircleResource : MonoBehaviour {

	public GameObject RevolveCircle; //
	public GameObject BulletTriangle; //
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}


posted @ 2017-09-09 15:40  七月kirino  阅读(1862)  评论(0编辑  收藏  举报