銀の弾丸、はじめました

Unityとかガジェットとか

Unity入門の本をC#でやってみる

Chapter 5のメモ

Unity入門 ~高機能ゲームエンジンによるマルチプラットフォーム開発~ の内容をJavaScriptでなくC#でコーディングしてみる。

既にやってる方がいるようで、参考にしてるのですが、 上記ブログでも解消出来なかった箇所があったので、メモ。

基本的なJavaScript -> C#の変更の基本的な考え方は、以下の通り。

JavaScript -> C#

  • 変数の型の書き方
var x : float;
↓
float x;
  • 戻り値のない関数の書き方
function x(){}
↓
void x(){}
  • 戻り値のある関数の場合は関数名の前に戻り値の型を指定する
function x(){
     return s;
}

↓

string x(){
     return s;
}
  • float型の値の書き方(数値の後にfを付加する)
var x = 2.2;
↓
float x = 2.2f;
  • VectorとかRect、Colorの書き方(newを付加する)
Vector3(0,0,1)
↓
new Vector3(0,0,1)
Rect()
↓
new Rect()
Color()
↓
new Color()

Chaper 5 ブロックシューター

Scorekeeper.cs

using UnityEngine;
using System.Collections;

public class Scorekeeper : MonoBehaviour {

    public GUISkin skin;

    [HideInInspector]
    public int score;

    void OnGUI(){
        GUI.skin = skin;
        int sw = Screen.width;
        int sh = Screen.height;
        string scoreText = "SCORE : " + score.ToString();
        GUI.Label(new Rect(0, 0, sw/2, sh/4), scoreText, "score");
    }

    // Use this for initialization
    void Start () {
    }
    
    // Update is called once per frame
    void Update () {
    }
}

JavaScriptの場合@HideInInspectorとなっている箇所があるが ここは、[HideInInspector]と書く。

Referee.cs

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Scorekeeper))]

public class Referee : MonoBehaviour {

    public GUISkin skin;

    public float switchInterval;
    public int rewardPoint;
    public int penaltyPoint;

    private Scorekeeper scorekeeper;
    private bool targetIsRed;
    private float switchTimer;


    private string GetTargetColorName(){
        return targetIsRed ? "Red" : "Blue";
    }

    void Start () {
        //scorekeeper = GetComponent(Scorekeeper) as Scorekeeper;
        scorekeeper = GetComponent<Scorekeeper>();
        
        targetIsRed = true;
        switchTimer = switchInterval;
    }
    
    void Update () {
        switchTimer -= Time.deltaTime;
        if(switchTimer < 0.0f){
            targetIsRed = !targetIsRed;
            switchTimer = switchInterval;
        }
    }

    void OnDestroyBox(string boxColorName){
        if(boxColorName == GetTargetColorName()){
            scorekeeper.score += rewardPoint;
        }else{
            scorekeeper.score -= penaltyPoint;
        }
    }

    void OnGUI(){
        GUI.skin = skin;
        if(switchTimer < 1.5f) return;
        int sw = Screen.width;
        int sh = Screen.height;
        string message = "Shoot " + GetTargetColorName() + " Boxes.";
        GUI.color = targetIsRed ? Color.red : Color.blue;
        GUI.Label(new Rect(0, sh/4, sw, sh/2), message, "message");
    }

    void TimeUp(){
        enabled = false;
    }

    void StartGame(){
        enabled = true;
    }
}

JavaScriptでは@script RequireComponent(Scorekeeper)となっている箇所を [RequireComponent(typeof(Scorekeeper))]に変更する。

もう1箇所が、JavaScriptだと scorekeeper = GetComponent(Scorekeeper) as Scorekeeper;となっている箇所を scorekeeper = GetComponent<Scorekeeper>();に変更する。

詳細はここで確認。

大変参考になりました。