61
パーティクルで 2Dシューティング くるくる

Unityクリエイターズ勉強会【2/2】【関西】発表資料

Embed Size (px)

DESCRIPTION

https://dl.dropbox.com/u/37779475/20130130UniBen/Desktop.html このゲームの作り方の資料です GoogleDriveにも資料があります https://docs.google.com/presentation/d/1fA7KhnVIC6F08CURKqXnrv_Z5p30K5wBj5ddFiVVayY/edit?pli=1#slide=id.g9aaefe24_089

Citation preview

Page 1: Unityクリエイターズ勉強会【2/2】【関西】発表資料

パーティクルで

2Dシューティング

くるくる

Page 2: Unityクリエイターズ勉強会【2/2】【関西】発表資料

自己紹介

くるくる・@mkd214・22歳・大学院1回生・普段はJavaScriptでARな研究してます

Unity歴は1年半弱・簡単なプロトタイプ作って遊んでます・ゲームジャムやハッカソンによく出没

Page 3: Unityクリエイターズ勉強会【2/2】【関西】発表資料

宣伝

おっさんコレクション

・Twitter上におっさんが現れるので捕まえる

・30種のおっさんをコンプリートするゲーム

・Node.js+MongoDB+DropBox

・興味のある人は @yanotasu をフォロー

Page 4: Unityクリエイターズ勉強会【2/2】【関西】発表資料

早速

Page 5: Unityクリエイターズ勉強会【2/2】【関西】発表資料

ゲームを作って行きましょう

Page 6: Unityクリエイターズ勉強会【2/2】【関西】発表資料

どんなゲーム??

Page 7: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Particleがわんさかでてくるゲーム!!

Page 8: Unityクリエイターズ勉強会【2/2】【関西】発表資料

と,いうことでParticleについて学ぼう!!

Page 9: Unityクリエイターズ勉強会【2/2】【関西】発表資料

今日学ぶ、Particleの4つの要素

Emission Start系

Simulation SpaceShape

Page 10: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Emission

Emission --- パーティクルのでる数を決める

・Rate  連続してパーティクルが出る  1秒辺りにでる数を設定する・Burst  ある時間に一斉にパーティクルが出る  一斉に出る時間と数を設定する

Page 11: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Shape

Shape --- パーティクルのでる形

・Shape  でる形を決める・Radius,Angleなど  でる形の各部分の大きさを設定する・RandomDirection  パーティクルの出る方向をランダムにする・EmitFromShell

Page 12: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Shape

Shape --- パーティクルのでる形

・EmitFromShell  Trueだと表面からのみでる

  Falseだと表面を含む領域全てからでる

Page 13: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Start系

Start系 ---1つのパーティクルが生成された時

     に与えられるパラメータ

・StartLifeTime  出て消えるまでの時間。(寿命)・StartSpeed  出た時の速さ(マイナスの値もいれられるよ)・StartSize  出た時の大きさ

Page 14: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Simulation Space

SimulationSpace --- でたあとのParticleSystem          との位置の依存関係

Local

World

Page 15: Unityクリエイターズ勉強会【2/2】【関西】発表資料

この4つ,なんとなくわかりましたか??

Emission Start系

Simulation SpaceShape

Page 16: Unityクリエイターズ勉強会【2/2】【関西】発表資料

パーティクルを作りましょう!!

Page 17: Unityクリエイターズ勉強会【2/2】【関西】発表資料

必要なパーティクル

自機(Player)チャージしてる時(Charging)チャージが完了した時(Charged)弾(Bullet)自機が死んだ時(DeadPlayer)

敵(Enemy)敵が死んだ時(DeadEnemy)

Page 18: Unityクリエイターズ勉強会【2/2】【関西】発表資料

必要なパーティクル

7つのパーティクルを作成してそれぞれ名前をつけよう

次のページから,パーティクルを作っていくよ!!

Page 19: Unityクリエイターズ勉強会【2/2】【関西】発表資料

自機(Player)

StartLifeTime -> 0.1StartSpeed -> 0SimulationSpace -> World

Rate -> 1000

Shape -> チェックを外す

Page 20: Unityクリエイターズ勉強会【2/2】【関西】発表資料

チャージ中(Charging)

StartLifeTime -> 0.5StartSpeed -> -10

Shape -> SphereRadius -> 5EmitFromShell ->True

Page 21: Unityクリエイターズ勉強会【2/2】【関西】発表資料

チャージ完了(Charged)

Rotation X -> 0

StartLifeTime -> 0.8StartSpeed -> 0StartSize -> 0.3SimulationSpace -> World

Rate -> 100Shape -> チェックを外す

Page 22: Unityクリエイターズ勉強会【2/2】【関西】発表資料

弾(Bullet)

StartLifeTime -> 0.05StartSpeed -> 0StartSize -> 0.8SimulationSpace -> World

Rate -> 100Shape -> チェックを外す

Page 23: Unityクリエイターズ勉強会【2/2】【関西】発表資料

自機が死んだ時(DeadPlayer)

Looping -> falseStartSpeed -> 15

Rate -> 0Time Particles -> 0.00 100 -> 0.50 100 -> 1.00 100

Shape -> Sphere

Page 24: Unityクリエイターズ勉強会【2/2】【関西】発表資料

敵(Enemy)

StartLifeTime -> 0.1StartSpeed -> 0StartColor -> RedSimulation Space -> World

Rate -> 1000

Shape -> チェックを外す

Page 25: Unityクリエイターズ勉強会【2/2】【関西】発表資料

敵が死んだ時(DeadEnemy)

Looping -> falseStartSpeed -> 15StartColor -> Red

Rate -> 0Time Particles -> 0.00 100

Shape -> Sphere

Page 26: Unityクリエイターズ勉強会【2/2】【関西】発表資料

当たり判定と剛体の準備をしよう

Page 27: Unityクリエイターズ勉強会【2/2】【関西】発表資料

当たり判定と剛体の準備をしよう

当たり判定と剛体が必要なのは

Player(自機)Bullet(弾)Enemy(敵)

SphereColliderとRigidbodyをつけておこう!!

Page 28: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Playerに当たり判定と剛体

Use Gravity -> falseFreezePositionZ -> trueFreezeRotationXYZ -> true

Center -> 0 0 0Radius -> 0.3

Page 29: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Enemyに当たり判定

Use Gravity -> falseFreezePositionZ -> trueFreezeRotationXYZ -> true

isTrigger -> trueCenter -> 0 0 0Radius -> 0.5

Page 30: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Bulletに当たり判定

Use Gravity -> falseFreezePositionZ -> trueFreezeRotationXYZ -> true

Center -> 0 0 0Radius -> 0.5

Page 31: Unityクリエイターズ勉強会【2/2】【関西】発表資料

カメラの設定をしておこう

Page 32: Unityクリエイターズ勉強会【2/2】【関西】発表資料

カメラの設定をしておこう

今回は2Dなので

Orthographicカメラを使います

Position XYZ -> 0 1 -10

Background -> Black

Projection -> OrthographicSize -> 5

Page 33: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Scriptを書いて動かそう!!

Page 34: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Playerの動きを作ろう

Player・動く(Move)・チャージする(Charge)・弾を発射する(Shoot)・敵に当たると死亡(Dead)

PlayerController.jsを作成し,

Playerに追加しておいてください

Page 35: Unityクリエイターズ勉強会【2/2】【関西】発表資料

PlayerController.jsを書き換えよう.

function Update () {Move();

}function Move(){

var mouse = Input.mousePosition;var pos = Camera.mainCamera.ScreenToWorldPoint(mouse);

pos.z = 0;transform.position = pos;

}

Page 36: Unityクリエイターズ勉強会【2/2】【関西】発表資料

PlayerController.jsの解説

//スクリーン上のマウスの位置を取得

var mouse = Input.mousePosition;//マウス座標からカメラ座標に変換

var pos = Camera.mainCamera.ScreenToWorldPoint(mouse);

//Zが-10が入るので0にする

pos.z = 0;//マウスの位置に動かす

transform.position = pos;

Page 37: Unityクリエイターズ勉強会【2/2】【関西】発表資料

PlayerController.jsの解説

//スクリーン上のマウスの位置を取得

var mouse = Input.mousePosition;//マウス座標からカメラ座標に変換

var pos = Camera.mainCamera.ScreenToWorldPoint(mouse);

//Zが-10が入るので0にする

pos.z = 0;//マウスの位置に動かす

transform.position = pos;

**この方法はOrthographicカメラ時のみ使える

Page 38: Unityクリエイターズ勉強会【2/2】【関西】発表資料

親子関係に

ChargingとChargedをPlayerの子へ

子にしたいオブジェクトをドラッグ親のオブジェクトにドロップ

Page 39: Unityクリエイターズ勉強会【2/2】【関西】発表資料

親子関係に

ChargingとChargedをPlayerの子へ

子にしたいオブジェクトをドラッグ親のオブジェクトにドロップ

その後,子のPositionを(0,0,0)にしておく

Page 40: Unityクリエイターズ勉強会【2/2】【関西】発表資料

PlayerController.jsの最後に追加

var chargedObj:GameObject;var chargingObj:GameObject;function Charge(){

if(Input.GetButton("Fire1")){chargingObj.SetActive(true);

}else if(Input.GetButton("Fire1")){chargingObj.SetActive(false);

}}

Page 41: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Chargeさせる(PlayerController.js内)

function Start () {chargingObj.SetActive(false);chargedObj.SetActive(false);

}function Update () {

Move();Charge();

}

Page 42: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Scriptから他Objectを操作

Playerの子のChargedをCharged Obj横のNoneにドラッグドロップ

Playerの子のChargingをCharging Obj横のNoneにドラッグドロップ

Page 43: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Chargeの解説

//マウスの左クリックが押されている間はTrueif(Input.GetButton("Fire1")){

//chargingObjをアクティブ(動いている状態)にします

chargingObj.SetActive(true);//マウスの左クリックが上がった瞬間だけTrue}else if(Input.GetButton("Fire1")){

//chargingObjをアクティブじゃないようにする

chargingObj.SetActive(false);}

Page 44: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Chargeの追加(PlayerController.js内)

private var time : float = 0.0;function Charge(){

time+=Time.deltaTime;if(Input.GetButton("Fire1")){

if(time<2) { chargingObj.SetActive(true);}else{

chargingObj.SetActive(false);chargedObj.SetActive(true);

}}else if(Input.GetButtonUp("Fire1")){

if(time<2) { chargingObj.SetActive(false);}else{chargedObj.SetActive(false);time=0;}

}}

Page 45: Unityクリエイターズ勉強会【2/2】【関西】発表資料

たまを打つよ

Page 46: Unityクリエイターズ勉強会【2/2】【関西】発表資料

PlayerController.jsの最後に追加

var bulletPrefab:GameObject;private var root2 = Mathf.Sqrt(2);private var x = [1,1/root2,0,-1/root2,-1,-1/root2,0,1/root2];private var y = [0,1/root2,1,1/root2,0,-1/root2,-1,-1/root2];

function Shoot(){for(var i=0;i<8;i++){

var bullet : GameObject = Instantiate(bulletPrefab);bullet.transform.position = transform.position + Vector3(x[i],y[i],0)*1.0f;

bullet.rigidbody.velocity = Vector3(x[i],y[i],0) * 15.0f;bullet.name = "Bullet";Destroy(bullet,2.0f);

}}

Page 47: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Shootの追加(PlayerController.js)

function Charge(){time+=Time.deltaTime;if(Input.GetButton("Fire1")){

if(time<2) { chargingObj.SetActive(true);}else{

chargingObj.SetActive(false);chargedObj.SetActive(true);

}}else if(Input.GetButtonUp("Fire1")){

if(time<2) { chargingObj.SetActive(false);}else{chargedObj.SetActive(false);time=0;Shoot();}

}}

Page 48: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Prefabの作り方

HierarchyのBulletをProjectにドラッグドロップ

ProjectにBulletができていれば成功

HierarchyのBulletは必要ないの削除しておきましょう

DeadPlayerとDeadEnemyとEnemyもPrefab化し,Hierarchyのは削除しましょう

Page 49: Unityクリエイターズ勉強会【2/2】【関西】発表資料

関連付けよう!!

BulletPrefabに関連付けるために

ProjectのBulletをPlayerControllerのNoneにドラッグドロップ

Page 50: Unityクリエイターズ勉強会【2/2】【関西】発表資料

当たり判定を作るよ!!

Page 51: Unityクリエイターズ勉強会【2/2】【関西】発表資料

PlayerController.jsの最後に追加

var deadPlayerPrefab:GameObject;function OnTriggerEnter(other:Collider){

if(other.gameObject.name == "Enemy"){var obj=Instantiate(deadPlayerPrefab);obj.transform.position = transform.position;Destroy(gameObject);

}}

Page 52: Unityクリエイターズ勉強会【2/2】【関西】発表資料

OnTriggerEnterの解説

//Triggerにぶつかった時に呼ばれる

function OnTriggerEnter(other:Collider){//ぶつかったオブジェクトの名前がEnemyならTrueif(other.gameObject.name == "Enemy"){

//Prefabをゲームシーンに登場させる

var obj=Instantiate(deadPlayerPrefab);//登場したPrefabの位置をPlayerの位置にする

obj.transform.position = transform.position;//Playerを消す

Destroy(gameObject);}

}

Page 53: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Enemyをだすよ!!

Page 54: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Enemyをだすよ!!

空のGameObjectを作成.

名前は Creater.

Create.jsを作成.

空のGameObjectにAdd.

右のようになっていればOK

Page 55: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Create.jsを編集しよう

private var time=0.0f;var prefab:GameObject;var timeInterval : float = 2.5f;function Update () {

time += Time.deltaTime;if(time > timeInterval){

time=0.0f;var obj = Instantiate(prefab);obj.transform.position.x = Random.Range(-11.20f,11.20f);obj.transform.position.y = 6;obj.transform.position.z = 0;obj.name = "Enemy";

}}

Page 56: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Createrの設定

PrefabがNoneになっているので

ProjectionのEnemyをドラッグドロップ

Page 57: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Enemyを動かすよ

Page 58: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Enemyの動きを知ろう

Enemy・最初に速度を設定(等速直線運動する)・下に行き過ぎたら勝手に消える・弾にあたったらやられる

Enemy.jsを作成し,

EnemyのPrefabに追加しておいてください

Page 59: Unityクリエイターズ勉強会【2/2】【関西】発表資料

Enemy.jsを書き換えよう.

function Start () {rigidbody.velocity.y = -Random.Range(3.0f,10.0f);

}function Update () {

if(transform.position.y < -12.0f){Destroy(gameObject);}}var deadEnemyPrefab : GameObject;function OnTriggerEnter(other:Collider){

if(other.gameObject.name == "Bullet"){var obj:GameObject = Instantiate(deadEnemyPrefab);obj.transform.position = transform.position;Destroy(obj,3.0f);Destroy(gameObject);

}}

Page 60: Unityクリエイターズ勉強会【2/2】【関西】発表資料

関連付けるよ

ProjectionのEnemyのDeadEnemyPrefabがNoneになっているので

ProjectのDeadEnemyをNoneにドラッグドロップ

Page 61: Unityクリエイターズ勉強会【2/2】【関西】発表資料

完成!!!