Unityのメモ2 相変わらず手探りでUnityで遊んでます **iPhone出力の際のフォントサイズを変更したい [#t6440f7c] -いろいろ調べたけど埋め込み可能なフリーのフォントを利用して,フォントのビットマップを作るっぽい --埋め込み可能なM+フォントのアウトラインをDL --DLはhttp://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index.html --mplus-2c-medium.ttf をプロジェクトにコピー --Unity内でフォントを選択し,サイズを適当に変更しApplyをクリック(これでビットマップフォントができるのかな,,,) ---Fontサイズ18でもけっこう小さい,,, --GUIskinを作成 --GUI系のスクリプトにGUISkinを適用させる ---楽したくてPlaymaker使てます.でこのGUISkinをGUIのState内でGlobalに適用させてます --GUISkinのInspectorの一番上にこのフォントを選択させる --見た目は変わらんけどiPhoneでビルドすると大きさが分かるっぽい -iPhone5でではちゃんと表示されるのにiPhone4では文字化け■■こんな感じで表示される→iPhone4に許されているテクスチャサイズが2048×2048なのが原因→フォントサイズを20(2048×2048になる)に変更しApplyしてビルドするーこれでうまくいった **iTweenのモーションスピードを変更したい [#s46afd36] --iTweenのエクステンションを10$で買うとサンプルプログラムがある **MAC OSXでノーマルマップ [#p70e1df2] -けっこうないが,これが使えそう --http://crazybump.com/mac/ **Unity4がインストール後起動しない(Macのみの問題か不明)MacOSX10.7.7,Unity4.1.0 [#g56fec5a] -Unity4をインストール後,''tx_id is invalid''などと出て起動できない件 #ref(./unity4.jpg,nolink) --原因ーおそらくライセンスサーバに接続できない --対策ーネットワークを切ってUnityを起動、Manual Activationの画面が出るのでそれを続行する **(eng)Unity 4 , not start on Mac OSX [#x8c98150] -Unity4 not start on Mac OSX, after install. -error message is "tx_id is invalid". #ref(./unity4.jpg,nolink) ++Close error message, Unity will quit. ++Disconnect all network connection. including LAN, turn off Wifi,,, ++Launch Unity4, Manual Activation and activation url window will open.(window A) ++Click Manual Activation, save License request file. ++Open Activation URL.(find in winodw A) ++Upload request file. ++Login with unity Account.(or create new account) ++You can download license file. ++save it. ++Back to window A, Load license file. ++Unity will start, If freeze Unity Re launch unity4. **PlayMakerのTrigger Eventが動かない [#o795d7d7] --PlaymakerのFSMが付いているほうにColliderをつけて,Is TriggerをON --Enterされるオブジェクト側にはCharacter Controllerが必要 **Playmakerからスクリプトに何か送る [#g1dae2fe] -変数送るのはまだ成功していない -java内のfunctionを叩くのは成功,以下メモ --scriptに動作項目を書く -例 このfunctionを実行するともう一方のキャラも停止(speed = 0)する function gameover(){ speed = 0; } --playmakerのsend messageのメッソド名にこの場合''gameover''を''手入力(コピペ)''する.gameobject指定してプルダウンメニューから出せそうだったけどうまくいかなかた --もちろんこのfunctionはupdate項目から外す **WebPlayerで出したときにレベル遷移が遅くてローディング画面を出したい [#ed9f5554] --ローディング画面はまだ出していませんが,%表示でできる --最初の画面にGUI Textを作成し,それにアサインする --読み込みたいシーン名を””内に入れる(レベル番号ではだめだった) --参照元忘れました,たぶんUnityのHelp --全スクリプト(Java) var percentageLoaded : float = 0; function Update() { if(Application.GetStreamProgressForLevel("読み込みたいシーン名") == 1) { guiText.text = "ゲームの準備完了!!"; } else { percentageLoaded = Application.GetStreamProgressForLevel("読み込みたいシーン名") * 100; guiText.text = percentageLoaded.ToString() + "%読み込みました"; } } **iOSスタンダード版でムービーを見せる [#z01ea6f5] --ムービーテクスチャはPro版でないと使えない.ということで外部アプリで動画を見せます --これでYoutubeアプリが開いてYoutubeの動画が再生されます/iOS6+ipadmini動作確認済み/後は動画見た後元のアプリに戻ってくれるのを祈るばかり,, --全スクリプト(java script) #pragma strict function Start () { } function Update () { } function OnGUI () { // make gui button and play movie if (GUI.Button (Rect (20,80,120,60), "Play Movie")) { Application.OpenURL("http://youtu.be/J3NyptGJzLo"); } } **StandardAssetsのJoystickでMecanimを使う [#w5e206cb] --JoystickのCameraRelativeのreplace hereの所にキャラクタの fbxを入れる --よく分かっていませんがこれで動いています(java script 全文,,,のはず) #pragma strict public var characterController : CharacterController; var anim: Animator; //ん?この変数使ってないと思う static var Speed : float = 0.0; function Start () { anim = GetComponent(Animator); } function OnAnimatorMove() { //characterControllerの移動速度を検出してoverallContorllerにfloatで入れる var overallSpeed : float = characterController.velocity.magnitude; //MecanimからSpeedでoverallSpeedの値を呼び出せるようにする/必ず必要 anim.SetFloat("Speed",overallSpeed); } --これでMecanimから呼び出せるので設定すればIdle,walk,Runを切り替えられます/しかしこんなに簡単だったとは,,,MotionBuilder並に使いやすい機能ですね **Softimageのリグ付きで読み込んだエンベロープをMecanimで使用する [#b85562a4] --手の所が赤でNG出るので,指を選択して,指のボーンをすべて設定しなおるだけ --これでAssetStoreのRawMocapData(無料)のアニメーションをアサインしてもしっかり動きます(指のアニメーションはないですが,Softimageで言ういわゆるRelaxの状態になるようです) **Skinned Clothの設定とかメモ [#y5484fe1] --日本語訳見ても分からんので少しずつ --エンベロープかけたキャラクタ作成 --この際,スカート(SkinnedClothかけたいとこ)はマージしていいのか、キャラクタ内の別オブジェクトがいいのか不明(でも別だとエンベロープできないかな?)明日実験 --ポリゴンオブジェクトで SkinnedClothを設定。上位階層のオブジェクトでもなぜか設定できてしまうが、動きがおかしくなったりする。必ず下位階層のポリゴン本体にアサインする。 --細かい設定は研究中。いまんとこわりと軽い。 **SoftimageのモデルをUnityでKinectにラップするボーンの組み合わせ [#yff786fe] ++SIのBipedRigをFBXで出力(CrossWalk)する ++キャラクタにkinectModelController.csをアサインして、ヒエラルキーにkinectPrefabをドロップし、kinectModelController.csのSWにアサインします。プロジェクト側からアサインするとエラー出る ++キャラクタにボーンのリストが下図のように出るので、下図のように各ボーンをアサインする(ただし腰のあたり怪しい) -&ref(./si-kinect.jpg,50%);(クリックで拡大します) **Unityでランキング(ネットワークでサーバに記録) [#z0cf3cc9] --[[これを参照>http://wiki.unity3d.com/index.php?title=Server_Side_Highscores]] ---PHPはPDOの方がしっくり動いた(特にdisplay.php) ---リンク先のsqlクエリ,PHPは所定の場所をサーバに合わせて変更すれば動くが,JavaScript - HSController.jsはこのままでは動かないので(CSは未検証)以下に変更した(全文コピペして入れ替えで) private var secretKey:String="00000"; // Edit this value and make sure it's the same as the one stored on the server var addScoreUrl="your server post.php?"; //be sure to add a ? to your url var highscoreUrl="your server/display.php"; var attatch:GameObject; function Start() { getScores(); } static function Md5Sum(strToEncrypt: String) { var encoding = System.Text.UTF8Encoding(); var bytes = encoding.GetBytes(strToEncrypt); // encrypt bytes var md5 = System.Security.Cryptography.MD5CryptoServiceProvider(); var hashBytes:byte[] = md5.ComputeHash(bytes); // Convert the encrypted bytes back to a string (base 16) var hashString = ""; for (var i = 0; i < hashBytes.Length; i++) { hashString += System.Convert.ToString(hashBytes[i], 16).PadLeft(2, "0"[0]); } return hashString.PadLeft(32, "0"[0]); } function postScore(name:String, score:int) { //This connects to a server side php script that will add the name and score to a MySQL DB. // Supply it with a string representing the players name and the players score. var hash=Md5Sum(name + score + secretKey); var highscore_url = addScoreUrl + "name=" + WWW.EscapeURL(name) + "&score=" + score + "&hash=" + hash; // Post the URL to the site and create a download object to get the result. var hs_post = WWW(highscore_url); yield hs_post; // Wait until the download is done if(hs_post.error) { print("There was an error posting the high score: " + hs_post.error); } } // Get the scores from the MySQL DB to display in a GUIText. function getScores() { attatch.guiText.text = "Loading Scores"; var hs_get = WWW(highscoreUrl); yield hs_get; if(hs_get.error) { print("There was an error getting the high score: " + hs_get.error); } else { attatch.guiText.text = hs_get.text; // this is a GUIText that will display the scores in game. } } **配列を分離 [#t0f165ed] --上のサーバ側に置いたハイスコアと名前は,wwwで取得すると,[名前]タブ[スコア]改行 となる.これを1つのストリングに入れて,名前とタブで区切って配列に入れるスクリプト rawData:String;//www.textを使ってrawDataに文字列をWEBから取得 myArray:String[];//配列を作成 myArray = rawData.Split(["\n","\t"], 1);//改行=\n,タブ=\tで分割 **文字列を分割して配列に収納(Java) [#m8476e65] sample = rawData.Replace("\t" , ",");//タブをカンマに変更 sample = rawData.Split("\n"[0]);//改行コードで分割 **文字列操作 [#v14765eb] sample = mystring.Substring(0, 3);//最初の3文字を取得 **オブジェクトを使ってマウスアップのようなこと [#wdb88816] -コリジョンでなくトリガーを使う -[[参考サイト>http://code.google.com/p/vga-unity/wiki/GP10UnityCourse08]] **Animetoコントロール [#t0450e5a] function SetJump(value: boolean) { Jump = value; animator.SetBool("Jump", value); } **MecanimAnim [#sfa1901a] #pragma strict var animator3 : Animator; function SetJump(value: boolean) { Jump = value; animator3.SetBool("jump", value); } **Mecanim2 [#t81012b3] #pragma strict public var characterController : CharacterController; var anim: Animator; function Start () { anim = GetComponent(Animator); } function FixedUpdate () { if(Input.GetButtonDown("Jump")) { anim.SetBool("Jump", true); } else { anim.SetBool("Jump", false); } } **get z position to debug log [#z38c318b] #pragma strict var test:float; function Start () { } function Update () { test = this.transform.position.z; Debug.Log (test); } **Get XYZ pos [#xf780674] #pragma strict var test:float; var test2:float; var test3:float; function Start () { } function Update () { test = this.transform.position.x; test2 = this.transform.position.y; test3 = this.transform.position.z; Debug.Log (test + ","+ test2 + "," + test3); } ---- [[トップに戻る>FrontPage]]