ゲームツクール! 12回...
-
date post
13-Aug-2015 -
Category
Technology
-
view
141 -
download
2
Transcript of ゲームツクール! 12回...
ゲームツクール! 第12回 Unity5で使えるようになった機能をレビューしてみよう
2015/7/23 FAGStudio
おすすめのUnity本
「Unity5」をはじめて学ぶ人向けのUnity本。 Unityのエディターの見方から基本操作やキャラクター操作まで1冊で全て学べます。
NEW!
(復習)Unity4特徴について
Unity Freeに解放された機能 4.14 モバイル版への書き出し無償化 4.2 Navimesh 4.2 RealTime Shadow and more features・・
New System 4.0 Mecanim 4.3 2DSystem 4.6 uGUI
どんどんパワーアップ!!
Unity5の特徴について ・Unityの64bit対応 ・NVIDIA PhysX 3.3 (Rigidbodyなどで使われる物理エンジンの更新) ・NavMeshの更新 (Unity4からデータをアップデートした際にはNavMesh焼き直しが必須) ・ライティングシステムの更新 ・Mecanimシステムの更新
Unity4と比べてUnity5で追加されたこととは? ・「物理ベースシェーダ」や「Global illumination」などの新しい機能の追加。 ・ Unity4ではPro版でしか使えなかった機能を 無料版に全て解放。
今日は新しく使える機能をレビューしよう
物理ベースシェーダーとは?
物理ベースシェーダーとは、鉄やプラスチック、木材など現実世界にある「材質」に従って反射係数や色の設定を入れることでリアルな絵作りを実現するシェーダーのことです。
おすすめのアセット
物理ベースシェーダーの設定方法
物理ベースシェーダーマテリアルをオブジェクトに適応させるだけでオブジェクトが物理ベースシェーダーマテリアルに対応して十分美しくなります。
Global illumination
Global illumination(GI) は、拡散反射光を光学的・物理学的に正確に扱うレンダリング技法のことです。 非常に写実的、つまり物理的に正しい表現が可能になります。
Global illumination Unity4までは、オブジェクトのマテリアルの特徴がライトで反射してほかのオブジェクトに色の影響を与えることはありませんでした。 しかし、Unity5からは現実世界のようにオブジェクト同士のマテリアルの特徴がライトに反射してほかのオブジェクトのマテリアルに影響を与えます。
GIの使い方について
Scene Viewを「Irradiance」に設定します。
Floorの黄色がSphereに反射しているのがわかります。
Sphereの赤が反射しているのがわかります。
Staticでないオブジェクトは? (例えば動くキャラクターとか)
Reflection Probe
Reflection Probe
Reflection Probe
髪の毛にステージの赤が反射しています。
Mecanimのポイントについて OnStateEnter, OnStateUpdate,OnStateExitが追加されました。 これで、各ステートで実行したい内容を呼び出すことが簡単になりました。処理を発生させたいステートをクリックして「Add Behaviour」から処理を追加できます。
<参考> Before Unity5
using UnityEngine; using System.Collections; public class AnimatorStateInfoSample: MonoBehaviour { Animator animator; const string RUN_ANIMATION = "Base Layer.Run"; void Start() { this.animator = gameObject.GetComponent<Animator>(); } void Update() { AnimatorStateInfo stateInfo = this.animator.GetCurrentAnimatorStateInfo(0); if (stateInfo.nameHash == Animator.StringToHash(RUN_ANIMATION)) { Debug.Log("Run Animation"); } } }
ようは、いろいろ面倒でした。
こんな感じ using UnityEngine; using System.Collections; public class JumpAction : StateMachineBehaviour {
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log ("She is about to stop."); }
// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log ("She stops."); }
// OnStateExit is called when a transition ends and the state machine finishes evaluating this state override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("She finish stopping."); }
}
このようにアニメーションのタイミングで呼ばれます
Personal版に解放されたその他機能について ・Occlusion Culling ・Image Effect ・Render Texture ・Movie Texture ・Navigation System
Occlusion Culling オクルージョンカリングは、他のオブジェクトに覆い隠されてカメラに映らなくなってしまったオブジェクトのレンダリングを無効化する機能です。
With Occlusion Culling
*キャプチャーはUnity公式ページのものを引用致しました。
Occlusion Culling
カメラからは後ろから見えない
view from Camera
Occlusion Cullingの使い方
Occlusion Cullingの使い方
Occlusion Cullingの使い方
Occlusion Cullingの使い方
Image Effect
Image Effectの使い方 Assets -> Import Packages -> Effects ImageEffectsのScriptsフォルダーにあるスクリプトをMainCameraに追加します。
RenderTexture カメラで映している映像がテクスチャーとして映し出されます。
RenderTextureを追加 カメラの映像を映したいオブジェクトに貼り付ける。
Texture用のカメラを配置する
「Target Texture」にRender Texture設定
オブジェクトに映像が映ります。
Movie Texture Movie Textureは、動画(.mov、 .mpg、 .mpeg、 .mp4、 .avi、.asf形式のファイル)をUnityで使用することができます。
Movie Textureのサンプルスクリプト using UnityEngine; using System.Collections; public class ControlMovie : MonoBehaviour { public MovieTexture movieTexture; //Inspector viewから動画を設定 void Start() { GetComponent<GUITexture>().texture = movieTexture; movieTexture.Play(); // 動画再生する } void Update() { if (Input.GetButtonDown("Fire1")) { movieTexture.Pause(); // 動画を止める } else if (Input.GetButtonDown("Fire2")) { movieTexture.Play(); // 動画を再生する } } }
NaviMeshについて
地形を把握して自動でルート検索(移動にかかる最短処理)を導くシステムになります。
サンプルシーン
ステージになっているオブジェクトをStaticにして、NavigationからステージをBakeします。 ちなみにUnity4とUnity5では内部的に使われるNaviMeshシステムが違うので互換性はありません。
ステージが青くなる
NavController.cs using UnityEngine; using System.Collections; public class NavController : MonoBehaviour {
private NavMeshAgent agent; void Start () {
agent = GetComponent<NavMeshAgent> (); } void Update () {
if (Input.GetMouseButtonDown (0)) { Ray screenRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(screenRay, out hit)){ agent.SetDestination(hit.point); } }
} }
AddComponent -> Navigation -> NavMeshAgent を移動するオブジェクトに追加してください
ではステージに隙間がある場合には?
OffMeshLinkについて Navigation機能を使った通常の移動は陸続きの移動(歩行移動)しかできない(つまりステージとステージの間に隙間がある場合は移動できない)のですがOffMeshLinkを使えば、Navigationシステムを使って飛び越えることができます。 最短ルートもこの隙間を飛び越えて移動することも計算に入るようになります。
Cube1にoff MeshLinkを追加
Cube1の設定について
これで隙間を飛び越えるようになります
動いている障害物を回避する
NavMeshObstacleについて Navigationを使う時はStaticにして使うのですが、Staticにせずにオブジェクトを動かしたい時にはNavMeshObstacleを利用します。 このNavMeshObstacleは、障害物に追加します。 *Stageは、Navigation->Bakeしていることが前提となります。
*このようなスクリプトで障害物を動かしています。
using UnityEngine; using System.Collections; public class Shaking : MonoBehaviour { // Update is called once per frame void Update () { transform.position = new Vector3(Mathf.PingPong(Time.time,3),transform.position.y,transform.position.z); } }
避けるようになります。
HAPPY DEVELOPMENT :D