2013年10月07日

2013年の秋...

 unity3Dを勉強していたのですが、何か疲れちゃって、さぼってました。

 違うソフトで自動車レースゲームを作ってました。

cggame.jpg

 そうこうするうちに秋が...。
 3Dのシューティングゲームを作りたいなぁ、と思って始めたunity3Dでしたが、私には無理のようです。(無理なのは最初から分かっていたのですが、挑戦してみたかったのです)
 でも、少しずつ「また、何かに挑戦したいなぁ」という意欲が湧いてきたように感じます。
 ま、焦らず、まったりとできたらいいなぁ、と思っています。
posted by Shindo Izo at 21:16| Comment(0) | 日記 | 更新情報をチェックする

2013年10月11日

簡単な自動車運転シミュレーターに挑戦1

 Unity3D…私には何だか難しく、無理かなぁ、と思います。でも、何か作りたいふらふら
 そこで、ネットで検索したら、こういうのがありました。



 Unity:Getting Started by Creating a Quick Game ということなので、超弩級ウルトラ初心者向けゲーム製作なのでしょう。
 これなら何とかなりそうなので、上記ビデオを見ながら簡単なドライブゲーム作成に挑戦したいと思います。

<舞台の配置>
 車が走る地面とビルの配置です。地面の大きさは、500×1×500にしました。ビルは適当に拡大して配置しました。

1Jimen.jpg

<自動車の作成>
 基本の形を組み合わせました。

2mycar.jpg

 色(Material)は適当です。
 つづく...
------------------
posted by Shindo Izo at 14:35| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月13日

簡単な自動車運転シミュレーターに挑戦2

 前回の続きです。

<自動車の作成2>
 1.ヘッドライトを二つ追加
 2.メインカメラを車の真後ろに持って行く
 3.それらをMy Carファルだの中に入れる。
 4.車の操作用スクリプトを書き、My Carにドロップ
1mycarraito.jpg

<スクリプトの内容>

var forwardSpeed : float = 30;
var turnSpeed : float = 2;

function Update () {
 var forwardMoveAmount = Input.GetAxis("Vertical")*forwardSpeed;
 var turnAmount = Input.GetAxis("Horizontal")*turnSpeed;
 
 transform.Rotate(0,turnAmount,0);
 
 transform.Rotate(0,turnAmount,0);
 
 rigidbody.AddRelativeForce(0,0,forwardMoveAmount);
 
}

<Rigidbodyを追加>
 My CarにRigidbodyを追加後、下図のように数値などを変更
2rigidbodymycarhe.jpg

<走らせてみると...>

3mycardrivingsa.jpg

 ビルを避けながら、走り回ることができました。ドリフト走行ができるのには驚き(ただテールが滑っているだけですが)。カウンターを当てることもできます。
 ただ、このままの設定だとメチャ運転をしても転びません。

<今後の発展...>
 「簡単な自動車運転シミュレーター」、これで終了です。
 最後に、自動車運転シミュレーターとしてもう少し面白く発展するとすればどんなことができるか考えてみました。

1.地形を作る
 山や草原、町並みなどを作ると雰囲気が良くなりそうです。道路を作るのもいいかもしれません。
2.車体をもう少しリアルにする
 今のものは、とりあえず作ったものなので、CGソフトなどでもう少し作り込んだものを使用すると楽しそうです
3.その他
 エンジン音、スピードメーター、ブレーキなどを装備するとますます面白くなりそうです。(その分とてつもなく難しくなりそうですが...がく〜(落胆した顔)
------------------
posted by Shindo Izo at 13:19| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月15日

簡単な自動車運転シミュレーターに挑戦U 1

 前回で、超初心者向けの「簡単な自動車運転シミュレーター」は終わりました。でも、何かもの足りません。自動車の挙動が少し変です。
 そこで、再び検索してみましたらこういうのがありました。

http://youtu.be/HLERWBhJBsM

 なるほど、こういう風に作ればいいのか...、と思いました。この動画はとってもいいんですが、いかんせん画質が荒く細かいところが分かりにくく、何度か繰り返して見る必要がありました。
 以下、その備忘録として記事にしておきたいと思います。

<新規プロジェクト作成>
 新規プロジェクト作成するときに、以下のパッケージを読み込んでおきます。
 Scripts.unityPackage
 Skyboxes.unityPackage
 Terrain Assets.unityPackage

<地形を作る>
1terraintukuru.jpg

<地形のテクスチャーを貼る>
 好きなものを貼ればいいと思います。
2terraindane.jpg

<車のボディを作る>
 Cubeを変形して、Rigidbodyを付加します。
3cardesune.jpg

<タイヤを作成します>
 ここは大変重要です。空のオブジェクトを作ってそれにホイールコライダーを付加します。
4wheelcol.jpg

<タイヤを4本設置する>
 WheelをCarにドロップ後、複製し前後左右に配置します。
5wheelcopy.jpg

 こんな便利なコライダーがあったんですね。
 ここまでで合っているのか心配ですが、今日はここまでにしておきます。
 つづく... 
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
posted by Shindo Izo at 18:43| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月16日

簡単な自動車運転シミュレーターに挑戦U 2

 前回の続きです。

<カーコントロール用のスクリプト作成&付加>
 JavaScriptを作成し、それをCarにドロップ。Car選択後、インスペクター内の変数に読み込みます。(右の丸点マークをクリックして選択)
1scritptpoine.jpg

<スクリプトの内容>

var WheelFR : WheelCollider;
var WheelFL : WheelCollider;
var WheelRR : WheelCollider;
var WheelRL : WheelCollider;

var Speed = 10;
var Breaking = 20;
var Turning = 20;

function Update () {
 WheelRR.motorTorque = Input.GetAxis("Vertical")*Speed;
 WheelRL.motorTorque = Input.GetAxis("Vertical")*Speed;
 
 WheelRL.brakeTorque = 0;
 WheelRR.brakeTorque = 0;
 
 WheelFL.steerAngle = Input.GetAxis("Horizontal")*Turning;
 WheelFR.steerAngle = Input.GetAxis("Horizontal")*Turning;
 
 if (Input.GetKey(KeyCode.Space)) {
  WheelRL.brakeTorque = Breaking;
  WheelRR.brakeTorque = Breaking;
  }
}

<カメラが車を追随するようにする>
 最初に読み込んでおいた、SmoothFollowスクリプトをMain Cameraにドロップ。CarをTargetにドロップ。
2smoothfollowcamera.jpg

<試運転>
 さて、うまく動きますように…。
 動きました! でも、ハンドルを切るとすぐにゴロンと転がってしまいます。そこで、少し、Carの数値を変えてみました。

 Drag 0.5
 Angular Drag 0.5
 Speed 15
 Breaking 25
 Turning 30

 大分スムーズに運転できるようになりました。でも、急ハンドルを切るとぶっ倒れます。当然ですが。
 下図は運転中のワンショットですが、ただ箱が斜めに静止しているだけに見えますね(笑)。
 動きは確かにリアルになりました。
3untennchuudesse.jpg

 ここで、ビデオは終わっています。一番最後の何だかいっぱいしゃべっているのは、多分ボディをどっかから持ってきて、Mesh Rendererをオフにすればいい、というようなことだと思います。英語が聞き取れないので、間違っているかも知れません。
 
 これで「簡単な自動車運転シミュレーターに挑戦U」はおしまいです。
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
posted by Shindo Izo at 21:55| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月17日

マイ自動車運転シミュレーターに挑戦1

 前回完成した(?)「簡単な自動車運転シミュレーターに挑戦U」を改造(改悪?)して、自分流のドライブシミュレーターを目指してみたいと思います。と言っても、見た目ぐらいしかいじれないんですが...。

<車のボディを用意する>
 以前CGソフト(Wings3D)で作った車をUnity3Dで使います。(Unityのアセットストアーから無料のモデルをインポートする手もあります)
 私の場合、3D Studio(.3ds)で書き出しました。
1wings3dcarexp.jpg

<モデルファイルをUnity3Dへ>
 モデリングファイルをProjectウィンドウにドロップ。さらに、それをCarにドロップします。
2dedropne.jpg

<位置、大きさを微調整>
 位置や大きさをなるべく正確に合わせました。その時、ワイヤーフレームモードにしておくと分かりやすいです。
3wirechuusinsoroe.jpg

 とりあえず、ただの箱からマイカーになりました。
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
posted by Shindo Izo at 15:19| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月18日

マイ自動車運転シミュレーターに挑戦2

 前回は、車のボディをくっつけました。今日は、道路を造りたいと思います。
 道路を造るのは大変なので、何かいいものはないかな、と探しましたら、アセットストアーにフリーの道路作成ツールがありましたので、それを使うことにします。
 フリーですのでほとんど機能制限されていますが、贅沢は言えませんね。道路は一種類しかありません。

<アセットストアーに行ってツールを検索>
 右上の検索欄に、「easyroads3d」と入力して表示させます。
1asseteasyroads.jpg

<インポートする>
 Importボタンを押すとダウンロードされます。
2easyroadsimportja.jpg

<EasyRoads3Dオブジェクトを作る>
 メニューのEasyRoads3Dをクリック、オブジェクトを作ります。
3easyroadsfoldasa.jpg

<ポイントを置いていく>
 Inspector欄の、+マークの付いたボタンをクリック。シフトキーを押しながら地形上をクリックし、適当にポイントを置いていき、最後に歯車のマークをクリック。
4pointplusja.jpg

<道幅と道路の開閉を選択>
 Road widthを好きな値にし、Closed Trackで道路を閉じるか開いたままにするか選択。(図は閉じるに選択)左の山のマークをクリックすると、Alertが表示されますがOKして閉じます。
 Alertの内容は「編集できません」という意味かと思いますがよく分かりません。
5pointcloseyo.jpg

<道路のレンダリング>
 Apply Splatmapのチェックを入れると、道路が出来上がっています。
6applysetting.jpg

<道路を試運転>
 さっそく車を走らせてみました。
7drivemyway.jpg

 以上は、試行錯誤でやったので、間違いがあるかも知れませんし、もっといい方法があるのかも知れません。
 また、色々なオプションがあるようですがイマイチよく分からずです、今のところ...。

 こういう道路を一から造ることを考えれば、ありがたいですね。直線はともかく、カーブはゾッとします。
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
posted by Shindo Izo at 14:51| Comment(1) | Unity3Dの練習 | 更新情報をチェックする

2013年10月20日

マイ自動車運転シミュレーターに挑戦3

 道路が造れるようになったので、地形をもうちょっと格好良くしたいと思います。
 地形の凹凸を作り、植物や石をおいてみました。これが以外と大変。

<地形俯瞰図>
0Mydrivezone.jpg

<試運転記念写真1>
1MYdrivesan.jpg

<試運転記念写真2>
2MYdrivesan.jpg

<試運転記念写真3>
3MYdrivesan.jpg

 それなりに気持ちよく走ることができました。
 ただ、スピードを出しすぎてカーブを曲がろうとすると、ひっくり返ってしまいます。これは実際の運転では当たり前のことなんですが...。ちゃんとカーブの前で減速してすぐにフルスロットルが正しい運転ですね。
 車の安定には一工夫しました。コライダーをシャコタン状態にすればかなり安定しました。
 競争してくれる車があるともっと面白くなるのでしょうが、当分無理です。さていつになることやら...。

 これにて、

 マイ自動車運転シミュレーターに挑戦

は終了にします。

 もし地形の操作をご存じない方は、過去に書いたブログ記事をご参照下されば幸いです。最初から順を追っていただければ分かると思います。
------------------
posted by Shindo Izo at 22:19| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月21日

アニメーションの基礎 Unity3D

 Unity3Dでのアニメーションのやり方を詳しく解説してくれている動画がありました。

http://youtu.be/KWC6Pw63BAY

 この動画を見れば一目瞭然ですが、自分の復習の意味で以下記事にしておきたいと思います。

<アニメーションの道具用意>
 PlaneとCubeを適当な位置に用意します。
1animejunbiyo.jpg

<アニメーションウィンドウを開く>
 Cube選択状態で、アニメーションウィンドウを開き、録画ボタンを押します。
2animewindowdasu.jpg

<適当にネーミング>
 セーブするように促されるので、適当に名前をつけ、任意の位置にセーブします。
3animnamingsa.jpg

<最初のキーフレームを決める>
 左のTransformをクリックし、0:00の位置でキーフレームボタンをクリックします。
4animpointichi.jpg

<2番目のキーフレームを決める>
 Cubeを好きな位置に移動し、メモリを好きな位置まで持って行き(図は、0:30)、キーフレームボタンをクリック。
5nextanimichi.jpg

<好きなだけキーフレームを増やす>
 上記と同じ操作を繰り返して、好きなだけキーフレームを作ります。
6sukinadakeichi.jpg

<各時間のそれぞれの位置表示>
 ここで、Fキーを押すと表示されます。この時点で各ポイントを編集することができます。最後に録画キーをクリックし、アニメーションモードから抜けます。
7keyfdezenbusa.jpg

<プレイしてみると...>
 図では分かりませんが、ちゃんとアニメーションしてます。この時点で、スクリプトをドロップする必要があるかも知れません。私の場合はその必要はありませんでした。
8animplaychuu.jpg

 これで、何とかアニメーションを作れるようになりましたわーい(嬉しい顔)
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
posted by Shindo Izo at 18:23| Comment(0) | Unityのお勉強 | 更新情報をチェックする

2013年10月23日

簡単なFPSゲームに挑戦1

 憧れのFPSゲームに挑戦してみたいなぁ、とネットを検索しましたら、

 http://youtu.be/5wxe1IUu5QA

というのがありました。これなら何とかなるかも知れません。でも、主人公がイモムシとは…ふらふら
 そこで、上の動画を参考にさせてもらって、自分なりに創作しながらトライしてみようと思い立ちました。
 途中であきらめることになるかも知れませんが、頑張ってみようと思います。

<新規プロジェクト作成>
 ScriptsとParticleパッケージを読み込んでおきました。

<ダサイ兵士を作る>
 バズーカ砲を抱えた兵士を作りました。Sphere,Capsule,Cylinderで引き延ばしたり回転したりして作りました。超ダサイです。もちろんアニメーションしません。
 FPSなのでボディとかはいらないんですが、作っておけばTPS(三人称視点)にいつでも変更できるのでそうしました。TPSでやりたい場合は、カメラを後ろに持って行き、Smooth Followスクリプト(StandardPackageの中にあります)をドロップすればOKです。
 それらをcapsule(Soldierとリネーム)の中に放り込み、MeshRenderのチェックを外しておきます。
 色はMaterialを作ってドロップ。バズーカ砲はBlack、顔と手はHadairo、帽子と軍服はGreenです。
 Soldiar選択状態で、メニュー>Componet>Phisics>Character Controller をクリック。
 で、ここがとっても重要なのですが、Soldierの中の部品はColliderを外しておかないとヘンテコな動きになってしまいます。(これにはほとほとまいりました。最初からギブアップかと思いました)外すとスムーズに動きました。
1heisidayo.jpg

<スクリプトをSoldierにドロップ>
 メインカメラを目線の位置に置き、Soldierにドロップ。スクリプトをドロップ。
2soldiergamendesu.jpg

<スクリプトの内容>
 これは、unityのサイト内のリファレンスをそのまんまコピーすればOKです。
 四角で囲んだ中のプログラムです。

 たったこれだけでも、主人公が動いたことは喜びですわーい(嬉しい顔)るんるん
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
ラベル:FPS Unity3d
posted by Shindo Izo at 20:22| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月24日

簡単なFPSゲームに挑戦2

 続きです。

<弾丸を作る>
 Sphereで弾丸を作りバズーカ砲の前に置く。Prefab追加(Danganとリネーム)。SphereをPrefabにドロップ。Sphereは消去。
1prefabdangan.jpg

<弾丸の生成点を作る>
 Sphereを弾丸生成点に置く(spawnPointとリネーム)。Sphere ColliderとMesh Rendererのチェックを外す。
2spawnpointtukuru.jpg

<スクリプトの変更>
 前回作ったスクリプトの内容を変更します。

var speed : float = 3.0;
var rotateSpeed : float = 3.0;
var bulletPrefab : Transform;

function Update () {
 var controller : CharacterController = GetComponent(CharacterController);

 // Rotate around y - axis
 transform.Rotate(0, Input.GetAxis ("Horizontal") * rotateSpeed, 0);

 // Move forward / backward
 var forward : Vector3 = transform.TransformDirection(Vector3.forward);
 var curSpeed : float = speed * Input.GetAxis ("Vertical");
 controller.SimpleMove(forward * curSpeed);

 //Dangan Hassha
 if(Input.GetButtonDown("Jump")) {
  var bullet = Instantiate(bulletPrefab, GameObject.Find("spawnPoint").transform.position, Quaternion.identity);
  bullet.rigidbody.AddForce(transform.forward*2000);
 }

}
@script RequireComponent(CharacterController)

<Dangan PrefabをBullet Prefabにドロップ>
3danganbullet.jpg

<Dangan PrefabにRigidbodyを追加>
 Dangan(弾丸)は少し大きめの方がいいようです。マテリアルはFire Smokeってのにしてみました。
4rigiddangan.jpg

<初撃ち>
 仮の壁を作って、それに撃ってみました。バズーカ砲がマシンガンのようになってます(笑)。
5jitudanhassha.jpg

 弾を撃ちながらそこら中をうろつくことができるようになりました。
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
ラベル:Unity3d FPS
posted by Shindo Izo at 22:05| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月25日

簡単なFPSゲームに挑戦3

 続きです。
 今日は、ステージを作り、弾丸を消去するプログラムをくっつけます。

<ステージ作り>
 地面を広くして、壁を四方に、端に階段つきの台を置きました。すべてCubeで作ってます。
1stagekazari.jpg

<階段を上れるようにする>
 上の状態だと階段を上ることができません。Character ControllerのSlope Limitの数値を上げると上ることができるようになりました。
 Soldierを選択後、数値をいじります。私の場合、75でいいような感じでした。
2slopekakudosa.jpg

<弾丸を消す>
 前の状態だと撃った弾がいつまでも残っているので、それを消去するJavaScriptを作り、Danganにドロップしました。
3dangankesiscr.jpg

<台に向かって無駄撃ち>
 弾が1秒後に消えています。
4kaidansisha.jpg

 たったこれだけのステージでも、グンと雰囲気が出ました。
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
ラベル:FPS Unity3d
posted by Shindo Izo at 17:18| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月26日

簡単なFPSゲームに挑戦4

 続きです。
 今日は、敵を作ります。

<敵砲台作り>
 Capsule,Sylinderで大砲(機関銃?)を作りました。入れ子にするときに台座を中に入れないようにすると上だけ動き回るようになります。そして、上の部分にスクリプトをドロップしました。
1Taihoudesu.jpg

<スクリプトの内容>

var LookAtTarget : Transform;

function Update () {
 transform.LookAt(LookAtTarget);
}

<敵砲台のクローン作り>
 Project WindowでPrefabを作成。既存のEnemyをそれにドロップ。出来上がったPrefabをScene Windowにドロップ。
2enemyclone.jpg

<気づいたこと>
 これら一連の作業で、大変重要なことがありました。それはローカル座標とワールド座標、および何処を中心に持ってくるかによって結果がおかしくなっていくということです。
 敵砲台を作っていくときに、最初適当に作っていたらヘンテコな動きになってしまいました。
 重要な点は:

 1.オブジェクトを原点で操作する
 2.Z軸方向を前とする
 3.ローカル座標で操作し完成させる。
 4.出来上がったらワールド座標で目標地点に置く


だと思いました。

 敵が出てきて、雰囲気が出てきました。
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
ラベル:FPS Unity3d
posted by Shindo Izo at 14:45| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月27日

簡単なFPSゲームに挑戦5

 続きです。
 今日は、敵が弾を撃ってくるようにします。

<敵の弾発射地点を作る>
 プレイヤーの弾を作ったときと同じような要領で、空のGameObjectを大砲の前に設置。TaihoHontaiの中に入れspawnPointとリネーム。
1enemyspawndesu.jpg

<スクリプトの作成>
1.プレイヤー追随スピードを鈍らせる
 前回のままだと追随があまりにも完璧にプレイヤーを捕らえるので(逃げられない)、やや遅れ気味にします。

2.敵の弾発射
 これも、ただ発射できるようにすると、速射砲のようになってしまうので、2秒に1回弾を撃ってくるようにします。

<スクリプトの内容>
 前回作ったTaiho Controllerスクリプトを以下のように変更します。

var LookAtTarget : Transform;
var tuizuiSpeed = 1.0;
var bulletPrefab : Transform;
var jikanHozon = 0;

function Update () {

  if(LookAtTarget){
   var kaiten = Quaternion.LookRotation ( LookAtTarget.position - transform.position);
   //↓追随を鈍らせる
   transform.rotation = Quaternion.Slerp( transform.rotation,kaiten, Time.deltaTime*tuizuiSpeed);
   //↓弾発射
   var byou : int = Time.time;
   var kisuugusuu = (byou % 2);
  
   if(kisuugusuu){
    Shoot(byou);
   }
  }
}

function Shoot(byou) {

 if  (byou > jikanHozon){
  var bullet = Instantiate(bulletPrefab,transform.Find("spawnPoint").transform.position,Quaternion.identity);
  bullet.rigidbody.AddForce(transform.forward*2000);
  jikanHozon = byou;
 }
}

<弾丸のセットとPrefabのドロップ>
 TaihoHontaiを選択し、DanganをBullet Prefabにドロップ。Enemyをもう一度Enemy prefabにドロップ。
2dangandropdesse.jpg

<敵との撃ち合い>
3utianininaru.jpg

 ああ、ややこし...。頭が混乱してきました。
 そろそろやばくなってきたなぁ...がく〜(落胆した顔)たらーっ(汗)
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
ラベル:FPS Unity3d
posted by Shindo Izo at 21:54| Comment(2) | Unity3Dの練習 | 更新情報をチェックする

2013年10月28日

簡単なFPSゲームに挑戦6

 続きです。
 今日は、プレイヤーがゲームエリアから落っこちた時に、指定の場所に戻すようにします。

<スクリプトの作成>
 落ちてきたプレイヤーを受け皿(Cube)で拾い、原点近くに戻すスクリプトを書く。以前作ったプレイヤーのコントロールスクリプト(SolController)を以下のように書き換える。

var speed : float = 3.0;
var rotateSpeed : float = 3.0;
var bulletPrefab : Transform;
private var dead = false;

function OnControllerColliderHit(hit : ControllerColliderHit){
 if ( hit.gameObject.tag == "fallout"){
  dead = true;
 }
}

function Update () {
 var controller : CharacterController = GetComponent(CharacterController);

 // Rotate around y - axis
 transform.Rotate(0, Input.GetAxis ("Horizontal") * rotateSpeed, 0);

 // Move forward / backward
 var forward : Vector3 = transform.TransformDirection(Vector3.forward);
 var curSpeed : float = speed * Input.GetAxis ("Vertical");
 controller.SimpleMove(forward * curSpeed);

 if(Input.GetButtonDown("Jump")) {
  var bullet = Instantiate(bulletPrefab,GameObject.Find("spawnPoint").transform.position,Quaternion.identity);
  bullet.rigidbody.AddForce(transform.forward*2000);
}

}

//プレイヤーを指定位置に復活させる
function LateUpdate(){
 if ( dead ){
  transform.position = Vector3 (0,4,0);
  //↓TPSの時は以下の文も使用(カメラ位置指定)
  //gameObject.Find ( "Main Camera").transform.position = Vector3( 0,4,-10);
  dead = false;
 }
}

@script RequireComponent(CharacterController)

<スクリプト自分用覚え書き>
private var … このスクリプト内だけで使う変数定義
OnControllerColliderHit … コントローラーがコライダーにぶつかったとき...
Tagの使用 … 論理関係づけ
transformposition = Vector3(x,y,z) … オブジェクトを指定座標に移動する

<プレイヤーの受け皿作成1>
 Cubeを拡大してプレイヤーの受け皿作成。falloutとリネーム。InspectorのTagボタンをクリック。Add Tag...を選択してTagManagerを開く。
1falloutcubesane.jpg

<プレイヤーの受け皿作成2>
 Tags選択。空いているElementにfalloutと入力。閉じる(Cubeを選択すると閉じられる)。
2fallouttagsa.jpg

<プレイヤーの受け皿作成3>
 Tagボタンを再び押して、falloutを選択。
3falloutsunda.jpg

 最後に、受け皿のレンダリングはチェックを外しておきます。(そのままでもいいんですが)

 壁を一部取り去り、早速落下してみましたら、ピッと元に戻りました。
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
ラベル:FPS Unity3d
posted by Shindo Izo at 19:07| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月29日

簡単なFPSゲームに挑戦7

 続きです。
 今日は、残り命の表示とプレイヤーがゲームエリアから落っこちた時に残り命を減らすようにします。

<命表示用の画像を3種用意>
 命が3つの場合、2つ、1つの場合の3枚用意する。私はAzPainter2で描きました。
1inochigazou.jpg

<GUI Textureで残り命数を表示する1>
 用意した画像をProjectにドロップ。Inochi3の画像を選択後、GUI Textureをクリックする。
2inochdrop.jpg

<GUI Textureで残り命数を表示する2>
 名前をGUI_Inochiにする(何でもOK)。表示する位置を指定。InochiControllスクリプトを作成し、GUI_Inochiにドロップ。それぞれの画像を各変数にドロップ。
3guiichissettei.jpg
<スクリプトの内容>

var inochi1 : Texture2D;
var inochi2 : Texture2D;
var inochi3 : Texture2D;

static var INOCHI = 3;

function Update () {
  switch( INOCHI ) {
    case 3:
      guiTexture.texture = inochi3;
    break;
    
    case 2:
      guiTexture.texture = inochi2;
    break;
    
    case 1:
      guiTexture.texture = inochi1;
    break;
    
    case 0:
      //ゲームオーバー(未設定)
    break;
   }

}

<命の数を減らす>
 プレイヤーコントロールスクリプト(SolController)を開いて、一行挿入する。↓緑の部分。

function OnControllerColliderHit(hit : ControllerColliderHit){
 if ( hit.gameObject.tag == "fallout"){
  dead = true;
  InochiControll.INOCHI -= 1; //命数を減らす
 }
}

 落下する度に命数が減っていくようになりました。
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
ラベル:FPS Unity3d
posted by Shindo Izo at 14:59| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月30日

簡単なFPSゲームに挑戦8

 続きです。
 今日は、敵弾がプレイヤーに当たったとき、少し回転するようにします。

<スクリプト追加1>
 SolController.js(プレイヤーコントローラ)へ変数定義の追加(緑文字部分)

var speed : float = 3.0;
var rotateSpeed : float = 3.0;

var bulletPrefab : Transform;

private var dead = false;

var kaitenSpeed = 800;
var decreaseTime = 0.1;
var decayTime = 10;
static var gotHit = false;
private var backup = [kaitenSpeed, decreaseTime, decayTime];

<スクリプト追加2>
 SolController.js内function LateUpdate()への追加(緑文字部分)

function LateUpdate(){
  //ゲームエリア外に落ちた時の処理 
 if ( dead ){
  transform.position = Vector3 (0,4,0);
  //↓TPSの時は以下の文も使用
  //gameObject.Find ( "Main Camera").transform.position = Vector3( 0,4,-10);
  dead = false;
 }

 //敵の弾が当たった時の処理 
 if(gotHit) {
   if( kaitenSpeed < 1){
     //リセット
     kaitenSpeed = backup[0];
     decreaseTime = backup[1];
     decayTime = backup[2];
     gotHit = false;
   }
   else{
     
     //撃たれて回転する
     transform.Rotate(0,kaitenSpeed * Time.deltaTime,0, Space.World);
     kaitenSpeed = kaitenSpeed - decreaseTime;
     decreaseTime += decayTime;
     
   }
 }
}

@script RequireComponent(CharacterController)

<スクリプト追加3>
 TaihoController(敵砲コントローラ)内、function Shoot(byou)への追加。(緑文字部分)

function Shoot(byou) {

 if  (byou > jikanHozon){
  var bullet = Instantiate(bulletPrefab, transform.Find("spawnPoint").transform.position, Quaternion.identity);
  bullet.gameObject.tag = "tekidan";
  bullet.rigidbody.AddForce(transform.forward * 2000);
  jikanHozon = byou;
 }
}
 
<タグエレメント追加>
 Edit>Project Settings>Tagsをクリック。Inspector内Tagsボタンクリック。tekidanを追加
1tekidantag.jpg

 被弾したときに回転するはずなのですが、時々しか回転しません(移動している時だけ)。当たり判定がおかしいのですが、色々探してみましたが原因がよく分かりません。

 しょうがないので、とりあえずこのまま先に進んでみます。
 そろそろくじけるかも知れませんが...。ちょっと私には難度が高すぎたようです。がく〜(落胆した顔)たらーっ(汗)

 <後の追記:上記問題解決しました。次回のブログで...>
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
ラベル:FPS Unity3d
posted by Shindo Izo at 17:45| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

簡単なFPSゲームに挑戦9

 前回、敵弾が当たっても回転したり、しなかったりして、まいりましたバッド(下向き矢印)
 以下、修正です。

<スクリプトの削除、変更、追加>
 SolController.js(プレイヤーコントローラ)の削除、変更、追加(緑文字部分)。

//function OnControllerColliderHit(hit : ControllerColliderHit){ ★この行は削除
function OnTriggerEnter(hit : Collider){ //追加★1
  if ( hit.gameObject.tag == "fallout"){
    dead = true;
    InochiControll.INOCHI -= 1;  
  }

  if(hit.gameObject.tag == "tekidan"){
    gotHit = true;

    Destroy(hit.gameObject); //敵弾消去 追加★2
  }
}

function Update () {
 var controller : CharacterController = GetComponent(CharacterController);

 // Rotate around y - axis
 transform.Rotate(0, Input.GetAxis ("Horizontal") * rotateSpeed, 0);

 // Move forward / backward
 var forward : Vector3 = transform.TransformDirection(Vector3.forward);
 var curSpeed : float = speed * Input.GetAxis ("Vertical");
 controller.SimpleMove(forward * curSpeed);

 if(Input.GetButtonDown("Jump")) {

  var bullet = Instantiate(bulletPrefab, transform.Find("spawnPoint").transform.position, Quaternion.identity); //gameObject.Findからtransform.Findに変更★3
  bullet.rigidbody.AddForce( transform.forward * 2000);
}

}

<Is Triggerのスイッチを入れる>
 Dangan選択後、Is Triggerのチェックを入れる。
1dangantriggerpoti.jpg

 fallout選択後、Is Triggerのチェックを入れる。
2fallouttriggerpoti.jpg

 何とか、敵弾が当たると必ず回転するようになりました。ホッわーい(嬉しい顔)たらーっ(汗)
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
ラベル:FPS Unity3d
posted by Shindo Izo at 21:25| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

2013年10月31日

簡単なFPSゲームに挑戦10

 簡単な…、のはずが段々難しくなってきて、アップアップ状態です。
 今日は、息抜きで、マップの練習です。

<マップを用意する>
 下のようなマップを用意します。(自分で作るか、フリーのマップを探すしかありません)
0Kabe.jpg

<マテリアルを設定する>
 Project windowでMaterialを作成。適当にリネーム。用意しておいたマップをProject windowにドロップ。そのマップをInspectorのマップウィンドウにドロップ。タイリングの数を調整。出来上がったマテリアルを目的のオブジェクトにドロップすると、壁が岩のようになりました。
1kabematdukuri.jpg

<バンプマップ作成>
 マップを複製(Ctrl+D)。Inspector内、Texture Type をNomal mapにする。バンプの深さを調整。Applyボタンを押す。
2kabebumpdesu.jpg

<バンプマッピングの追加>
 マテリアルを選択。Inspector内、ShaderをBumped Diffuseに変更。上で作ったマップをNormalmapウィンドウにドロップ。タイリング数調整。(これで、多分合っていると思うのですが...)
3kabebumppurasu.jpg

<記念撮影>
 プレイしてました。
4matkansatu.jpg

 床にも同じマップを貼ったんですが、凸凹がありすぎて変ですね。でも、雰囲気は少しだけアップしました。
 マテリアルは塗り絵みたいで楽しいですかわいい
------------------
 <ご注意>私自身が全くの超初心者ですので、文中まちがいがあるかも知れません。その際はご容赦をお願いします。<(_ _)>
ラベル:FPS Unity3d
posted by Shindo Izo at 14:56| Comment(0) | Unity3Dの練習 | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。