抓 Sprite animation sheet 來做至少 Idle 和 Walk 或 Run 以便可以測試移動與跳躍
要有你學號與姓名, 要有三個可跳上跳下的平台, 確定可用左右鍵移動並利用速度切換動畫(控制Animator)
https://unity3d.com/learn/tutorials/topics/2d-game-creation/2d-character-controllers
** 使用 Sorting Layers (排序圖層) 改 變 2D圖片遠近
(2)抓一張育達校園來當背景圖(Background)
把育達校園圖片拉入場景, 調整大小, 此時會遮住其他所有的遊戲物件(GameObject)
(3)利用 Sorting Layer 使背景圖在畫面最底層 (上課會Demo)
有兩個方式可以進到 Sorting Layer 的設定頁面 ! (上課會解說)
(其中一個: Edit > Project Setting 專案設定 > Tags and Layers)
(一般的 Layer 主要用途是 Mask遮罩, 例如可以設定說某攝影機只要照某些Layer)
**音效(聲音哪來)呢 ?
這微軟古時候的"錄音機" 很好用 (抓下存檔後點兩下即可)
sndrec32.exe | |
File Size: | 128 kb |
File Type: | exe |
(4)想辦法讓動畫播到某個影格會發出聲音(音效) --- 請注意音效 和 音樂不同 !
(a)要有個腳本含有可播放音效的 public 函數, 例如以下的 DoDo( )
(b)把該腳本(如下範例)掛給動畫物件
(c)記得拉個聲音片段給腳本中的 AudioClip 變數 (以下例子內是 sound)
(d)敲 CTRL-6 或 Windows > Animation 叫出動畫窗
(e)在適當格加入事件 Add Event, 並指定執行 (a)的播音效函數 (上課會 Demo)
*** 這例子中我的播音效函數 是 DoDo( )
/// 以下腳本 按 g 可發出聲音
/// yyy.js
#pragma strict
@Header("把一個聲音拉給以下 Sound, 腳本掛在動畫物件上")
var sound: AudioClip; // 請掛個聲音給這變數
private var playing = false;
public function DoDo( ) {
if( ! sound) return; if(playing) return;
playing = true;
playSound( );
} // DoDo
private function playSound( ) { // coroutine
AudioSource.PlayClipAtPoint(sound, transform.position);
yield WaitForSeconds (sound.length); // 請把聲音切成剛好長度 !
playing = false;
} // PlaySound(
function Start ( ) {
//if( ! sound ) sound = (AudioClip)gameObject.GetComponentInChildren(AudioClip); //聲音
} // Start(
function Update () {
if(Input.GetKeyDown(KeyCode.G)) DoDo( );
} // Update (
(5)想辦法讓動畫播到某個影格會發出特效
http://blog.sina.com.cn/s/blog_73b948140102wbtm.html
haha38.unitypackage | |
File Size: | 4294 kb |
File Type: | unitypackage |
/// tmd.js
#pragma strict
// 按 y 發射特效
@Header("把這腳本掛在帶有ParticleSystem的動畫物件, 或把ParticleSystem取名 呼死")
var parSys : ParticleSystem; // for ver. 3.5 or later versions
public function haha( ) {
if( ! parSys ) return;
parSys.enableEmission = true;
parSys.Play( );
}
function Start () {
if( ! parSys)parSys =
gameObject.GetComponentInChildren(ParticleSystem); // 3.5 or later
if(!parSys) parSys =
GameObject.Find("呼死").GetComponent.<ParticleSystem>();
if(parSys) parSys.enableEmission = false;
if(parSys) parSys.enableEmission = false;
}
function Update () {
if(Input.GetKeyDown(KeyCode.Y)) haha( );
}
(b)弄個特效掛給馬英九,
調整位置, 設為不要 Loop, 且 Play on Awake 也不要勾 !
還有, 設定特效時間長短
(c) Play 起來按 y 看看特效
(7)讓跑步時右腳踩下發出特效
(b)敲 CTRL-6 或 Windows > Animation 叫出動畫窗
(c)點動畫窗左上角切換到 Run 的狀態
(d)在適當格加入事件 Add Event, 並指定執行播特效函數 (上課會 Demo)
** 我的例子播特效函數是 haha( )
今天繳交的螢幕抓圖中要有一張正好發出特效時抓下的
Unity 官方 2D 遊戲教學
https://unity3d.com/learn/tutorials/topics/2d-game-creation/2d-character-controllers
注意內部預設變數 rigidbody2D 在 Unity 5.0 開始已經不可以用 !
必須改為自己在 Start( ) { } 內用 GetComponent<Rigidbody2D>( ) 取得 !
Rigidbody2D myBody = null;
void Start( ) {
if( ! myBody) myBody = GetComponent<Rigidbody2D>( );
// JavaScript 要多個點如 myBody = GetComponent.<Rigidbody2D>( );
} // Start(
/// 以下腳本 按 h 可發出聲音
/// yyy2.js -- 這腳本掛上會自動生出一個 AudioSource 元件
/// 這時變成有兩個 Audio Clip 可以存放聲音片段Audio Clip
/// 這程式會優先使用 變數 sound 的聲音
#pragma strict
@script RequireComponent(AudioSource)
// C# 要這樣寫: [RequireComponent(typeof(AudioSource))]
@Header("把一個聲音拉給以下 Sound, 腳本掛在動畫物件上")
var sound: AudioClip; // 請掛個聲音給這變數, 沒有就使用 AudioSource 身上的 Audio Clip
@Header("想播放幾秒?")
var clipTime: float = 0f; // 0 代表聲音片段的長度
private var myAudio: AudioSource;
/// Start( ) 在後面
private var playing = false;
public function DoDoDo( ) {
if( ! myAudio.clip) {
Debug.LogError("DoDoDo( ) in yyy2.js -- 沒有聲音片段 Audio Clip");
return;
}
if(playing) return; // 不允許重疊播放 !
playing = true;
playSound( );
/// StartCoroutine( playSound( ) );
} // DoDoDo
private function playSound( ) { // coroutine
if(myAudio) audio.Play( );
/// AudioSource.PlayClipAtPoint(sound, transform.position);
yield WaitForSeconds ( clipTime ); // 請把聲音切成剛好長度 !
/// C# 這樣寫 yield return new WaitForSeconds(audio.clip.length);
playing = false; stopSound( )
} // playSound(
public function stopSound( ) { // 必要時調用這函數
if(myAudio) myAudio.Stop( );
playing = false;
} // stopSound(
function Start() {
//if( ! sound ) sound = (AudioClip)gameObject.GetComponentInChildren(AudioClip); //聲音
myAudio = GetComponent.<AudioSource>( ); // 聲音來源, 相當於麥克風
if( sound) myAudio.clip = sound; // 把麥克風身上的聲音換掉, 用 sound 的
if( clipTime == 0f) clipTime = myAudio.clip.length;
} // Start(
function Update ( ) {
if(Input.GetKeyDown(KeyCode.H)) DoDoDo( );
} // Update (
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class example : MonoBehaviour {
public string url = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg";
IEnumerator Start() {
WWW www = new WWW(url);
yield return www;
renderer.material.mainTexture = www.texture;
}
}
/// 參考 Unity 官方網站的 WWW.texture
/// https://docs.unity3d.com/400/Documentation/ScriptReference/WWW-texture.html
///
using System.Collections;
using UnityEngine.UI;
public class Test : MonoBehaviour {
string userId = "100006487850605"; // Facebook 用戶 ID
IEnumerator Start () {
WWW www = new WWW("https://graph.facebook.com/" +
userId + "/picture?type=large");
yield return www;
renderer.material.mainTexture = www.texture;
}
}
new Rect(0, 0, www.texture.width, www.texture.height), new Vector2(0.5f, 0.5f) );
用 UI >> Text 放入你的學號姓名, 放畫面左上角 ! 字不可太小 !
用一個 UI.Image 來放大頭貼
用 UI.InputField 讓使用者輸入 id
然後抓圖片顯示在畫面 (用 UI.Texture)
再生一個 UI.Button
要變大喔? 太簡單了:
GetComponent<Image>().transform.localScale = new Vector3(3, 3, 3);
more Hint:
要做類似如下畫面, 使用者輸入 FB 的 id number, 按下按鈕就更換大頭貼 !
//如何取得輸入格子 InputField 的內容 ?
using UnityEngine.UI;
public UI.InputField who; // InputField 要與這 who 關聯起來 !
string userID; // 注意不要重複宣告/定義 !
//
userID = who.text.ToString(); // 取得 who 內容並轉為字串
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GGGYYY : MonoBehaviour {
[Header("注意要把 InputField 拉給這who, 或把該 InputField 取名臉書")]
public InputField who;
public string userId = "100006487850605"; // Facebook 用戶 ID, 猜猜這是誰 ?
IEnumerator Start () {
if( ! who) who = GameObject.Find("臉書").GetComponent<InputField>() ;
WWW www = new WWW("https://graph.facebook.com/" +
userId + "/picture?type=large");
yield return www;
// renderer.material.mainTexture = www.texture;
GetComponent<Image>().sprite = Sprite.Create(www.texture,
new Rect(0, 0, www.texture.width , www.texture.height), new Vector2(0.5f, 0.5f) );
GetComponent<Image>().transform.localScale = new Vector3(3, 3, 3);
}
IEnumerator getFB( ) { // 含有 yield 的必須是 IEnumerator, 須用 StartCouroutine 叫!
WWW www = new WWW("https://graph.facebook.com/" +
userId + "/picture?type=large");
yield return www;
GetComponent<Image>().sprite = Sprite.Create(www.texture,
new Rect(0, 0, www.texture.width , www.texture.height), new Vector2(0.5f, 0.5f) );
GetComponent<Image>().transform.localScale = new Vector3(3, 3, 3);
}
/// 以下是給按鈕被按下(OnClick)時要做的, 所以一定要宣告 public 喔
public void goGetIt( ) {
userId = who.text.ToString();
StartCoroutine( getFB( ) ); // C# 一定要這樣寫
}
}
(1)自己 FB, (2)和(3)是你兩位同學的 FB
然後再複習 2D動畫 Animation Clip 製作與動畫播放器 Animator 的控制
也是抓三張畫面繳交
[Unity] Facebook SDK 範例使用教學 By 剪刀
Overview
1. 新增 Facebook App
2. 設定 Facebook App Key Hash
3. 安裝 OpenSSL
4. 安裝 JDK
5. 設定環境變數
6. 下載並匯入 Unity Facebook SDK
7. 確認 Bundle ID 與 Keystore
8. 修正 AndroidManifest Merge
9. 輸出!
以下是詳細圖文步驟
建立 Facebook App
首先到 Facebook開發者頁面 申請成為開發者
接著點選 My Apps => Add a New App
平台選擇
通常使用 Unity 開發的都是從 Android 開始
接下來也以 Android 為例解說
命名
Naming 是最困難的一部分…XD
總之就取個好記又和別人不一樣的名字吧!
Package 與 Activity Name
接下來要設定 Package Name 和 Activity Class Name
Package Name 要和 Unity 專案中設定一樣
而Unity 的預設 Activity 是
com.unity3d.player.UnityPlayerActivity
測試確認
通常都不會上架之後才測試 Facebook 吧?
所以出現這個視窗就不理他
選擇 Use this package name 繼續~
建立 Key Hashes
詳細請看這篇:如何產生 Android Key Hash
上面這篇是使用 Mac 建立的
若是用 Windows 的可以先略過這個步驟
等待會 OpenSSL 和 JDK 安裝好
環境變數設好之後再回頭來產生 Key Hash
建立完成
完成後可以看到 Facebook 的 App ID
待會 Unity 中會需要設定
下載 Facebook SDK
SDK 更新的頻率很頻繁
基本上大型專案功能沒問題
就不需要太常更新
開新 Unity 專案
開一個全新的專案
並把 FacebookSDK package 中的東西全部匯入
Facebook Setting
匯入完成後
點上方選單列會新增一個 Facebook
打開後選 Edit Setting
OpenSSL not found
先把 App Id 填入後
打開下方的 Android Build Facebook Setting
確認是否一切正常
這時沒安裝 OpenSSL 的朋友就會遇到以下訊息:
OpenSSL not found. Make sure that OpenSSL is installed, and that it its in your path.
下載 Openssl-forwindows
安裝路徑
解壓縮 OpenSSL 包後
放到自己想要的位置
剪刀是放在 Program Files 下
新增 OpenSSL 環境變數
我的電腦 => 右鍵內容 => 進階系統設定 => 環境變數
在系統變數中找到 Path
新增路徑指向 OpenSSL 下的 bin 子資料夾
記得前面要加分號
Ex. C:\Program Files\OpenSSL\bin
接著重新啟動 Unity(一定要關掉再打開)
Keytool not found
搞定 OpenSSL 後
沒設定好 JDK 的話會接著遇到這個問題
下載 JDK
新增 JDK 環境變數
跟 OpenSSL 一樣
將路徑指到子資料夾 bin 下
設定完成後再次重新啟動 Unity
Ex. C:\Program Files\Java\jdk1.8.0_25\bin
確認 Bundle ID
要和 Facebook 後台一樣
設定 Scenes
把 Examples 中的場景全部加到 Build Settings 中
MainMenu Scene 擺第一個
Unable to merge android menifests
接下來可能會遭遇到最後這個問題
各個 Menifests 的版本設定不一
Error Log
在 Log 中可以看到所需要
minSdkVerion 和 targetSdkVersion
的最高版本為何
SdkVersion 設定
Minimum API Level 可以在 Other Settings 頁面設定
對應到 minSdkVersion
但是沒有 targetSdkVersion 的設定
比較快的方法是直接打開主要的 Manifest.xml
在裡面加入 SdkVesrion 的設定
Path: Assets/Plugins/Android/AndroidManifest.xml
登入 FB
Build 成功後
先點擊 FB.Init 初始化
就可以開始登入了
記得要使用開發者的帳號
發文測試
測試時權限可以選擇只限本人看到
接下來就可以隨意開心地測試了
FacebookManager on Github
程式實作部分可以參考剪刀寫的 FacebookManager
用法大致如下:
1 2 3 4 5 6 | m_fbManager = new FBManager(); m_fbManager.LoginCompleteEvent += OnFBLoginComplete; m_fbManager.ErrorEvent += OnFBError; m_fbManager.Login(); m_fbManager.Snapshot( texture, title, fileName ); |
歡迎您留言與分享!(Welcome for comments or sharing!)
[Unity] Facebook SDK 範例使用教學 By 剪刀
Overview
1. 新增 Facebook App
2. 設定 Facebook App Key Hash
3. 安裝 OpenSSL
4. 安裝 JDK
5. 設定環境變數
6. 下載並匯入 Unity Facebook SDK
7. 確認 Bundle ID 與 Keystore
8. 修正 AndroidManifest Merge
9. 輸出!
通常使用 Unity 開發的都是從 Android 開始
接下來也以 Android 為例解說
命名Naming
APP命名 (Naming)是最困難的一部分…XD
總之就取個好記又和別人不一樣的名字吧!
Package 與 Activity Name
接下來要設定 Package Name 和 Activity Class Name
Package Name 要和 Unity 專案中設定一樣
而 Unity 的預設 Activity 是
com.unity3d.player.UnityPlayerActivity
通常都不會上架之後才測試 Facebook 吧?
所以出現這個視窗就不理他
選擇 Use this package name 繼續~
建立 Key Hashes
詳細請看這篇:如何產生 Android Key Hash
上面這篇是使用 Mac 建立的
若是用 Windows 的可以先略過這個步驟
等待會 OpenSSL 和 JDK 安裝好
環境變數設好之後再回頭來產生 Key Hash
建立完成
完成後可以看到 Facebook 的 App ID
待會 Unity 中會需要設定
SDK 更新的頻率很頻繁
基本上大型專案功能沒問題
就不需要太常更新
///
OpenSSL not found
先把 App Id 填入後
打開下方的 Android Build Facebook Setting
確認是否一切正常
這時沒安裝 OpenSSL 的朋友就會遇到以下訊息:
OpenSSL not found. Make sure that
OpenSSL is installed, and that it its in your path.
下載 Openssl-forwindows
安裝路徑
解壓縮 OpenSSL 包後
放到自己想要的位置
剪刀是放在 Program Files 下
新增 OpenSSL 環境變數
我的電腦 => 右鍵內容 => 進階系統設定 => 環境變數
在系統變數中找到 Path
新增路徑指向 OpenSSL 下的 bin 子資料夾
記得要用分號 ; 把各路徑隔開
Ex. C:\Program Files\OpenSSL\bin;
接著重新啟動 Unity(一定要關掉再打開)
Error Log
在 Log 中可以看到所需要 minSdkVerion 和 targetSdkVersion的最高版本為何
[Unity] Facebook SDK
SdkVersion 設定
Minimum API Level 可以在 Other Settings 頁面設定
對應到 minSdkVersion
但是沒有 targetSdkVersion 的設定
比較快的方法是直接打開主要的 Manifest.xml
在裡面加入 SdkVesrion 的設定
Path: Assets/Plugins/Android/AndroidManifest.xml
[Unity] Facebook SDK
登入 FBBuild
成功後
先點擊 FB.Init 初始化
就可以開始登入了
記得要使用開發者的帳號
[Unity] Facebook SDK[Unity] Facebook SDK
發文測試
測試時權限可以選擇只限本人看到
接下來就可以隨意開心地測試了
[Unity] Facebook SDK
[Unity] Facebook SDK
FacebookManager on Github
程式實作部分可以參考剪刀寫的 FacebookManager
用法大致如下:
m_fbManager = new FBManager();
m_fbManager.LoginCompleteEvent += OnFBLoginComplete;
m_fbManager.ErrorEvent += OnFBError;
m_fbManager.Login();
m_fbManager.Snapshot( texture, title, fileName );