C#基礎の確認


float → int


float → intの場合、四捨五入ではなく小数点以下が切捨てされるような挙動になる
例。
(float)1.9999 → (int)1
(float)1.5555 → (int)1
(float)1.0001 → (int)1


using UnityEngine;
using System.Collections;

public class countTest : MonoBehaviour {

  float x=0;
   int xx=0;
   // Use this for initialization
   void Start () {
   }
   
   // Update is called once per frame
   void Update () {
       x+=Time.deltaTime;
       xx = (int)x;
   }
}


組み込み演算子




イテレータ構文の利用

イテレータ構文を利用するとforeachで利用できるコレクションクラスが作成できる


using UnityEngine;
using System.Collections;
using System.Collections.Generic; //このusingが必要

public class returnTest : MonoBehaviour {

  // Use this for initialization
   void Start () {
       IEnumerable<int> test = FromTo(0,5);        
       foreach (int item in test) {
           print(item);
       }
       
       foreach (int item in FromTo(10,20)) {
           print(item);
       }
   }
   
   // Update is called once per frame
   void Update () {
   }
   
   //以下がイテレータ構文 
   //これによりforeachで利用できるコレクションクラスが作成できる (この場合intのコレクション int=クラス) 
   //イテレーター ブロック中で yield return 文が呼ばれるたびにforeach 文中で使われる値を1つ得ます 
   public IEnumerable<int>    FromTo(int fr, int to){
       while(fr<=to){
           yield return fr++;    //return の代わりに yield return •breakなら代わりに yield break というキーワードを使う 
       }
   }
}

何故、MonoBehaviour.StartCoroutineはyieldキーワードを利用しているか?


C#の仕様的に yield return は内部的にコルーチンとして動いているかららしい

IEnumeratorオブジェクトはオブジェクトだけ渡して処理は中断、レジュームされている。そして
MoveNext() が実行されるたびに、前回の yield return 文からブロックが再開されるという仕組みになっているらしい

これはunity の StartCoroutine も動作的に似ているからかな??

return

returnは値を返すが、その関数を一つのネストとみて処理をそこで終了するbreak;的な意味合いもある

using UnityEngine;
using System.Collections;

public class returnTest : MonoBehaviour {

  // Use this for initialization
   void Start () {
   
   }
   
   // Update is called once per frame
   void Update () {
       returnTestFunc(true);
   }
   
   void returnTestFunc(bool x){
       if(x){
           if(x){
               return;            //どんなに深いネストでも効果は同じ
           }
       }
       print("DoSomething");    //上記のif文でreturnされているので以下は処理されない
       print("xyz");
       print("DoSomething");
   }
}

同列に考える事、自体間違っているかもしれないが…
  値を返す 処理を中断する ループに戻る
break - ×
continue -
return ×

メニュー


  • 最終更新:2014-09-05 13:15:46

このWIKIを編集するにはパスワード入力が必要です

認証パスワード