My Note Pad

エンジニアリングや日々の雑感を書いていきます

はじめてのUnityをC#でやってみた

Unityの勉強を始めました。

最初は、評価の高かったこの本を買って勉強していました。

Unityで神になる本。

新品価格
¥4,104から
(2015/8/15 23:40時点)

第一章ですぐにUnityで無料のAssetを利用して世界を作る事ができるため、いかにUnityがパワフルなのかを感じる事ができるため、今後の学習意欲を高めてくれました。
 しかし第三章で3Dモデリング中心になり、ここは軽く読み飛ばし、、 第四章でスクリプト基礎知識に。 他の方のレビューでも書かれている通り、JavaScriptで解説されています。 今後はJavaScriptではなくC#かなーと思っていたので、C#に読み換えながらすすめていくことにしました。・・・が、C#ほぼ未経験の自分にはなかなか厳しかった・・! しかもUnityのAPIも殆ど知らない・・。
 という訳で一度挫折して、Unity公式のチュートリアルを一度やってから進めることにしました。

japan.unity3d.com

このチュートリアルもなんと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を身につけていきたいと思います。