Page 1

pasion laugh understand

portfolio

.COM


pasion laugh understand


Content s MObile APP OH MY GOD

3-12

OH MY TAIWAN

12-18

Interactive Installation Art Kaleidoscope

22-24

健康光球

26-28


Moblie APP


OH MY GOD

OH MY TAIWAN


OH MY GOD 設計理念 設計理念 在環保意識抬頭的21世紀, 許多人對於自身的行為如何 危害地球環境卻一無所知, 許多災害看似為天災,其實 卻是人類為了生活方便而衍 生出的問題。

設計目的 藉由「OH MY GOD」App,帶 領使用者到九大地區瞭解災 害的種類,並透過遊戲的方 式解決問題,希望大眾在生 活中可以為地球的長久生息 著想,改變自身的行為,以 減少災害的發生。

技術

AI

AE

程式設計/地球建模 王芷綸 平面設計/場景建模 王紹瑋 影片製作/素材繪製 葉純琳

MAYA


AR

4


using System.Collections; using System.Collections.Generic; using UnityEngine; public class beanwithcamera : MonoBehaviour { // Use this for initialization public Transform came; public Transform b; public float smoothTime = 0.01f; private Vector3 cameraVelocity = Vector3.zero; private Camera mainCamera; void Awake() { mainCamera = Camera.main; } void Update() { if(came) { b.eulerAngles = new Vector3(0, came.eulerAngles.y, 0); } transform.position = Vector3.SmoothDamp (transform.position, came.position + new Vector3(0, -2, 0.5f), ref cameraVelocity, smoothTime); } }

using System.Collections; using System.Collections.Generic; using UnityEngine; public class score : MonoBehaviour { private GUIStyle guiStyle = new GUIStyle(); public Rigidbody rb; float vSbarValue = 0.0f; int valueUpDown = 0; public GameObject gametwo2; private GameObject childGameObject; public GameObject super; public Transform b;

void Update() { } if (Input.GetButtonDown("Fire1")) { childGameObject = Instantiate(gametwo2); childGameObject.transform.position = gametwo2.transform.position;

float translation = Time.deltaTime * 10; if (vSbarValue > 9.0f) { valueUpDown = 1; } if (vSbarValue < 0.0f) { valueUpDown = 0; } if (valueUpDown==0) { vSbarValue = vSbarValue+translation; } else { vSbarValue = vSbarValue - translation; }

Object script = childGameObject.GetComponent<beanwithcamera>(); Destroy(script); rb = childGameObject.GetComponent<Rigidbody>(); rb.isKinematic = false; rb.AddForce(b.forward * 300); childGameObject.transform.parent = super.transform; childGameObject.transform.position = new Vector3(0, -0.15f, 0.8f); }


籃球投擲效果

跟隨鏡頭

透過C#寫出簡單的投擲遊戲,為讓視覺感更逼真,使用3D建模製造 出遊戲場景,以30*30*15的立方體為遊戲區域

東亞 掃描種子後,會有一塊地出現在畫面 中,手機的中間下方會有一顆種子, 玩家必須移動位子去尋找土地哪裡有 坑洞,並將種子丟入坑中。

6


using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Video;

public void t() { timeint -= 1; if (timeint > 2 && mScore == 9) { win.SetActive(true);

public class collision : MonoBehaviour { public static collision Instance;

} if (timeint > 0 && mScore == 9) { win.SetActive(false); lastfvideo.Instance.Floodright();

public int mScore = 0; int timeint = 32; public GameObject gameover; public GameObject win; public GameObject gamethree; public GameObject gamethree2;

CancelInvoke("t"); } if (timeint == 2 && mScore != 9) {

void OnCollisionEnter(Collision other) { Destroy(other.gameObject); mScore = mScore + 1;

gameover.SetActive(true); }

} if (timeint == 0 && mScore != 9 ) { gameover.SetActive(false); lastflose.Instance.Floodwrong();

public void Start() { InvokeRepeating("t", 1, 1); }

CancelInvoke("t"); }

} }


敲擊消失

虛擬工具

透過C#寫出鑿泥巴的遊戲,將2個3D物件做虛擬投射,透過拿虛擬 物件來執行遊戲,以30*30*15的立方體為遊戲區域。

東南亞 掃描鑿子後,會有一塊地的地層的剖 面圖出現,地層中會有一些地方因泥 沙堆積造成洪水,玩家必須移動來尋 找哪裡有堵住的地方,並利用鑿子將 其鑿開。

8


using System.Collections; using System.Collections.Generic; using UnityEngine; public class puzzle : MonoBehaviour { public Transform Cam; public GameObject gover; public GameObject gamefour; public GameObject tim; public GameObject win; public float delta = 0.1f; int timerenge = 30; void Start() { Cam = Camera.main.gameObject.transform; InvokeRepeating("tiny", 1, 1); } public void tiny() { //Gamefunction.Instance.GameStart(); timerenge -= 1; if (timerenge > 0 && Cam.transform.position.y > 2.29f && Cam.transform.position.y < 2.66f && Cam.transform.position.x > -0.3f && Cam.transform.position.x < 0.3f && Cam.transform.position.z > -5.3f && Cam.transform.position.z < -4.5f) { win.SetActive(true); StartCoroutine(F()); lastfvideo.Instance.Fireright(); tim.SetActive(false); }

if (timerenge == 0 && Cam.transform.position.z > -4.5f) { gover.SetActive(true); StartCoroutine(F()); lastflose.Instance.Floodwrong(); CancelInvoke("tiny");

} if (timerenge == 0 && Cam.transform.position.z < -5.3f) { gover.SetActive(true); StartCoroutine(F()); lastflose.Instance.Floodwrong(); CancelInvoke("tiny");

} if (timerenge == 0 && Cam.transform.position.y > 2.29f) { gover.SetActive(true); StartCoroutine(F()); lastflose.Instance.Floodwrong(); CancelInvoke("tiny");

} if (timerenge == 0 && Cam.transform.position.y < 2.66f) { gover.SetActive(true); StartCoroutine(F()); lastflose.Instance.Floodwrong(); CancelInvoke("tiny");

} } IEnumerator F() { if (timerenge == 0 && Cam.transform.position.x >print(Time.time); 0.3f) { yield return new WaitForSeconds(2); print(Time.time); gover.SetActive(true); gover.SetActive(false); StartCoroutine(F()); win.SetActive(false); lastflose.Instance.Floodwrong(); CancelInvoke("tiny"); } } } if (timerenge == 0 && Cam.transform.position.x < -0.3f) { gover.SetActive(true); StartCoroutine(F()); lastflose.Instance.Floodwrong(); CancelInvoke("tiny");

}


錯位拼圖

透過C#寫出3D拼圖,透過空間的錯視去位移,讓飛機在某個角度為正 確的樣子,以30*30*15的立方體為遊戲區域。

美洲 掃描直升機的模型後,就會出現直升 機的碎片拼圖在畫面中,玩家必須移 動自身的位置讓拼圖完整。

10


using System.Collections; using System.Collections.Generic; using UnityEngine; public class Dessertplay : MonoBehaviour { public static float volume; AudioClip micRecord; string device; void Start() {

void Update() { volume = GetMaxVolume(); } float GetMaxVolume() { float maxVolume = 0f; float[] volumeData = new float[300]; int offset = Microphone.GetPosition(device) - 300 + 1; if (offset < 0) { return 0; } micRecord.GetData(volumeData, offset);

device = Microphone.devices[0]; micRecord = Microphone.Start(device, true, 999, 44100); }

for (int i = 0; i < 300; i++) { float tempMax = volumeData[i]; if (maxVolume < tempMax) { maxVolume = tempMax; } } return maxVolume; }

void Start() public void MoveTo() { { rig = GetComponent<Rigidbody>(); target[i].position = new Vector3 InvokeRepeating("tt", 1, 1); (target[i].position.x, transform.position.y, transform.position.z); transform.LookAt(target[i]); } transform.Translate(Vector3.right * Time.deltaTime * speed); void Update() if (transform.position.x > target[i].position.x - delt { i = (i + 1) % target.Length; MoveTo(); volume = Dessertplay.volume; } if (volume > 0.3) { public void tt() speed = -0.1f; { timeint -= 1; } else if (timeint == 0 && transform.position.x > 0.42 + delta) { { speed = 0.1f; win.SetActive(true); } lastfvideo.Instance.Floodright(); if (timeint == 0) CancelInvoke("tt"); { speed = 0; } } } } public void OnTriggerEnter(Collider other) { if (other.name == "death") { gameover.SetActive(true); timing.SetActive(false); lastflose.Instance.Floodwrong(); speed = 0; CancelInvoke("tt"); } }


音量感測

自體移動

透過C#寫出吹沙的遊戲,沙子會不庭的往前,需透過聲音來避免沙子 碰觸羊群,以30*10*5的長方體為遊戲區域。

澳洲 掃描牛和羊的模型後,就會有牛和羊 出現在一個充滿沙子方塊的畫面中, 在畫面裡沙子會不斷的前進,玩家必 須要對著收音孔吹氣,沙子不能碰到 牛羊,一旦碰到就失敗了。

12


OH MY TAIWAN 設計理念 許多災害看似為天災,其實 卻是人類為了生活方便而衍 生出的問題,將範圍縮至生 活圈,增加其同理感。

設計目的 在趣味之中學習,並且了解 到氣候變遷對台灣所帶來的 影響,跟隨現在時代的變遷 及科技的進步,我們利用多 元的方是教育小孩。

技術

AI

AE

程式設計/icon 王芷綸 平面設計/場景建模 王紹瑋 影片製作/素材繪製 葉純琳

MAYA


14


介面設計


先以海洋酸化做為第一開發核心,想透過此遊戲告訴 現今小孩現金海洋酸化不只是受工業汙染影響,海洋 還會因垃圾及溫度而受影響。

透過撿垃圾來減少二氧化碳的排出,減少海洋因吸收 二氧化碳而酸化。

將資訊套入分數計算的一部分,讓使用者了解到垃圾 會製造多少的二氧化碳。

16


using System.Collections; using System.Collections.Generic; using UnityEngine; public class LifeIndicator : MonoBehaviour { int time_int = 30; public GameObject losemenu; //三個愛心的Image public GameObject[] lifeImages;

void Start() { losemenu.SetActive(false); currentLife = lifeImages.Length; } public void DecreaseLife() { //減少生命值 currentLife--;

//剩餘生命 private int currentLife;

//讓愛心的圖案消失 lifeImages[currentLife].SetActive(false); if (currentLife == 0) { Time.timeScale = 0f; losemenu.SetActive(true); SCORE.scorevalue = 0; } } }

star2.SetActive(true); } if (PlayerPrefs.GetInt("score", 0) > 0) if (PlayerPrefs.GetInt("score", 0) >= 60 ) { { s.SetActive(false); star3.SetActive(true); } star2.SetActive(false); if (PlayerPrefs.GetInt("score", 0) == 0) } if (PlayerPrefs.GetInt("score", 0) >= 620 ) { { star2.SetActive(false); star2.SetActive(false); star3.SetActive(false); star4.SetActive(false); star3.SetActive(false); } star4.SetActive(true); } if (PlayerPrefs.GetInt("score", 0) >0) } { void Start () { } highscore.text = PlayerPrefs.GetInt("score", 0).ToString(); //s.SetActive(true); // highscore.text = PlayerPrefs.GetInt("score").ToString(); } public void Re() { PlayerPrefs.DeleteAll(); highscore.text = "0"; }

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Highscore : MonoBehaviour { public GameObject star1; public GameObject star2; public GameObject star3; public GameObject star4; public Text highscore; public GameObject s;

void Update () {

void Start () { using System.Collections; movAudio = GetComponent<AudioSource>(); using System.Collections.Generic; // winmenu.gameObject.SetActive(false); using UnityEngine; win = false; using UnityEngine.SceneManagement; moving = true; using UnityEngine.Audio; dead = false; public class gyroscope : MonoBehaviour { rb = GetComponent<Rigidbody2D>(); moveanim = GetComponent<Animator>(); moveanim.speed = 1; Rigidbody2D rb; movAudio.Play(); [Range( 2f, 2f)] //rotateAngle = 0f; public float movespeed = 0.1f; //move.SetBool("balldead",dead); float dirx, diry,rotateAngle; } Animator moveanim; void Update () { static bool dead; static bool moving; dirx = Input.acceleration.x * movespeed; static bool win; diry = Input.acceleration.y * movespeed; [SerializeField] Rotate(); public AudioSource movAudio; }

void FixedUpdate() { if(moving) rb.velocity = new Vector2(rb.velocity.x+dirx, rb.velocity.y + diry); } public static void setdeadTrue() { dead = true; } void Rotate() { if (dirx >0) { moveanim.speed = 1; moveanim.SetInteger("Direction", 1); } if (dirx <0) { moveanim.speed = 1; moveanim.SetInteger("Direction", 0); } } }


生命值

當玩家未成功接取掉 進海中的垃圾時,氧 氣瓶中的氧氣即會減 少

HIGH SCORE

取得玩家最高紀錄 並顯示於選單中

玩家控制

透過陀螺儀控制角 色的方位移動,來 進行遊戲

18


Interactive Installation Art


Kaleidoscope

健康光球


Kaleidoscope 設計理念 舊時的萬花筒是一個只能一 人看到及一人操作的玩具, 設計一款不僅可以多人同時 觀看又能多人同時參與的裝 置,並讓周遭環境更添色彩 更加美麗的藝術裝置。

兩首不同音樂轉出 另一首歌曲

設計目的 讓萬花筒概念突破,是一個 可以共享的視覺體驗。

技術

AI

程式設計 王芷綸 圖形繪製/音樂 黃敬婷 裝置造型 韓明潔

音響


雙轉輪

音樂開關 圖盤控制器

22


#include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" SoftwareSerial mySoftwareSerial(10, 11); DFRobotDFPlayerMini myDFPlayer; void printDetail(uint8_t type, int value); const int IN1 = 9 ; const int IN2 = 6 ; const int IN3 = 5 ; const int IN4 = 3 ; void setup() { mySoftwareSerial.begin(9600); Serial.begin(9600); pinMode(A3, INPUT); pinMode(A4, INPUT); Serial.println(); Serial.println(F("DFRobot DFPlayer Mini Demo")); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); if (!myDFPlayer.begin(mySoftwareSerial)) { Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while(true); } Serial.println(F("DFPlayer Mini online.")); void stop() { myDFPlayer.volume(20); analogWrite(IN1,0); myDFPlayer.play(); analogWrite(IN2,0); pinMode(IN1, OUTPUT); analogWrite(IN3,0); pinMode(IN2, OUTPUT); analogWrite(IN4,0); pinMode(IN3, OUTPUT); } pinMode(IN4, OUTPUT); } void loop() if(300<sensorValue && sensorValue<650) { { int i=80; stop(); int sensorValue = analogRead(A3); int sensorValue2 = analogRead(A4); myDFPlayer.play(2);//音響1-女歌 } Serial.print(sensorValue); Serial.print("/"); if(350<sensorValue2 && sensorValue2<650) Serial.println(sensorValue2); { if(sensorValue2>650) stop(); { } analogWrite(IN1,i); if(sensorValue2<350) if(sensorValue<350) analogWrite(IN2,0); { { } analogWrite(IN3,0); analogWrite(IN1,0); if(sensorValue>650) analogWrite(IN2,i); analogWrite(IN4,i); { analogWrite(IN3,i); } } analogWrite(IN4,0); } }


馬達正反轉

可變電阻

直流馬達

利用可變電阻來控制馬達正反轉以及音響開關

音樂播放

音響

DFPlayer

透過音響及PLAYER來撥放歌曲

24


健康光球 設計理念 球,最基本的一顆球能訓練 長輩的抓握力和反應力,透 過簡單的握力及顏色變化, 加強手部復健及對顏色的認 知能力。

讓手部復健便更有趣

設計目的 期望藉由本產品能夠增加 長輩復健的趣味性,並加 強對顏色的認知,將枯燥 的復健變成快樂的事情。 可同時3人玩

技術

AI

AE

程式設計 王芷綸/劉家妤 影片製作 李宜蓁/吳家蓁 外型製作 何咏忻/黃嬿羽


3種顏色變化

26


#define LEDR 11 #define LEDG 10 #define LEDB 6 int fsr_pin=A0; int fsr_value=0; void setup() { Serial.begin(9600); pinMode(LEDR, OUTPUT); pinMode(LEDG, OUTPUT); pinMode(LEDB, OUTPUT); //pinMode(led_pin, OUTPUT); } int r = 0; int g = 0; int b = 0; void loop() { fsr_value = analogRead(fsr_pin); // 讀取FSR if(fsr_value>650 ) { Serial.println("2"); digitalWrite(LEDR,255); digitalWrite(LEDG,0); digitalWrite(LEDB,0); } if(fsr_value>500 && fsr_value<=650) { Serial.println("2"); digitalWrite(LEDR,250); digitalWrite(LEDG,50); digitalWrite(LEDB,0); } if(fsr_value>200 && fsr_value<=350) { Serial.println("2"); digitalWrite(LEDR,0); digitalWrite(LEDG,250); digitalWrite(LEDB,0); } if(fsr_value<100) { Serial.println("0"); digitalWrite(LEDR,0); digitalWrite(LEDG,0); digitalWrite(LEDB,0); } delay(100); }


壓力感測

壓力感測器

RGB LED

偵測使用者出力之大小來改變燈光的顏色,並使電子繪本 繼續撥放

撥放繪本

以節慶為主題,透過製作食物來做手部的復健

28


pasion laugh understand

王芷綸_裝置作品  
王芷綸_裝置作品  
Advertisement