Unityのメモ2 相変わらず手探りでUnityで遊んでます

iPhone出力の際のフォントサイズを変更したい

  • いろいろ調べたけど埋め込み可能なフリーのフォントを利用して,フォントのビットマップを作るっぽい
    • 埋め込み可能な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のモーションスピードを変更したい

  • iTweenのエクステンションを10$で買うとサンプルプログラムがある

MAC OSXでノーマルマップ

Unity4がインストール後起動しない(Macのみの問題か不明)MacOSX10.7.7,Unity4.1.0

  • Unity4をインストール後,tx_id is invalidなどと出て起動できない件
    unity4.jpg
    • 原因ーおそらくライセンスサーバに接続できない
    • 対策ーネットワークを切ってUnityを起動、Manual Activationの画面が出るのでそれを続行する

(eng)Unity 4 , not start on Mac OSX

  • Unity4 not start on Mac OSX, after install.
  • error message is "tx_id is invalid".
    unity4.jpg
    1. Close error message, Unity will quit.
    2. Disconnect all network connection. including LAN, turn off Wifi,,,
    3. Launch Unity4, Manual Activation and activation url window will open.(window A)
    4. Click Manual Activation, save License request file.
    5. Open Activation URL.(find in winodw A)
    6. Upload request file.
    7. Login with unity Account.(or create new account)
    8. You can download license file.
    9. save it.
    10. Back to window A, Load license file.
    11. Unity will start, If freeze Unity Re launch unity4.

PlayMaker?のTrigger Eventが動かない

  • PlaymakerのFSMが付いているほうにColliderをつけて,Is TriggerをON
  • Enterされるオブジェクト側にはCharacter Controllerが必要

Playmakerからスクリプトに何か送る

  • 変数送るのはまだ成功していない
  • java内のfunctionを叩くのは成功,以下メモ
    • scriptに動作項目を書く
  • 例 このfunctionを実行するともう一方のキャラも停止(speed = 0)する function gameover(){ speed = 0; }
    • playmakerのsend messageのメッソド名にこの場合gameover手入力(コピペ)する.gameobject指定してプルダウンメニューから出せそうだったけどうまくいかなかた --もちろんこのfunctionはupdate項目から外す

WebPlayer?で出したときにレベル遷移が遅くてローディング画面を出したい

  • ローディング画面はまだ出していませんが,%表示でできる
  • 最初の画面に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スタンダード版でムービーを見せる

  • ムービーテクスチャは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を使う

  • 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で使用する

  • 手の所が赤でNG出るので,指を選択して,指のボーンをすべて設定しなおるだけ
  • これでAssetStore?RawMocapData?(無料)のアニメーションをアサインしてもしっかり動きます(指のアニメーションはないですが,Softimageで言ういわゆるRelaxの状態になるようです)

Skinned Clothの設定とかメモ

  • 日本語訳見ても分からんので少しずつ
  • エンベロープかけたキャラクタ作成
  • この際,スカート(SkinnedCloth?かけたいとこ)はマージしていいのか、キャラクタ内の別オブジェクトがいいのか不明(でも別だとエンベロープできないかな?)明日実験
  • ポリゴンオブジェクトで SkinnedCloth?を設定。上位階層のオブジェクトでもなぜか設定できてしまうが、動きがおかしくなったりする。必ず下位階層のポリゴン本体にアサインする。
  • 細かい設定は研究中。いまんとこわりと軽い。

SoftimageのモデルをUnityでKinectにラップするボーンの組み合わせ

  1. SIのBipedRig?をFBXで出力(CrossWalk?)する
  2. キャラクタにkinectModelController?.csをアサインして、ヒエラルキーにkinectPrefabをドロップし、kinectModelController?.csのSWにアサインします。プロジェクト側からアサインするとエラー出る
  3. キャラクタにボーンのリストが下図のように出るので、下図のように各ボーンをアサインする(ただし腰のあたり怪しい)
  • si-kinect.jpg(クリックで拡大します)

Unityでランキング(ネットワークでサーバに記録)

  • これを参照
    • 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.
         }
      }

配列を分離

  • 上のサーバ側に置いたハイスコアと名前は,wwwで取得すると,[名前]タブ[スコア]改行 となる.これを1つのストリングに入れて,名前とタブで区切って配列に入れるスクリプト
    rawData:String;//www.textを使ってrawDataに文字列をWEBから取得
    myArray:String[];//配列を作成
    myArray = rawData.Split(["\n","\t"], 1);//改行=\n,タブ=\tで分割

文字列を分割して配列に収納(Java)

sample = rawData.Replace("\t" , ",");//タブをカンマに変更
sample = rawData.Split("\n"[0]);//改行コードで分割

文字列操作

sample = mystring.Substring(0, 3);//最初の3文字を取得

オブジェクトを使ってマウスアップのようなこと

Animetoコントロール

function SetJump(value: boolean) {
Jump = value;
animator.SetBool("Jump", value);
}

MecanimAnim?

#pragma strict
var animator3 : Animator;
function SetJump(value: boolean) {
Jump = value;
animator3.SetBool("jump", value);
}

Mecanim2

#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

#pragma strict
var test:float;
function Start () {

}
function Update () {
test = this.transform.position.z;
Debug.Log (test);
}

Get XYZ pos

#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);
}

トップに戻る


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-06-05 (木) 20:04:53