記錄自己說過,且還不錯的觀念
經典遊戲之所以經典是因為它的獨特性
當延續好幾代都差不多或者看起來感覺都一樣,那它就爛掉了
2011年7月24日 星期日
2011年7月20日 星期三
UNITY3D - 圖片淡入淡出
圖片淡入淡出其實跟GameObject逐漸透明消失的做法類似
只要改圖片本身的透明度就好了
要記得一點是顏色跟透明度的值是(x/256)的float值,不要以為直接塞1~256的值就可以...
圖片淡入
=========================================================================
function Start ()
{
guiTexture.color.a = 0; //讓圖片一開始為透明
}
function Update ()
{
if(guiTexture.color.a < 1)
{
guiTexture.color.a = guiTexture.color.a + Time.deltaTime; //讓圖片隨時間變不透明
}
}
=========================================================================
畫面淡出
=========================================================================
=========================================================================
只要改圖片本身的透明度就好了
要記得一點是顏色跟透明度的值是(x/256)的float值,不要以為直接塞1~256的值就可以...
圖片淡入
=========================================================================
function Start ()
{
guiTexture.color.a = 0; //讓圖片一開始為透明
}
function Update ()
{
if(guiTexture.color.a < 1)
{
guiTexture.color.a = guiTexture.color.a + Time.deltaTime; //讓圖片隨時間變不透明
}
}
=========================================================================
畫面淡出
=========================================================================
function Start ()
{
guiTexture.color.a = 1; //讓圖片一開始為不透明
}
function Update ()
{
if(guiTexture.color.a < 1)
{
guiTexture.color.a = guiTexture.color.a - Time.deltaTime; //讓圖片隨時間變透明
}
}
=========================================================================
標籤:
UNITY 3D
2011年7月13日 星期三
UNITY3D - 連續貼圖
U3D不支援顯示gif檔案,但是我們可以利用程式來將一連串的靜態圖片顯示得跟動態圖片無異。
首先建立一個empty object然後加入下面component script。
=======================================================================
var aTexture : Texture[]; //靜態圖片組
var framePerSecond : int; //每秒播放張數
var x : int; //x軸位置(以pixel為單位)
var y : int; //y軸位置(以pixel為單位)
private var startTime : float;
function Start () {
startTime = Time.time; //記錄開始時間,確保圖從第一張開始放。
}
function OnGUI () {
var index : int = ((Time.time - startTime) * framePerSecond) % aTexture.Length;
GUI.DrawTexture(Rect(x, y, aTexture[index].width, aTexture[index].height), aTexture[index], ScaleMode.StretchToFill, true, 0);
}
=======================================================================
加入component後將靜態圖按順序設給aTexture以及設定framePerSecond與XY軸就可以看到在設好的(x,y)上顯示靜態圖片組成的動畫了。
首先建立一個empty object然後加入下面component script。
=======================================================================
var aTexture : Texture[]; //靜態圖片組
var framePerSecond : int; //每秒播放張數
var x : int; //x軸位置(以pixel為單位)
var y : int; //y軸位置(以pixel為單位)
private var startTime : float;
function Start () {
startTime = Time.time; //記錄開始時間,確保圖從第一張開始放。
}
function OnGUI () {
var index : int = ((Time.time - startTime) * framePerSecond) % aTexture.Length;
GUI.DrawTexture(Rect(x, y, aTexture[index].width, aTexture[index].height), aTexture[index], ScaleMode.StretchToFill, true, 0);
}
=======================================================================
加入component後將靜態圖按順序設給aTexture以及設定framePerSecond與XY軸就可以看到在設好的(x,y)上顯示靜態圖片組成的動畫了。
標籤:
UNITY 3D
2011年7月3日 星期日
UNITY3D - GameObject逐漸透明消失
private var startTime : float;
private var alpha : float = 255.0f;
function Start () {
startTime = Time.time;
}
function Update () {
if((Time.time - startTime) > 5)
{
var render = gameObject.GetComponentInChildren(Renderer);
alpha = alpha - 10.0f;
render.material.color.a = alpha / 255.0f;
if(render.material.color.a <= 0)
Destroy(gameObject);
}
}
用處:用在怪被打死後逐漸消失。
以上程式功能為物件產生出來後經過5秒,然後將render的透明度逐漸遞減,當透明度低於0則清除此物件。注:Material的Shader必須用允許透明的Shader。
private var alpha : float = 255.0f;
function Start () {
startTime = Time.time;
}
function Update () {
if((Time.time - startTime) > 5)
{
var render = gameObject.GetComponentInChildren(Renderer);
alpha = alpha - 10.0f;
render.material.color.a = alpha / 255.0f;
if(render.material.color.a <= 0)
Destroy(gameObject);
}
}
用處:用在怪被打死後逐漸消失。
以上程式功能為物件產生出來後經過5秒,然後將render的透明度逐漸遞減,當透明度低於0則清除此物件。注:Material的Shader必須用允許透明的Shader。
標籤:
UNITY 3D
2011年6月30日 星期四
UNITY3D - 畫面震動效果
遊戲設計其實跟電影拍攝的概念很類似,構成電影最基本的元素是導演、攝影師、劇本、演員,而構成遊戲的最基本元素是鏡頭(導演、攝影師)、角色與NPC設定(劇本、演員)。
角色與NPC設定屬於控制與AI的設計,有賴於程設的構思去完善。相信很多人都會忽略鏡頭的重要性,但其實鏡頭就如同導演一般,要負責的東西多又繁雜且細膩。簡單來說...畫面上看到的東西都是鏡頭負責的(好像是廢話),舉凡玩家視角、遊戲介面、選單、畫面特效(震動、畫面變色)等等都是用鏡頭來呈現。
畫面震動的效果其實說穿了也沒什麼...不就是鏡頭晃一下就好了?以下是javascript code,附加到鏡頭上試試效果吧。
var shakePower : float = 2.0f; //設定震動的幅度
var shakeDelay : float = 0.05f; //設定震動的間隔時間
function UpDownShake () //上下震動
{
transform.Translate(Vector3.up * shakePower);
yield WaitForSeconds(shakeDelay);
transform.Translate(Vector3.up * -shakePower);
}
function LeftRightShake () //左右震動
角色與NPC設定屬於控制與AI的設計,有賴於程設的構思去完善。相信很多人都會忽略鏡頭的重要性,但其實鏡頭就如同導演一般,要負責的東西多又繁雜且細膩。簡單來說...畫面上看到的東西都是鏡頭負責的(好像是廢話),舉凡玩家視角、遊戲介面、選單、畫面特效(震動、畫面變色)等等都是用鏡頭來呈現。
畫面震動的效果其實說穿了也沒什麼...不就是鏡頭晃一下就好了?以下是javascript code,附加到鏡頭上試試效果吧。
var shakePower : float = 2.0f; //設定震動的幅度
var shakeDelay : float = 0.05f; //設定震動的間隔時間
function UpDownShake () //上下震動
{
transform.Translate(Vector3.up * shakePower);
yield WaitForSeconds(shakeDelay);
transform.Translate(Vector3.up * -shakePower);
}
function LeftRightShake () //左右震動
{
transform.Translate(Vector3.right * -shakePower);
yield WaitForSeconds(shakeDelay);
transform.Translate(Vector3.right * shakePower);
}
function ForwardBackShake () //前後震動
{
transform.Translate(Vector3.forward * shakePower);
yield WaitForSeconds(shakeDelay);
transform.Translate(Vector3.forward * -shakePower);
}
function XRotateShake () //X軸晃動
{
transform.Rotate(Vector3.right * shakeAngle);
yield WaitForSeconds(shakeDelay);
transform.Rotate(Vector3.right * -shakeAngle);
}
function YRotateShake () //Y軸晃動
{
transform.Rotate(Vector3.up * shakeAngle);
yield WaitForSeconds(shakeDelay);
transform.Rotate(Vector3.up * -shakeAngle);
}
function ZRotateShake () //Z軸晃動
{
transform.Rotate(Vector3.foward * shakeAngle);
yield WaitForSeconds(shakeDelay);
transform.Rotate(Vector3.foward * -shakeAngle);
}
function Update ()
{
if(Input.GetKeyDown(KeyCode.Keypad1)) { StartCoroutine("UpDownShake"); }
if(Input.GetKeyDown(KeyCode.Keypad2)) { StartCoroutine("LeftRightShake"); }
if(Input.GetKeyDown(KeyCode.Keypad3)) { StartCoroutine("ForwardBackShake"); }
if(Input.GetKeyDown(KeyCode.Keypad4)) { StartCoroutine("XRotateShake"); }
if(Input.GetKeyDown(KeyCode.Keypad5)) { StartCoroutine("YRotateShake"); }
if(Input.GetKeyDown(KeyCode.Keypad6)) { StartCoroutine("YRotateShake"); }
}
標籤:
UNITY 3D
UNITY3D - 控制輸入設定
輸入控制是遊戲最基本的部分,那U3D要怎麼設定輸入控制呢?
首先我們開啟Edit->Project Settings->Input就可以看到Inspector視窗呈現類似的畫面
用於檢查某特定按鍵是否被按下,跟Input的設定無關,只有在被按下的時候才觸發,按鍵不放開重按則無效。
首先我們開啟Edit->Project Settings->Input就可以看到Inspector視窗呈現類似的畫面
Axes底下就是各按鍵設定,如果有想要增加按鍵數量的話可以加大Size就會看到下面的按鍵數量增加。
每個按鍵下面都有以下屬性:
Name:用來定義按鍵的名稱,關係到程式呼叫時的對應。
Descriptive Name:玩家在更改輸入控制畫面看到的名字。
Descriptive Negative Name:玩家在更改輸入控制畫面看到的名字(通常為方向控制)。
Negative Button:此輸入所對應的按鍵(通常為方向控制才有用到),程式中取到的值為-1~0。
Positive Button:此輸入所對應的按鍵,程式中取到的值為0~1。
Alt Negative Button:此輸入所對應的替代按鍵(通常為方向控制才有用到),程式中取到的值為-1~0。
Alt Positive Button:此輸入所對應的替代按鍵,程式中取到的值為0~1。
Gravity:設置按鍵恢復的速度。
Dead:調節類比訊號的敏感度(如類比搖桿)。
Sensitivity:調節數位訊號的敏感度。
Snap:勾選後,按反向鍵時會先將數值歸零。
Invert:勾選後,對應的按鍵會相反(通常用於飛行遊戲)。
Type:按鍵的輸入型態(若要改用遊戲手把記得更改此項)。
Axis:此按鍵的軸向。
Joy Num:設定為第幾個手把(若是用遊戲手把的話)。
程式部分:
Input.GetKey (name : string) : bool
用於檢查某特定按鍵是否被按,跟Input的設定無關,會被連續偵測到。Input.GetKeyDown (name : string) : bool
用於檢查某特定按鍵是否被按下,跟Input的設定無關,只有在被按下的時候才觸發,按鍵不放開重按則無效。
Input.GetKeyUp (name : string) : bool
用於檢查某特定按鍵是否被按下,跟Input的設定無關,只有在被放開的時候才觸發。Input.GetButton (buttonName : string) : bool
一樣是用來檢查按鍵是否被按,buttonName是Input所設定的名字,會被連續偵測到。
Input.GetButtonDown (buttonName : string) : bool
一樣是用來檢查按鍵是否被按,buttonName是Input所設定的名字,只有在被按下的時候才觸發,按鍵不放開重按則無效。Input.GetButtonUp (buttonName : string) : bool
一樣是用來檢查按鍵是否被按,buttonName是Input所設定的名字,只有在被放開的時候才觸發。Input.GetAxis (axisName : string) : float
通常用於方向鍵偵測,回傳值為-1~1,跟Input的設定息息相關。還有其他的函式可以用,但相信這些就很夠了...
標籤:
UNITY 3D
訂閱:
文章 (Atom)
