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>();
に変更する。
詳細はここで確認。
大変参考になりました。