はじめてのUnityをC#でやってみた
Unityの勉強を始めました。
最初は、評価の高かったこの本を買って勉強していました。
新品価格 |
第一章ですぐにUnityで無料のAssetを利用して世界を作る事ができるため、いかにUnityがパワフルなのかを感じる事ができるため、今後の学習意欲を高めてくれました。
しかし第三章で3Dモデリング中心になり、ここは軽く読み飛ばし、、 第四章でスクリプト基礎知識に。 他の方のレビューでも書かれている通り、JavaScriptで解説されています。 今後はJavaScriptではなくC#かなーと思っていたので、C#に読み換えながらすすめていくことにしました。・・・が、C#ほぼ未経験の自分にはなかなか厳しかった・・! しかもUnityのAPIも殆ど知らない・・。
という訳で一度挫折して、Unity公式のチュートリアルを一度やってから進めることにしました。
このチュートリアルもなんとJavaScriptでしたが、、 大した量ではないので頑張ってやってみました。
まずはBallContoller
これをC#で書き換えると以下のようになりました。
using UnityEngine; public class BallController : MonoBehaviour { public float Speed = 20.0f; void Start () { Rigidbody rigidbody = GetComponent<Rigidbody>(); rigidbody.AddForce( (transform.forward + transform.right) * Speed, ForceMode.VelocityChange); } }
続いてRacketController
using UnityEngine; public class RacketController : MonoBehaviour { public float Accel = 1000.0f; void Update () { Rigidbody rigidbody = GetComponent<Rigidbody>(); rigidbody.AddForce( transform.right * Input.GetAxisRaw("Horizontal") * Accel, ForceMode.Impulse); } }
BlockContoller
using UnityEngine; public class BlockController : MonoBehaviour { void OnCollisionEnter(Collision collision) { Destroy(gameObject); } }
BottomWallController
using UnityEngine; public class BottomWallController : MonoBehaviour { void OnCollisionEnter(Collision collision) { Destroy(collision.gameObject); } }
最後にHitPlaySound
using UnityEngine; public class HitPlaySound : MonoBehaviour { public AudioClip sound; void OnCollisionEnter(Collision collisin) { AudioSource.PlayClipAtPoint(sound, transform.position); } }
嵌ったところ
- C#ではRigidbodyのオブジェクトをGetComponentで取得する必要があった。
- 当然といえば当然ですが、明示的な型宣言が必要。APIを読めばすぐに解りますが。
- メソッド名が大文字(OnCollisionEnterとか)
Javaではメソッド名は小文字で書くことが多かったので、onCollisionEnterと書いていてイベントが発火せずに悩みました。コンパイルエラーにならないし。。
今回はコード量が大した事なかったのでなんとかなりましたが、今後も苦労しそうです。
しかし、これだけで簡単にブロック崩しゲームが作れるのは素直にすごいと思います。 これから少しずつUnityを身につけていきたいと思います。