Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,850 views

Published on

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

Published in: Self Improvement
  • Be the first to comment

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

  1. 1. パーティクルで2Dシューティングくるくる
  2. 2. 自己紹介くるくる・@mkd214・22歳・大学院1回生・普段はJavaScriptでARな研究してますUnity歴は1年半弱・簡単なプロトタイプ作って遊んでます・ゲームジャムやハッカソンによく出没
  3. 3. 宣伝おっさんコレクション・Twitter上におっさんが現れるので捕まえる・30種のおっさんをコンプリートするゲーム・Node.js+MongoDB+DropBox・興味のある人は @yanotasu をフォロー
  4. 4. 早速
  5. 5. ゲームを作って行きましょう
  6. 6. どんなゲーム??
  7. 7. Particleがわんさかでてくるゲーム!!
  8. 8. と,いうことでParticleについて学ぼう!!
  9. 9. 今日学ぶ、Particleの4つの要素 Emission Start系 Shape Simulation Space
  10. 10. EmissionEmission --- パーティクルのでる数を決める・Rate  連続してパーティクルが出る  1秒辺りにでる数を設定する・Burst  ある時間に一斉にパーティクルが出る  一斉に出る時間と数を設定する
  11. 11. ShapeShape --- パーティクルのでる形・Shape  でる形を決める・Radius,Angleなど  でる形の各部分の大きさを設定する・RandomDirection  パーティクルの出る方向をランダムにする・EmitFromShell
  12. 12. ShapeShape --- パーティクルのでる形・EmitFromShell  Trueだと表面からのみでる  Falseだと表面を含む領域全てからでる
  13. 13. Start系Start系 ---1つのパーティクルが生成された時     に与えられるパラメータ・StartLifeTime  出て消えるまでの時間。(寿命)・StartSpeed  出た時の速さ(マイナスの値もいれられるよ)・StartSize  出た時の大きさ
  14. 14. Simulation SpaceSimulationSpace --- でたあとのParticleSystem          との位置の依存関係 Local World
  15. 15. この4つ,なんとなくわかりましたか?? Emission Start系 Shape Simulation Space
  16. 16. パーティクルを作りましょう!!
  17. 17. 必要なパーティクル自機(Player)チャージしてる時(Charging)チャージが完了した時(Charged)弾(Bullet)自機が死んだ時(DeadPlayer)敵(Enemy)敵が死んだ時(DeadEnemy)
  18. 18. 必要なパーティクル7つのパーティクルを作成してそれぞれ名前をつけよう次のページから,パーティクルを作っていくよ!!
  19. 19. 自機(Player)StartLifeTime -> 0.1StartSpeed -> 0SimulationSpace -> WorldRate -> 1000Shape -> チェックを外す
  20. 20. チャージ中(Charging)StartLifeTime -> 0.5StartSpeed -> -10Shape -> SphereRadius -> 5EmitFromShell ->True
  21. 21. チャージ完了(Charged)Rotation X -> 0StartLifeTime -> 0.8StartSpeed -> 0StartSize -> 0.3SimulationSpace -> WorldRate -> 100Shape -> チェックを外す
  22. 22. 弾(Bullet)StartLifeTime -> 0.05StartSpeed -> 0StartSize -> 0.8SimulationSpace -> WorldRate -> 100Shape -> チェックを外す
  23. 23. 自機が死んだ時(DeadPlayer)Looping -> falseStartSpeed -> 15Rate -> 0Time Particles -> 0.00 100 -> 0.50 100 -> 1.00 100Shape -> Sphere
  24. 24. 敵(Enemy)StartLifeTime -> 0.1StartSpeed -> 0StartColor -> RedSimulation Space -> WorldRate -> 1000Shape -> チェックを外す
  25. 25. 敵が死んだ時(DeadEnemy)Looping -> falseStartSpeed -> 15StartColor -> RedRate -> 0Time Particles -> 0.00 100Shape -> Sphere
  26. 26. 当たり判定と剛体の準備をしよう
  27. 27. 当たり判定と剛体の準備をしよう当たり判定と剛体が必要なのはPlayer(自機)Bullet(弾)Enemy(敵)SphereColliderとRigidbodyをつけておこう!!
  28. 28. Playerに当たり判定と剛体Use Gravity -> falseFreezePositionZ -> trueFreezeRotationXYZ -> trueCenter -> 0 0 0Radius -> 0.3
  29. 29. Enemyに当たり判定Use Gravity -> falseFreezePositionZ -> trueFreezeRotationXYZ -> trueisTrigger -> trueCenter -> 0 0 0Radius -> 0.5
  30. 30. Bulletに当たり判定Use Gravity -> falseFreezePositionZ -> trueFreezeRotationXYZ -> trueCenter -> 0 0 0Radius -> 0.5
  31. 31. カメラの設定をしておこう
  32. 32. カメラの設定をしておこう今回は2DなのでOrthographicカメラを使いますPosition XYZ -> 0 1 -10Background -> BlackProjection -> OrthographicSize -> 5
  33. 33. Scriptを書いて動かそう!!
  34. 34. Playerの動きを作ろうPlayer・動く(Move)・チャージする(Charge)・弾を発射する(Shoot)・敵に当たると死亡(Dead)PlayerController.jsを作成し,Playerに追加しておいてください
  35. 35. PlayerController.jsを書き換えよう.function Update () { Move();}function Move(){ var mouse = Input.mousePosition; var pos = Camera.mainCamera.ScreenToWorldPoint(mouse); pos.z = 0; transform.position = pos;}
  36. 36. PlayerController.jsの解説//スクリーン上のマウスの位置を取得var mouse = Input.mousePosition;//マウス座標からカメラ座標に変換var pos = Camera.mainCamera.ScreenToWorldPoint(mouse);//Zが-10が入るので0にするpos.z = 0;//マウスの位置に動かすtransform.position = pos;
  37. 37. PlayerController.jsの解説//スクリーン上のマウスの位置を取得var mouse = Input.mousePosition;//マウス座標からカメラ座標に変換var pos = Camera.mainCamera.ScreenToWorldPoint(mouse);//Zが-10が入るので0にするpos.z = 0;//マウスの位置に動かすtransform.position = pos;**この方法はOrthographicカメラ時のみ使える
  38. 38. 親子関係にChargingとChargedをPlayerの子へ子にしたいオブジェクトをドラッグ親のオブジェクトにドロップ
  39. 39. 親子関係にChargingとChargedをPlayerの子へ子にしたいオブジェクトをドラッグ親のオブジェクトにドロップその後,子のPositionを(0,0,0)にしておく
  40. 40. 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); }}
  41. 41. Chargeさせる(PlayerController.js内)function Start () { chargingObj.SetActive(false); chargedObj.SetActive(false);}function Update () { Move(); Charge();}
  42. 42. Scriptから他Objectを操作Playerの子のChargedをCharged Obj横のNoneにドラッグドロップPlayerの子のChargingをCharging Obj横のNoneにドラッグドロップ
  43. 43. Chargeの解説//マウスの左クリックが押されている間はTrueif(Input.GetButton("Fire1")){ //chargingObjをアクティブ(動いている状態)にします chargingObj.SetActive(true);//マウスの左クリックが上がった瞬間だけTrue}else if(Input.GetButton("Fire1")){ //chargingObjをアクティブじゃないようにする chargingObj.SetActive(false);}
  44. 44. 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;} }}
  45. 45. たまを打つよ
  46. 46. 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); }}
  47. 47. 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();} }}
  48. 48. Prefabの作り方HierarchyのBulletをProjectにドラッグドロップProjectにBulletができていれば成功HierarchyのBulletは必要ないの削除しておきましょうDeadPlayerとDeadEnemyとEnemyもPrefab化し,Hierarchyのは削除しましょう
  49. 49. 関連付けよう!!BulletPrefabに関連付けるためにProjectのBulletをPlayerControllerのNoneにドラッグドロップ
  50. 50. 当たり判定を作るよ!!
  51. 51. 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); }}
  52. 52. OnTriggerEnterの解説//Triggerにぶつかった時に呼ばれるfunction OnTriggerEnter(other:Collider){ //ぶつかったオブジェクトの名前がEnemyならTrue if(other.gameObject.name == "Enemy"){ //Prefabをゲームシーンに登場させる var obj=Instantiate(deadPlayerPrefab); //登場したPrefabの位置をPlayerの位置にする obj.transform.position = transform.position; //Playerを消す Destroy(gameObject); }}
  53. 53. Enemyをだすよ!!
  54. 54. Enemyをだすよ!!空のGameObjectを作成.名前は Creater.Create.jsを作成.空のGameObjectにAdd.右のようになっていればOK
  55. 55. 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"; }}
  56. 56. Createrの設定PrefabがNoneになっているのでProjectionのEnemyをドラッグドロップ
  57. 57. Enemyを動かすよ
  58. 58. Enemyの動きを知ろうEnemy・最初に速度を設定(等速直線運動する)・下に行き過ぎたら勝手に消える・弾にあたったらやられるEnemy.jsを作成し,EnemyのPrefabに追加しておいてください
  59. 59. 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); }}
  60. 60. 関連付けるよProjectionのEnemyのDeadEnemyPrefabがNoneになっているのでProjectのDeadEnemyをNoneにドラッグドロップ
  61. 61. 完成!!!

×