Unity Tips


UnityのTipsまとめ(個人的な覚え書き)

  • 全てコピペして動作するように”全文”掲載しています.

プログラムもできないのにScript

  • プログラム描けないのにscriptしてるニャーのメモ
同じオブジェクトを繰り返し作成(クローン)するスクリプト
  • 種別はJava Scriptです.function Updateの{}の中に書くとフリーズ(無限ループで暴走)します
  • prefab(例えばcubeを配置してAsste>create>prefabでprefab化しておく)が必要
  • スクリプト作成してprojectに入れておき,new empty game objectをシーンに作成してそこにスクリプトをassignし,inspectorでtargetにクローン作成したいprefabを指定します
  • forの中の10はクローン作成数の上限.20にすると20個作成 1.1は作成位置のオフセット X(横)方向に1.1の場所からクローン作成.なので1.0のcubeのprefabだと隙間が0.1できます
    • ソース(一部じゃなく全文)
      //Start clone script
      var prefab : Transform;
      for (var i : int = 0;i < 10; i++) {
      Instantiate (prefab, Vector3(i * 1.1, 0, 0), Quaternion.identity);
      }
      //end clone script
      function Update () {
      }
    • 実行画面(prefab myboxをクローン化,色はライトの関係でグラデーションかかってみえます)

      clone.jpg

    • 参照元 http://unity3d.com/support/documentation/ScriptReference/Object.Instantiate.html
Unity if文の覚え書き
  • if文の基本
  • 種別 java script
    • 初期設定0の数値を9まで1ずつカウントアップ
      • ソース(一部じゃなく全文)
        var cubecount : int = 0;
        function Update () {
         if (cubecount < 9) {
         //your process
         
         //example process
           print(cubecount);
         // count up process
           cubecount = cubecount+ 1;
         }
         else {
         // your process
           print("end");
         }
         }
Unity GUIとライトの色変更
  • 種別 Java script
  • ライトの色をスライドバーでリアルタイムに変更する
    • スクリプトはライトオブジェクトにassignしてください
    • WEBで実際にプレイする
    • ソース(1スクリプトの全文)
      var hSliderValue : int = 0;
      var akairo : float = 0.0;
      
      function OnGUI () {
      hSliderValue = GUI.HorizontalSlider (Rect (25, 25, 100, 30), hSliderValue, 0, 255);
      akairo = hSliderValue / 256.0;
      // slider value display
      GUILayout.BeginArea (Rect (130,20,150,70));
      GUILayout.BeginVertical();
      GUILayout.Box("R(8bit=0-255): " + Mathf.Round(hSliderValue));
      GUILayout.EndVertical();
      GUILayout.EndArea();
      }
      
      function Update () {
      light.color = Color(akairo, 0.0, 0.0);
      }
動くテクスチャ
  • テクスチャのオフセット値をtimeでかけ算して表面を動かす
  • Java scriptです
    • script化して,事前にオブジェクトにアサインし,インスペクタでテクスチャを選択しておいてください
      • ソース(全文)
        //texture select
        var mytexture : Texture;
        //refresh rate set up
        var refreshtime : float = 0.1;
        
        function Update () {
        //texture render
        renderer.material.mainTexture = mytexture;
        //refresh rate * time 
        var xoffset : float = Time.time * refreshtime;
        //moveing texture use offset
        renderer.material.mainTextureOffset = Vector2 (xoffset, 0);
        renderer.material.mainTextureScale = Vector2 (0.5,0.5);
        }
      • 参照元http://unity3d.com/support/documentation/ScriptReference/Material-mainTexture.html
カメラの切り替え
  • 種別Java script
    • スクリプトを空のゲームオブジェクトに入れるだけ.事前にカメラをふたつ作っておき,インスペクタでターゲット(カメラ2つ)を設定する必要あり.
    • Mouse Lookで酔うのとGUIを操作するためにMouse Lookを切る必要があり,カメラを切り替えることで対応するために使用
    • このスクリプトは http://d.hatena.ne.jp/anchan828/20110118/1295316465 さんのスクリプトを元にほんの少し改造しています(ありがとうございます)
      • ソース(全文)
        var cameraA : GameObject;
        var cameraB : GameObject;
        cameraA.camera.enabled = true;
        cameraB.camera.enabled = false;
         function OnGUI () {
        // background box
        GUI.Box (Rect (Screen.width -110,10,100,90), "Cam Type");
        // first button
        if (GUI.Button (Rect (Screen.width -100,40,80,20), "RGB CAM")) {
        cameraA.camera.enabled = true;
        cameraB.camera.enabled = false;
          }
        
        // second button.
        if (GUI.Button (Rect (Screen.width -100,70,80,20), "Move CAM")) {
        cameraA.camera.enabled = false;
        cameraB.camera.enabled = true;
          }
        }
WEB上のテクスチャを入れ替える
  • 子ども向けのワークショッププログラムを作っていたのですが,PlaymakerのWWWobjectがフリー版では動作しない(先月は動作したんだが,,)のであわてて作成
  • Javascriptです(全文です)
  • Asset>Create>Javascriptで適当な名前の(グローバル変数は使ってないので)スクリプト作成し,ダブルクリック.MonoDvelopper?が開くので,最初っから描かれているプログラムを全部消して下記に全部入れ替えして保存.Unityに戻ってScriptをMaterial設定してあるオブジェクトにドラッグ&ドロップします.再生ボタンを押すとダウンロード待ちのためゲーム画面表示まで少し時間がかかりますが動作します.WEBPlayerでも動作しました.WEB Playerの場合は,最初テクスチャ無しの白いオブジェクトが出て,WEBからDL終わったらテクスチャが自動的に貼り付けられます.その後ボタンを押すと入れ替えられます.UVマッピングはマテリアルに入っているので,適正なテクスチャであれば,ぴったり入れ替えられます.
    • ソース(全文)
      #pragma strict
      //set texurl
      var texurl : String = "";
      
      //set texture variable 
      var yourtex : Texture;
      var yourtex2 : Texture;
      
      function Start () {
           // Start a download of the given URL
           texurl = "http://miauen.com/texture/1.png";
         var www : WWW = new WWW (texurl);
         //FIX URL example
         var www2 : WWW = new WWW("http://miauen.com/texture/2.png");
          // Wait for download to complete
        yield www;
        yield www2;
      
      yourtex = www.texture;
      yourtex2 = www2.texture;
          // assign texture
         renderer.material.mainTexture = yourtex;
      }
      
      function OnGUI () {
      	//GUI.Label (Rect (220, 25, 290, 30), texnumber);
      	//hSliderValue = GUI.HorizontalSlider (Rect (25, 25, 180, 30),  hSliderValue, 0, 90);
      	//texnumber = "" + hSliderValue;
      
      //Make a button , replace texture yourtex or yourtex2
      if (GUI.Button (Rect (20,40,90,20), "SET TEXTURE")) {
      if (renderer.material.mainTexture == yourtex) {
      renderer.material.mainTexture = yourtex2;
      		} else {
      			renderer.material.mainTexture = yourtex;
      }
      }
      
      }
      
      function Update () {
      }
  • 参考サイトhttp://d.hatena.ne.jp/nakamura001/20110725/1311622661
オブジェクトのスピード検出

CharactorController?をアサインしたGameObject?の移動速度を出します.Y軸の値はコメントアウトしています.(Javascript)

  • ソース(全文)
    #pragma strict
    
    static var horizontalSpeed : float = 0.0;
    
    
    function Start () {
    
    }
    
    function Update () {
        var controller : CharacterController = GetComponent(CharacterController);
        var horizontalVelocity : Vector3 = controller.velocity;
        horizontalVelocity = Vector3(controller.velocity.x, 0, controller.velocity.z);
        
        // The speed on the x-z plane ignoring any speed 
        horizontalSpeed = horizontalVelocity.magnitude;
        // The speed from gravity or jumping
        //var verticalSpeed : float = controller.velocity.y;
        // The overall speed
       // var overallSpeed : float = controller.velocity.magnitude;
       
       
      //print(horizontalSpeed);
      Debug.Log(horizontalSpeed);
    }
  • ソースhttp://docs.unity3d.com/Documentation/ScriptReference/CharacterController-velocity.html
1秒間にn個プレファブを作る?
Flashで見れるようにしたいので,TerrainをObjに変換したい
  • Flashで出力すると多くのパソコンでみられるー,あれTerrainがFlash出力対応してないっぽい,うんじゃobjに変換すっか
  • Aeestの中にEditotというフォルダを作成し,スクリプトはExportTerrain?にする.でないと動かない
  • Terrainを選択し,メニューバーのTerrainからこのスクリプトを実行
  • 出力されるので,読み込んで既存のと置き換え
  • なんか回転して出力されるっぽい,,,

戻る


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-03-10 (日) 21:57:05