unityのイベントリスナーにメソッド、プロパティを指定する
インスペクターから値を設定できるのは
- staticでない
- publicである
- consutでない
- 配列の要素数
- シリアライズされた変数
プロパティ
int型 スライダー発火でtrue インスペクターで設定された値が初期化
float型 dynamic 可変するみたい。 0~1までのスライダーの位置を正規化された値を初期化
メソッド unityAction
注意*
aプロパティは画像では0だが5に入れなおしている
staticなどはシリアライズしてもインスペクターから値を変更できない
String peace = "azatoi";using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class slidervalue : MonoBehaviour { public int test ; [SerializeField] public static int ArrayCount ; public Slider slider; public float SliderValue{ get; set; } public int a{ get; set ;} public Text[] text = new Text[ArrayCount]; public static string s = "0"; public void ChangeValue(float value){ s = ((int)(Mathf.Lerp (1, 10, value))).ToString (); Debug.Log (a); } // Use this for initialization void Start () { for (int i= 0; i<text.Length ; i++){ text[i] = text[i].GetComponent<Text> (); } } // Update is called once per frame void Update () { text[0].text = s; text [1].text = a.ToString(); text [2].text = SliderValue.ToString(); //Debug.Log ((int)SliderValue); } }
unityのTime.deltaTimeを使ってミリ秒を計測する
こんにちわ。
ちょっとunityで時間計測プログラムを作りたいと思いまして、いろいろ調べていたのですが
↓こちらの方のやり方がスマートだと思い参考にして作ってみたのですが
blog.livedoor.jp
ミリ秒を計測することができないなぁと思いましてじゃあ作ろう!と思い作ったのがこちら
しかしこれ若干てまどいまして
Time.deltaTimeはミリ秒まで返すということが書いてあり
コンソールで確認してみたら
0.2
0.4
0.37333333
ってなってたんでミリ秒じゃなくてμ秒????って思ったんですけど(
返す値は秒でした・・・・
つまり0.2秒 0,4秒 0.37秒・・・という風に返ってくるわけですね。
返すのは最高でミリ秒μ秒?まで(だってこここで3333μ秒まででてるし)正確に計算できて返す単位は秒というわけだと勝手に解釈しています。
まぁミリ秒なんて計測しても意味ないんだけどね(笑)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;[f:id:saigonitoride:20170903214157g:plain] public class UI : MonoBehaviour { float time; Text text; void Start () { time = 0; text = GetComponent<Text>(); } void Update () { time += Time.deltaTime;//毎フレームの時間を加算. int minute = (int)time/60;//分.timeを60で割った値. int second = (int)time%60;//秒.timeを60で割った余り. int msecond = (int)(time*1000%1000); string minText, secText, msecText;//分・秒を用意. if (minute < 10) minText = "0" + minute.ToString();//ToStringでint→stringに変換. else minText = minute.ToString(); if (second < 10) secText = "0" + second.ToString();//上に同じく. else secText = second.ToString(); if (msecond < 10) msecText = "000" + msecond.ToString (); else if(msecond < 100) msecText = "00" + msecond.ToString (); else if(msecond < 1000) msecText = "0" + msecond.ToString (); else msecText = msecond.ToString (); text.text = "[Time] " + minText + ":" + secText + ":" + msecText ; Debug.Log (time); } }
うるう年を判定するプログラム 解説有
宿題とかでうるう年を判定するプログラムを書くときあると思います。
うるう年は4で割り切れ100で割り切れず400で割り切れます。
なぜこのような計算をするのか
地球の公転周期は365.2422日となっており、一年が365日だとすると、4年で約1日(0.2422×4=0.9688日)のズレが出るので
4年に一回一日分減らす
しかし、厳密には4年に一度調整するこの「一日」は実際には0.9688日なので、0.0312日の誤差が生じてしまう
そこでさらに、この0.0312日を調整するために、400年で3日(0.0312×100=3.12日)をうるう年にしない年とすることで解消する。
その解消する年を100で割り切れる年としたのだが、100年毎に平年としてしまうと、400年に3日調整するところを、4日と一日多く調整してしまう。
そこで400年ごとにうるう年を設けた。
ということですね。
うるう年については
うるう年は400年に何回ある? | 雑学 | Ofee
↑ここを参考にしました。
using System; public class Hantei { public bool uruudoshi ; public static void Main(string[] args) { ////ここに判定したい年を入力 uruudoshi = Hantei(2020); Console.Write("{0}。\n", uruudoshi); } public bool Hantei(int y){ if (y % 4 == 0) { if (y % 100 != 0) { return true; } else { if (y % 400 == 0) { return true; } else { return false; } } }else{ return false; } } }
これでもいいけどね
public bool Hantei(int y){ return y%4 == 0&&(y%100 !=0 ||y&400==0); }
InputFieldコンポーネントについて
卒研でunity使うことになってるので仕方なく
unityをいじっているのですが・・・
inputFieldコンポーネントを使う可能性があるのでメモ書き程度に
inputFieldにはなんかたくさんのめそっどとかありますね
もともとJava専なのでC#のデリゲードとか、get setとかよくわからないの使わなくちゃコード読めない・・・泣
さてonValidateInputですが
void Start () { Debug.Log("text"); inputField.onValueChange.AddListener(OnValueChange); inputField.onEndEdit.AddListener(OnSubmit); inputField.onValidateInput = (string text, int charIndex, char addedChar)=>{ // アルファベット小文字が入力されたら大文字にする char ret = addedChar; /*if(addedChar >= 'a' && addedChar <= 'z') { ret = (char)(addedChar + ('A' - 'a')); } */ Debug.Log(text); Debug.Log(charIndex); Debug.Log(addedChar); return ret; }; } // Update is called once per frame void Update () { } public void OnValueChange(string value) { Debug.Log("Input Field value is " + value); } public void OnSubmit(string value) { Debug.Log("Submit value is " + value); }
こうかくと↓になるんですけど
なにこれ・・・・全角いれると反映されない・・・
onValueChangeはイベントらしですね
あともう一個のほうも
とりあえずaddlistenerでやりたいメソッドをぶち込んどいて
で肝心の意味不明なコレ
inputField.onValidateInput
なんかプロパティっていうらしい
ラムダ式で匿名メソッドいれてるし・・
charを返すデリゲードって書いてあったけど
デリゲード自体実装を持ってるわけじゃないし
意味わからん・・・・・・