ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

「お使いのパソコンの性能が低下しています」的な広告表示を消した(多分)

概要

以前の記事の方法でも消えなかったアドウェア。それが解消したっぽいので追記。

症状

勝手にブラウザが立ち上がって、「最新のJavaにUpdateできます」とか表示され、絶対僕の知ってるJavaじゃない何かをインストールさせようとする怖いサイトが表示される。しかも2窓。

解決方法

「AdwCleaner」というアドウェア削除のフリーソフトを使用した。そもそもなぜ勝手にアドウェアがインストールされたかというと、信頼のできないリンクからソフトウェアやツールをダウンロードしてインストールした際に、アドウェアも追加でインストールされたことが原因だと思われる。信頼できそうなサイト以外からはソフトウェア等をダウンロードしないことが肝要。具体的にはVectorとか窓の杜とか。よって、このサイトからも「AdwCleaner」のダウンロード先リンクを貼らないことにする。その理由は、「AdwCleaner」が安全なソフトウェアか絶対的な確信が持てないことと、自己責任で使ってほしいこと、安全なダウンロード先を自身で探して見つけてほしい等の理由からである。ちなみに私はVectorからダウンロードしました。
使い方なども自己責任でお願いします。多分レジストリとかもいじってるはずなので、怖くて適当なこと書けないです。

「お使いのパソコンの性能が低下しています」的な広告表示を消したい(願望)

参考サイト


コンピュータから Conduit ツールバーと search.conduit.com を削除する

本題

勝手にブラウザが立ち上がって、変なソフトウェアをダウンロードさせようとする。
Yontooとは違う別の何か。

原因は不明

症状の原因の特定はできないが、どうやら「Conduit Search」ってのも悪質なアドウェアらしい。
参考サイトに則ってアンインストールした。経過を待つ。

アップデートしてUnityが起動しなくなったときの対処法

参考サイト


Unity - Unity Japan Official Blog – Windows版 Unityでよくあるトラブルと対処方法

本題

Unityをアプデしたら起動しなくなった。その対処法。

環境

Windows8.1
・Unity4.5.5f1

対処法

まあ、参考サイトまんまなのだが、どうやらショートカットから立ち上げたほうが起動率が上がるらしい。で、Unity.exeのショートカットを作成する。私の場合、場所は「C:/Program Files(x86)/Unity/Editor」下にあった。
右クリックでショートカットの作成。
作成したショートカットを右クリック>プロパティで、「ショートカット」タブの「リンク先」に「-force-d3d11」を付け加えるだけ。
f:id:takeg:20141102233434p:plain
こんな感じ。

以上。これで起動するようになるはず。

Unityのサーバクライアント通信

参考サイト

Unityで通信してみよう!
ほかにも参考にしたはずだが、覚えていない。

本題

Unityでマルチプレイ通信をしたかった。一番簡単かつ手軽そうな上記サイトを参考に構築した。

スクリプト「NetworkManager.cs」

using UnityEngine;
using System.Collections;

public class NetworkManager : MonoBehaviour {
	//ファイヤーウォールを無効化してテスト
	//ファイヤーウォールの接続を許可すること.
    public GameObject objectPrefab;
	public GameObject objectPrefab2;
    //string ip = "127.0.0.1";
	public string ip = "localhost";
	public string port = "5037";
    bool connected = false;

	//サーバ立ち上げ時に呼ばれるメソッド
	public void OnServerInitialized()
	{
		connected = true;
		//ネットワーク内のすべてのPCでインスタンス化が行われるメソッド
		Network.Instantiate(objectPrefab, objectPrefab.transform.position, objectPrefab.transform.rotation, 1);
	}

	//サーバに接続したときに呼ばれるメソッド
    public void OnConnectedToServer()
    {
   		connected = true;
		Network.Instantiate(objectPrefab2, objectPrefab2.transform.position, objectPrefab2.transform.rotation, 2);
    }
		
    public void OnGUI()
    {
        if(!connected)
        {
			//
			GUI.Label (new Rect (40, 250, 100, 30), "HOST IP");
			Rect rect1 = new Rect(100, 250, 250, 30);
			ip = GUI.TextField(rect1, ip, 32);

            if( GUI.Button( new Rect( 10, 10, 90, 90), "Client"))
            {    
				//(hostのIPアドレス,hostが接続を受け入れているポート番号)
                Network.Connect(ip, int.Parse(port) ); 
            }
            if( GUI.Button( new Rect(10, 110, 90, 90), "Server"))
            {    
				//(接続可能人数,接続を受け入れるポート番号,NATのパンチスルー機能の設定)
                Network.InitializeServer(10, int.Parse(port), false);
			}
        }
    }

    void Start () {}
    void Update () {}
}

正直書いた記憶がない。絶対どこかのコピペしたと思うんですけど。

サンプル実装

1.空のオブジェクトを作成し、それに上記のスクリプトを張り付ける。名前を「NetworkManager」とする。

f:id:takeg:20141102053440p:plain
こんな感じ。「Object Prefab」の欄はまだ気にしない。

2.適当にオブジェクトを作成する。それに「Network View」コンポーネントをつける。「Add Component>Miscellaneous>Network View」でできる。

f:id:takeg:20141102054617p:plain
赤いカプセル「Player1」と緑色のカプセル「Player2」を作成。
f:id:takeg:20141102054832p:plain
「Player1」はこんな感じ。「Network View」コンポーネントをつける。もちろん「Player2」にもつける。
「Player1」と「Player2」はプレファブにし、Hierarchyビュー上から消しておく。
この際、各Positionの値はカメラに映るように設定しておくこと。

3.「Network Manager」の「Object Prefab」に「Player1」を設定する。

上記の1節のような設定にする。
「Object Prefab」には「Player1」を、「Object Prefab2」には「Player2」を設定する。

4.ビルドして実行する。

名前は「test.exe」とでもして、実行する。
f:id:takeg:20141102055902p:plain
実行すると、このような画面になる(真ん中の白いオブジェクトは便宜上作成した)。

さて、ここから実際に通信できているのか確かめるのだが、1つのPC上で確認するため、IPアドレスlocalhostのままで実行する。
あとたぶんいろいろ警告が出たりすると思われるが、自己責任の上、実行してください。

5.「Server」を押す。

f:id:takeg:20141102060117p:plain
赤いカプセル「Player1」が生成されたのがわかる。スクリプトでいう「OnServerInitialized()」が実行され、「Player1」がインスタンス化されたからである。

6.もう一度実行ファイルを実行する。

今実行している画面は消さずに、もう一度「test.exe」を実行する。

7.今度は「Client」を押す。

たぶん何も変化がないと思われるが、立ち上げている2つの画面を交互にクリックしていくと緑のカプセル「Player2」も生成されるはず。これは一つのPC上で立ち上げていることが原因らしい。
f:id:takeg:20141102061312p:plain
こんな感じになったら成功。
両方の画面で緑の「Player2」が作成されていれば、両画面で通信ができている証拠。

注意点

うまくいかない場合は、ファイアウォールが通信を妨げているか、ポートの設定がうまくいっていない可能性がある。ファイアウォールは一時的に止めておくと良いかも。あと上記スクリプトではポート番号5037となっているが、各人で接続可能なポート番号は異なるので注意。

空きポート番号の調べ方

コマンドスクリプトを立ち上げ、「netstat -an」を実行。状態LISTENINGが待ち受け状態で、そのローカルアドレスを調べればよい。たとえば「127.0.0.1:5037」は「(ローカルアドレス):(ポート番号)」で、5037が待ち受け状態のポート番号。
とか書いたけど、正直よくわからないのでググってください。

IPアドレスの調べ方

コマンドプロンプトで「ipconfig」を実行。IPv4アドレスがそれ。

UnityにおけるSEの鳴らし方

本題

スペースキーを押すとSEが鳴るようなスクリプトの実装。

準備

1.Create_Emptyから、空のオブジェクト「Sounds」を作成。
2.「se_01.mp3」という名前の音源ファイルを用意(mp3,wavでも良い)。そのファイルをProjectビューにドラッグアンドドロップするとインポートされる。
3.インポートした「se_01.mp3」をHierarcyビューにドラッグアンドドロップ。AudioSourceコンポーネントを持つインスタンスが作成される(Audio Clipにse_01.mp3がセットされてあることを確認する)。名前を「SE_01」とする。
4.Hierarchyビューの「SE_01」を「Sounds」にドラッグアンドドロップする。構造としては「Sounds/SE_01」となるようにする。

スクリプト

using UnityEngine;
using System.Collections;

public class SoundTest : MonoBehaviour {
	private AudioSource se;
	private GameObject soundObj;

	void Start () {
		soundObj = GameObject.Find("/Sounds/SE_01");
		se = soundObj.GetComponent<AudioSource>();
	}

	void Update () {
		if(Input.GetKeyDown(KeyCode.Space)){
			se.Play();
		}
	}
}

このスクリプトをHierarchyビューの「Sounds」に貼っつける。

説明

soundObj = GameObject.Find("/Sounds/SE_01");
se = soundObj.GetComponent<AudioSource>();

Hierarchyから「Sounds/SE_01」というパスで「SE_01」オブジェクトを探し出し、そのオブジェクトを変数soundObjに代入する。
soundObjのコンポーネントAudioSourceを、変数seに代入する。AudioSourceのAudioClipにはなにか音源(mp3,wav等)をつけておくこと。

if(Input.GetKeyDown(KeyCode.Space)){
	se.Play();
}

スペースキーを押すと、SE_01に設定したSE(se_01.mp3)が鳴る。

SEを重ねて鳴らしたい場合

se.Play();

の部分を、

se.PlayOneShot(se.clip);

に変更するとよい。

注意

デフォルトでは、SE_01は3D Soundに設定されているので、「Audio Listener」がSE_01に遠ければ遠いほど音が小さくなる(デフォルトでは、Main CameraにAudio Listenerが付いている)。

undefined method `configure' エラーの対処法

本題

Ruby On Rails チュートリアルを進めていてタイトルのエラーが出た。
具体的には以下のエラー。

NoMethodError: undefined method `configure' for #<DemoApp::Application:0x007ffd9ae37430>
/Users/admin/rails_projects/demo_app/config/environments/development.rb:1:in `<top (required)>'
/Users/admin/rails_projects/demo_app/config/environment.rb:5:in `<top (required)>'

メソッドがないよ」っていうエラーみたい。2行目をみると、ディレクトリ"config/environment/"下のdeveropment.rbというファイルの一行目と、"config/"下のenvironment.rbの5行目がダメみたい。
とりあえずdeveropment.rbの一行目を見てみる。

Rails.application.configure do

これがいけないみたいなので、次のように修正。

DemoApp::Application.configure do

これでエラーは消えた。environment.rbは全く触っていないけど、エラーが消えたので良しとする。

git remote addのやり直し

間違えてgit remote addしてしまったときのやり直し方。

git remote add origin http://github.com/hogehoge/FOO_app.git

こんな感じでリモートに新しくリポジトリを作成した。しかしやっぱりやめたい。
普通にrmコマンドが使えるので、削除してから作り直す。

git remote rm origin http://github.com/hogehoge/FOO_app.git

これで新しく作り直せるようになった。

git remote add origin http://github.com/hogehoge/BOO_app.git
git remote push -u origin master