VRの基礎。

ダンウロード VR Samples  

新規プロジェクトにAdd

Assets->VRSampleScenes->Scenes->MainMenuを開き

MainCameraをコピーして、自分新規のシーンに貼り付け。

(新規のシーンのカメラを削除して)

今から本題に入ります。

VRで要はカメラはそのまま人間の目になること。

では先ほどコピーしたのは人間の目です。28CDD855-021B-4A26-A397-090833B226B4

MainCameraに cameraControl というスクリプトを作る

下のコードを貼り付け(テストのため)

[SerializeField] private GameObject m_Camera;

void Update ()
{
float x = 2 * Input.GetAxis(“Mouse X”);
float y = -2 * Input.GetAxis(“Mouse Y”);
m_Camera.transform.Rotate(y, x, 0);
float z = m_Camera.transform.eulerAngles.z;
m_Camera.transform.Rotate(0, 0, -z);
}

cubeの3Dオブジェクトを作る、

cubeに VRInteractiveItem を追加する、

(VR インタラクティブ アイテム)

cubeに cube のスクリプトを作る。

 

using VRStandardAssets.Utils;
using UnityEngine.UI;

[SerializeField] private VRInteractiveItem vrinteractiveitem_;

private void OnEnable()
{

}
private void OnDisable()
{

}

UE4でのサウンドの活用

※音を出すか、イヤホン推奨

どんなゲームでも必ずサウンドが入っています
人によってはゲームのサウンドが良いからという理由でゲームを購入する人も少なくありません
3Dのゲームにはより重要な要素で、音の方向や聞こえる範囲などでゲームから伝わる
臨場感は違ってきます

UE4には様々なサウンドに関しての機能が備わっています
今回はサウンドに関しての機能についての基本的な使い方や
テクニックのいる使い方などをちょっとだけ解説していきたいと思います

基本的な扱い方

レベル上に配置するだけで音が自動的に流れ始めます

図1

また、サウンドの再生するタイミングを決めたい場合は
サウンドを選択すると右側の「Detalis」の中に
「AutoActive」という項目があるので
チェックを外すと自動で再生されなくなります

図2

再生したいブループリント上(今回はレベルブループリント)で
レベル上にあるサウンドの名前を入力すると
「Create a Reference to ○○○(サウンドの名前)」が出てきます

図3

選択をすると次の画像のようなノードが出てくるので
再生したい場合はその下の画像の様に「PlaySound」ノードを使うと再生できます

図4
図5

キャラクターの足音

サウンドはBGMだけではなくSEなどの効果音もあります
今回はキャラクターに足音を付けていきたいと思います

ブループリントを編集する前に下準備をします
左上にある「Edit」を押して「Project Settings…」という項目を選択します
下のような画面が出てくるので左側にある一覧の中から「Physics」という項目を選択します
右側を下にスクロールしていくと「Physics SurfaceType」という項目が出てきます
今回はSurfaceTypeの1,2,3をそれぞれ「Grass」、「Sand」、「Concrete」に設定します

図23

Content Browserで「SoundAttenuation」と「SoundCue」を作っておきます

次にSoundCueを編集していきます
右側のPaletteから「Switch」と「Wave Player」を3つ作成します
それぞれのノードを画像の様に接続します
「Switch」のParameterNameを「SurfaceType」にしておきます
「Wave Player」には設定したい足音を入れておきます
最後に「Out put」のAttenuation Settingsに先ほど作った「SoundAttenuation」を設定しておきます

図16

足音を追加するために、「Content Browser」から「ThirdPersonRun」と「ThirdPersonCharacter」と「ThirdPerson_AnimBP」を開きます

まずは足音を鳴らすタイミングを取得するために「ThirdPersonRun」を編集します

「Notifies」という項目の下にあるTimeLineを右クリックします
「New Notify」という項目があるので選択をすると、TimeLine上にある様な
「FootSound」と同じようなものが出てきます

図7

ここで、「Play Sound」を選択してSEを再生することも可能ですが
今回は地面によって音を変えたいので今回は「New Notify」を
選択します

次は「ThirdPersonCharacter」を編集をします
先にViewportで必要なものを用意しておきます
左上にあるAdd Componentから「Static Mesh」を作成します
今回は足元から音を出したいので「Static Mesh」を足元に移動させます
名前をわかりやすいように「FootSoundPoint」と名付けておきます

図8

次にEventGraphでブループリントを作ります

まずはCustomEventを名前をわかりやすいように「FootSound」で作ります

キャラクターの足元の情報がほしいので「LineTraceByChannel」ノードを作ります
そして、「TryGetPawnOwner」ノードを作り、そこから「GetActorLocation」で位置を取得します
Startにはそのままの値を入れますが、EndにはZ軸を-100をして値を入れます

さらに地面の詳細な情報がほしいのでOut Hitから「Break Hit Result」ノードを作ります
「Break Hit Result」の一覧の中からPhys Matから「Surface Type」という変数を取得します
さらにそこから「Select」というノードを作っておきます

「Branch」から「SpawnSoundAttached」を作成しSoundには先ほど作った「FootSoundCue」を入れます
Attach to Componentには先ほど作った「FootSoundPoint」ノードをつなげます
最後に「SetIntegerParameter」でTargetは「SpawnSoundAttched」のReturn Valueを、
In NameにはSurfaceTypeを、in intには先ほどの「Select」のReturn Valueをつなげます
ThirdPersonCharacterは以上です

図22

最後に、先ほど「ThirdPersonRun」で作った「FootSound」を「ThirdPerson_AnimBP」でイベントとして作ります

図17

最後にマップ上の設定を行いたいと思います

まず、Content Browserで「Physics Material」を3つ作ります
それぞれの名前を「GrassPhysicsMaterial」、「SandPhysicsMaterial」、「ConcretePhysicsMaterial」にします

「Project Settings…」で設定したSurfaceTypeを対応したものに設定します

図20

マップ上に3つ「Cube」を設置し、Detailsの中にある「Collision」の「Phys Material Override」にSurfaceTypeに対応したものを設定します

図21

これでキャラクターに様々な種類の足音がつけれるようになりました

【輪講】UE4ネットワーク

こんにちは。
今回はUE4のネットワークについて書いていきたいと思います。

まずUE4でネットワークゲームを作る際、最低限知っておかなければいけない4点を詳しく書いていきます。

・サーバー/クライアント
・レプリケーション
・アクターの所有権
・PRC(リモートプロシージャコール)

上記4点の仕組みをしっかりと理解すればUE4で簡単なネットワークゲームを作れると思います。

まずは、サーバーとクライアントについての説明です。

UE4のネットワークはクライアント・サーバーモデルを採用しています。
ただし、UE4はエンジンがクライアント、サーバー両方をこなせる仕組みを持っています。

最初からエンジンコアの部分でネットワークに対応する設計になっているので、
シングルプレイヤーのゲームをマルチプレイヤーにするのもすごく簡単になっています。

これはプログラマーとしていいのか分かりませんが、
C++のコードを書かなくてもブループリントのみでマルチプレイヤーのゲームが作れるようになっています。

サーバーについての説明をします。
ネットワークにおける最高権限を持ち、ゲームプレイフローを管理します。
クライアントはサーバーにログインしてから、あらゆる情報に従う必要があります。

ListenサーバーモードとDedicatedサーバーモードがあります。
どちらを使用しても役割自体はかわりません。

【Listen = 聴く】
Listenサーバーモードはクライアントと同じようにゲームプレイを行う事が可能で
サーバー機能を有しつつもクライアントのように動作します。

利点は見た目にも動作がわかりやすく、テストプレイもしやすいです。
特に問題がなくさくっとマルチプレイゲームを作りたければListenサーバーモードを使いましょう。

【Dedicated = 専用】
Dedicatedサーバーモードはいわゆる完全なサーバー専用モードです。
クライアントのような画面はありません。
cmdのような真っ黒い画面上でも動作します。

最低限のリソースで動作し、クライアントを処理するのにフルスペックで動作するので、
比較的大規模なネットワークのマルチプレイヤー向けのモードです。
MMORPGとかを作るのであればこちらを使用するのがいいんじゃないでしょうか。

クライアントについて。
サーバーにログインして、各々の見た目の部分を担当します。
ゲームロジックの処理はサーバー側にお任せです。

ただし、自分がコントロールするPlayerControllerの情報を随時サーバー側へと送信してあげる必要があります。

これをしないとサーバーとそれぞれのクライアント上で自分の情報が反映されなくなってしまいます。

エディタ上ではどちらのサーバーを使うのか、何人でやるのか設定する事が出来ます。

%e7%84%a1%e9%a1%8c1

1でプレイ人数(人数分ウィンドウが出ます。)
2でどちらのサーバーを使用するのか設定します。(チェックなしの場合Listenサーバー。)

設定を終えてからプレイボタンを押すと、

%e7%84%a1%e9%a1%8c2

このように自分が設定した人数分のウィンドウが出ます。
(上の画像はListenサーバー、人数は二人で設定してあります。)

ウィンドウの枠の部分にこのウィンドウはサーバーなのかクライアントなのかが画像の赤く囲ってある部分に表示されます。

次にレプリケーションについてです。
レプリケーションとは何!?って方が大半だと思いますのでレプリケーションの説明からしていきます。

【レプリケート = 複製】

レプリケーションとは『複製する』という意味です。

レプリケーションするものは基本的にアクターと変数です。
ではなぜアクターと変数をレプリケーションする必要があるのかを説明します。

1vs1の対戦ゲームがあると仮定します。
AさんがBさんを攻撃をした場合、必ずBさん側の画面のAさんも攻撃を行っていなければHPなどに差異が生じてしまいます。

ここでレプリケーションを使用します。
キャラクター(アクター)をサーバーにスポーンさせ、アクターのレプリケーションをすることによって、
アクターの情報が各クライアント間で差異が生じないように同期するようになります。

これをネットワークレプリケーションと呼び、UE4では何をレプリケートするかを選択する事が可能です。

レプリケーションはサーバーのみが行う事が出来ます。
クライアントはサーバーに対してレプリケーションして欲しい情報を送信する必要があります。

つまりサーバーとクライアントか判断してロジックを変更して動かしてあげる必要があるのです。

続いて所有権についてです。
サーバーで所有しているのかクライアントで所有しているのかによってブループリントの書き方が変わってきます。

例えばレプリケートしなければいけないものはサーバーが所有権を持つ必要がありますし、
クライアントだけ実行すればいいものはクライアントが所有権を持っておく感じです。

クライアント上のアクターはレプリケートされませんので、
ロジックやダイナミクスを含むアクターは基本的にサーバーでスポーンしておくといいでしょう。

最後にPRC(リモートプロシージャコール)の説明です。
RPCとはネットワークの先にある環境で関数やイベントを実行する事です。

UE4では標準で3つの呼び出し方法が存在します。

ブループリントではカスタムイベント(関数みたいなもん)を作成して使用します。

a

デフォルトでは『Not Replicated(複製なし)』になっているので、状況に応じて設定しましょう。

3つの呼び出し方法をそれぞれ解説していきます。

【MultiCast】
multicast
呼び出しをサーバーで行うと全てのクライアントで処理が実行されます。
最も一般的なRPCイベントです。(Server to Client)

クライアント側で呼び出しても、クライアント内でしか処理されません。

【Run on Server】
runonserver
呼び出しをクライアントで行うとサーバー上で実行されます。
ただし、アクターの所有権が必要となります。(Client to Server)

サーバー上で呼び出しても、クライアント上へレプリケートしません。

【Run on Owning Client】
runonowningclient
サーバーから呼び出した場合に、
アクター所有権のあるクライアント上でのみ実行される特殊なRPCイベントです。

クライアントで呼び出しても、クライアント内でしか処理されません。

これら3つの使い分けですが、
【MultiCast】はサーバーから全てのクライアントで同期する際に一番頻繁に使用します。

【Run on Server】はクライアントからサーバー上へ何かしら情報を通知したい場合に使用します。
変数値を同期させる場合にも使用するので非常に重要です。

サーバー上で変数値を反映させれば自動的にレプリケートされます。

【Run on Owning Client】は最も特殊で、アクター所有権を自分で管理しておく必要があります。
つまり、サーバーはそのアクターを誰が所有しているのかを理解しておく必要があります。

特定クライアントに対してのみのRPCイベントを行う際にはこの仕組みを使用します。
また、サーバーがアクター所有権を持っている場合もあり、その場合には名前に反してサーバー上で実行されます。

この3つ(特にMultiCastとRun on Serevr)を使わないとまずネットワークのゲームが作れません。
ですので、しっかりとそれぞれの役割や動きを理解しましょう。

今回は時間の都合上セッションの作成/検索/参加/破棄について説明出来ませんでしたが、
UE4にはオンラインサブシステムと呼ばれる非常に便利なものがありますので、もし作る方がいたら自分で調べてみて下さい。

以上4点をしっかりと理解すれば誰でも簡単にマルチプレイヤーゲームを作る事が出来るので興味がある方はぜひ作ってみて下さい!

虎参備忘録~輪講編-003~

今回の輪講は留学生との共同プロジェクトで、UE4を使って実装したFlockingのAIについて紹介します。

このサイトを参考にAIを組んだので、今回はこのサイトを使って、プロジェクトを見せながら話て行きたいと思います。

 

サイト内にも書かれていますが、先にざっくりとFlockingについて説明しておくと、「分離」「整列」「結合」の3行動からなる操舵力をあわせて、群れのような動きを再現するアルゴリズムです。

 

「分離」は、そのオブジェクトの持つ領域内にいるほかのオブジェクトから離れる操舵力を作ります。

「分離」の力が強いほど、オブジェクト同士の距離は離され、バラバラに動きます。

 

「整列」は、そのオブジェクトの持つ領域内にいるほかのオブジェクト達と同じ方向、同じ速度になるような操舵力をつくります。

「整列」の力が強いほど、イワシの群れのようなある程度まとまった集団を作りやすくなります。

 

「結合」は、そのオブジェクトの持つ領域内にいるほかのオブジェクト達の中心に向かう操舵力を作ります。

「結合」の力が強いほど、集団の密度が増します。

 

さて、簡単に説明したところで、プロジェクトを見せながら解説したいと思います。

 

 

最後に、Flockingはパラメータの調整によって大きく見栄えが変わります。

パラメータをうまく調整できれば様々な群の動きも表現出来るでしょう。

大元のプロジェクトはサイトにあるので一度自分でいじってみるとより理解が深まると思います。

開発備忘録【外伝 輪講編】第一弾


                 ≪ 目次 ≫          ≪ 次のPart ≫


おはこんばんちわ。大原です。
外伝ということで輪講で使った資料の投稿になります。
今回は、『UE4でCSVデータを扱う方法』について書いていきます。
続きを読む

cocos2d-xで見つけた新機能 Part2

おはこんばんちは!

GT2の組長こと鈴木翔也です!!

今日は前回の続きでcocos2d-xの新機能を紹介していきたいと思います。

今回紹介するのはこちら!!

SpriteBachNode!!

これはみんなが知らず知らずにやっているやってはあまり良くないことは解消することができます!!

なに? 良くないことって? と思うかもしれませんがそちらを紹介していきましょう!!

では今回はUnityちゃんを5人表示してみましょう!

まずfor文で5回回してSpriteを生成すると

こんな感じかな?

スクリーンショット 2016-08-02 14.04.14

結果

スクリーンショット 2016-08-02 14.04.35

こらーーーーーーーーーーーーーーーー よくない処理をやってるぞ!!

何かわかるか? そうSpriteでテクスチャを読み込むとファイルの中身までしっかり読み込みに行くんやぞ!! 重くなるやろうが!!

ということでした! んじゃどうすればいいのって思うかもしれませんがこれを解消してくれるのがSpriteBachNodeです!!

SpriteBachNodeとはファイルの中身の絵の情報をテクスチャにし、記憶しておくためのクラスです。

使い方は簡単!!

絵の情報を読み込んでSprite生成次に教えてやるだけ!! な! 簡単だろ!

使い方はこんな感じ

スクリーンショット 2016-08-02 14.28.59

見た目は変わらないがシューティングなど同じ敵をたくさん作るときはこれを使って描画スピードを上げたほうがいいと思う!!

cocos2d-xで見つけた新機能 Part1

おはこんばんちは!

GT2の組長こと鈴木翔也です!!

最近見つけたcocosd2d-xの機能を紹介していきたいと思います。

私が最近見つけた機能はこちら

globalZoder SpriteBatchNode

です!!

2回にわたってこの機能を紹介していきたいと思います。

まずはglobaZoderです。

ゲームプログラミングをしたことある人はZoderというものを聞いたことがあるかもしれませんがこれはそれの拡張版だと思ってください。

cocos2d-xの親ノードに依存するものでこのZoderは親ノードに依存しないものとなっております。

例えですが親ノードが二つあり、それぞれにZoderに0と1の値を入れておきます。

スクリーンショット 2016-08-02 13.23.21

ここにSpriteの子供を二つ追加します

そしてZoder 0の親にもう一つのSpriteより前に描画されるようにZoderに大きな値を入れます
スクリーンショット 2016-08-02 13.34.29

結果

スクリーンショット 2016-08-02 13.34.42

Unityちゃんが前に出るようにするためにZoderを大きくしたにもかかわらずHelloWoeldが前に描画されました。

このことから親のZoderに依存し、Unityちゃんの親のZoderよりHelloWorldの親のZoderが大きいため先に描画されたのがわかります。

さてここからが本題でglobalZoderとはこのいぞんとは関係なく描画してくれるというものとなります。

このglobalZoderは負、0、正の3つで構成されています。

これはあまりZoderとかわりありません。

このglobalZoderは何も設定していなければ0になります。

描画順は 負⇨0⇨正となっております。 これもあまりZoderと変わりません。

ではこのglobalZoderを使ってUnityちゃんを前に描画してみたいと思います。

UnityちゃんのglobalZoderを1にして

スクリーンショット 2016-08-02 13.48.25

いざ実行!!

スクリーンショット 2016-08-02 13.48.56

Unityちゃんが前に描画されました!! やった!!

このようにglobalZoderは親に依存せずZoderを決められるというものでした!

まとめ
親に依存しないため親のせいで前に描画、もしくは後ろにびょうがされているものを前に持ってくることができます。

しかししっかり管理しないと前で描画したいものも一緒に後ろにやってしまうことがあるので注意が必要です。

C++でJsonを使うための物の紹介

今日はC++でJsonを使ってみたいと思います。
実はcocos2d-xには標準でJsonを読み込むものがあるのですが今日はDirectXでも使えるpicojsonというものを紹介していきたいと思います。

まずJsonがなんなのかわからない人は先輩の過去の投稿をご覧ください。

http://www.trident-game.com/blog/2015/10/14/【輪講】jsonの書き方/#comment-3

まずpicojsonとはKazuhoという人がJsonを読み込むために書いたクラスです。
C++でJsonを使うならこれを使う人が多いらしい。

githubリンク:https://github.com/kazuho/picojson

使い方として解凍したフォルダーの中にあるpicojson.hを追加するだけ!

使い方はいたって簡単でjsonファイルをfstreamで読み込んでpicojsonに入れるだけです。

C++でがりがり書く人はこれを使っている人が多いので一度使ってみるといいと思います。

【輪講】SourceTreeの使い方

こんにちは。SourceTreeをインストールの仕方と簡単に操作の仕方を書いとこうと思います。

まずSourceTreeって?

バージョン管理ツールのひとつ。

Gitだとコマンド(黒い画面)で操作しないといけないけど「コマンド操作嫌い!見たくないよ!」という人、いいのありますよ。SourceTreeならGitがコマンドじゃなくてGUIで直感的に操作できるよ。

SourceTreeを使うメリット

  • グラフィカルでわかりやすい操作画面(コマンド使わなくてもできる)
  • Windows/Macで使えるのでプロジェクト内でツールが統一できる
  • 日本語対応している
  • Gitに対応している

ということでダウンロード・インストールをしよう。

↓このサイトに行けばダウンロードできるよ。

https://ja.atlassian.com/software/sourcetree

あとは、指示に従って進めていけばインストール完了だよ。途中でAtlassianのアカウント登録する ある人はログインしてね。Githubやbitbucketのアカウントの登録は一応スキップもできるよ。

操作の説明をする前にバージョン管理で使われる基本的な用語について。

バージョン管理で使われる基本的な用語

  • リポジトリ ... バージョン管理対象のファイル群を保管するサーバー上の枠のこと

続きを読む

VPSを契約してサーバを構築する環境を整えよう

・契約するVPSサーバを決めよう

サーバ仮想化の種類を確認

KVM
今現在のVPSで主流のLinuxカーネル仮想化基盤
とりあえずKVMのVPSを選んでおけばいいと思う
OpenVZ
一時期格安VPSで人気だったサーバ仮想化ソフト
ディストリビューションの最新版への対応が遅い。
Hyper-V
Microsoftが提供するWindowsサーバ向け仮想化システム

代表的なKVMのVPSサーバ

さくらのVPS
さくらVPS
サポートが手厚い

お名前.com VPS
お名前VPS
有名なVPS中では比較的安い料金
初期費用無料キャンペーンを常にやっている印象

代表的なOpenVZのVPSサーバ

ServerMans@VPS
ServerMans@VPS
初期費用が無料で、料金が安い
 
 

・利用するOSを決めよう

日本語での検索人気度の推移(2016/07/29日現在)

日本語圏トレンド

日本語ではcentOSのほうが検索されています。

英語での検索人気度の推移(2016/07/29日現在)

英語圏トレンド

英語圏ではUbuntuの圧勝です。

このデータを見れば、日本ではcentOS,英語圏ではUbuntuをサーバに利用する人が多い事がわかります。

利用者の多さ=公開されている情報の多さ
と考えると、centOSは日本語の情報、Ubuntuは英語の情報が多い事になります。

なので、日本語しか読めない人は、まずはCentOSから。
英語も読めるという方は、Ubuntuで初めてみる事をオススメします!
 
 

・SSHのセキュリティ設定(CentOS)

Rootアカウントでのリモートログインを禁止する

後からrootログインを禁止させるので、まず最初にsudoコマンドを利用できるユーザを作成しましょう

# useradd [ユーザ名]
# passwd [ユーザ名]

でユーザを作成します。

# usermod -G wheel [ユーザ名]

でsudoグループに作成ユーザを追加します。

~/usr/local/sbin/visudoのファイルの以下の部分を編集し、wheelユーザのみをsudo可能にします

#%wheel ALL=(ALL)   ALL
 ↓ 変更
%wheel ALL=(ALL)   ALL

~/etc/ssh/sshd_configのファイルの以下の部分を編集し、Rootでのリモートログインを禁止します

PermitRootLogin yes
 ↓ 変更
PermitRootLogin no

以下のコマンドを実行し、sshdを再起動します

# service sshd restart ← CentOS 5,6
# systemctl restart sshd ← CentOS 7

これでRootアカウントでのリモートログインが出来なくなりました。
今後は最初に作成したアカウントでログインして下さい。

リモート接続のポートをデフォルトの22番から変更する

sshのポートをデフォルトの22番のままにしておくとアタックされるので、
~/etc/ssh/sshd_configのファイルの以下の部分を編集し、接続ポートを変更します

Port 22
 ↓ 変更
Port ○○ ← ○○は1024以上の数字を入れる

Well-Knownポートを避ける為に1024番以降のポートを利用します。

sshdを再起動します

# service sshd restart ← CentOS 5,6
# systemctl restart sshd ← CentOS 7

これでssh接続ポートが変更されたので、アタックの数が減ると思います。

設定したポートでリモートアクセス出来るように、ファイアウォールでssh接続用ポートを解放します

[CentOS 7]
以下のコマンドでポートを解放します

# firewall-cmd –add-port=○○/tcp –zone=public –permanent ← ○○は先程変更した接続ポートの番号です

今まで利用していた22番ポートを塞ぐには以下のコマンドを実行します

# firewall-cmd –remove-service=ssh –zone=public –permanent

設定の再読み込みをして変更を反映させます

# firewall-cmd –reload

以下のコマンドで設定を確認し、servicesの行からsshが削除されていて、portsの行に変更した接続ポートの番号が表示されていれば、設定が成功しています

# firewall-cmd –list-all

[CentOS 5,6]
以下のコマンドでポートを解放します

# iptables -A INPUT -p tcp -m tcp –dport ○○ -j ACCEPT ← ○○は先程変更した接続ポートの番号

今まで利用していた22番ポートを塞ぐには以下のコマンドを実行します

# iptables -A INPUT -p tcp -m tcp –dport 22 -j DROP

変更を設定ファイルに保存します

# service iptables save

以下のコマンドで設定ファイルに変更が保存されているか確認します

# cat /etc/sysconfig/iptables

先程の2つのコマンドからiptablesを抜いた文字列が見つかれば、無事に変更が保存されています。

ファイアウォールを再起動します

# service iptables restart

以上でファイアウォールでのsshポート変更の設定は終了です!

 
その他にもログイン方式をパスワードから公開鍵認証に変更することなどで、より安全性を高めることができます。

手軽な料金のVPSを利用して、色々触って遊んでみましょう!

 
参考にさせていただいたサイト
UbuntuとCentOSどっちがいいの?正しいサーバOSの選び方 – lamichの日記 – 海外でイラスト制作を行う社長のブログ
VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定 | dogmap.jp