Portal belajar membuat aplikasi Augmented Reality dan Virtual Reality

Rabu, 13 Desember 2017

Load Assetbundle

18.11 Posted by Dicky Rachmat Iskandar No comments
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoadAssets : MonoBehaviour {

IEnumerator Start()
{
string uri = Application.persistentDataPath  + "/myassetbundle";       
WWW www = new WWW (uri);
yield return www;
var bundle = AssetBundle.LoadFromFile(uri);
var prefab = bundle.LoadAsset<GameObject>("Sphere");
Instantiate(prefab);
}

}

Selasa, 25 Juli 2017

LockOnTargetPosition

20.10 Posted by Dicky Rachmat Iskandar No comments
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;

public class Turret : MonoBehaviour {

    private Transform target;
    private Enemy targetEnemy;

    [Header("General")]

    public float range = 15f;

    [Header("Use Bullets (default)")]
    public GameObject bulletPrefab;
    public float fireRate = 1f;
    private float fireCountdown = 0f;

    [Header("Use Laser")]
    public bool useLaser = false;

    public int damageOverTime = 30;
    public float slowAmount = .5f;

    public LineRenderer lineRenderer;
    public ParticleSystem impactEffect;
    public Light impactLight;

    [Header("Unity Setup Fields")]

    public string enemyTag = "Enemy";

    public Transform partToRotate;
    public float turnSpeed = 10f;

    public Transform firePoint;

    public GameObject musuh;

    public GameObject img;

    public Vector3 Offset;

    public bool boel;

    // Use this for initialization
    void Start () {
        InvokeRepeating("UpdateTarget", 0f, 0.5f);
    }
    
    void UpdateTarget ()
    {
        GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag);
        float shortestDistance = Mathf.Infinity;
        GameObject nearestEnemy = null;
        foreach (GameObject enemy in enemies)
        {
            float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position);
            if (distanceToEnemy < shortestDistance)
            {
                shortestDistance = distanceToEnemy;
                nearestEnemy = enemy;
                musuh = enemy;

            }
        }

        if (nearestEnemy != null && shortestDistance <= range)
        {
            target = nearestEnemy.transform;
            targetEnemy = nearestEnemy.GetComponent<Enemy>();

        } else
        {
            target = null;
            boel = false;
            img.SetActive (false);
        }

    }
        

    // Update is called once per frame
    void Update () {
        if (target == null)
        {
            if (useLaser)
            {
                if (lineRenderer.enabled)
                {
                    lineRenderer.enabled = false;
                    impactEffect.Stop();
                    impactLight.enabled = false;
                }
            }

            return;
        }

        LockOnTarget();

        if (useLaser)
        {
            Laser();
        } else
        {
            if (fireCountdown <= 0f)
            {
                Shoot();
                fireCountdown = 1f / fireRate;
            }

            fireCountdown -= Time.deltaTime;
        }

    }

    void LockOnTarget ()
    {
        Vector3 dir = target.position - transform.position;
        Quaternion lookRotation = Quaternion.LookRotation(dir);
        Vector3 rotation = Quaternion.Lerp(partToRotate.rotation, lookRotation, Time.deltaTime * turnSpeed).eulerAngles;
        partToRotate.rotation = Quaternion.Euler(0f, rotation.y, 0f);
        boel = true;
        img.SetActive (true);
        img.transform.position = Camera.main.WorldToScreenPoint(musuh.transform.position) + Offset;
    }

    void Laser ()
    {
        targetEnemy.TakeDamage(damageOverTime * Time.deltaTime);
        targetEnemy.Slow(slowAmount);

        if (!lineRenderer.enabled)
        {
            lineRenderer.enabled = true;
            impactEffect.Play();
            impactLight.enabled = true;
        }

        lineRenderer.SetPosition(0, firePoint.position);
        lineRenderer.SetPosition(1, target.position);

        Vector3 dir = firePoint.position - target.position;

        impactEffect.transform.position = target.position + dir.normalized;

        impactEffect.transform.rotation = Quaternion.LookRotation(dir);
    }

    void Shoot ()
    {
        GameObject bulletGO = (GameObject)Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
        Bullet bullet = bulletGO.GetComponent<Bullet>();

        if (bullet != null)
            bullet.Seek(target);
    }

    void OnDrawGizmosSelected ()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, range);
    }
}


Ketergantungan pada script berikut:
Enemy

using UnityEngine;
using UnityEngine.UI;

public class Enemy : MonoBehaviour {

    public float startSpeed = 10f;

    [HideInInspector]
    public float speed;

    public float startHealth = 100;
    private float health;

    public int worth = 50;

    public GameObject deathEffect;

    [Header("Unity Stuff")]
    public Image healthBar;

    private bool isDead = false;

    void Start ()
    {
        speed = startSpeed;
        health = startHealth;
    }

    public void TakeDamage (float amount)
    {
        health -= amount;

        healthBar.fillAmount = health / startHealth;

        if (health <= 0 && !isDead)
        {
            Die();
        }
    }

    public void Slow (float pct)
    {
        speed = startSpeed * (1f - pct);
    }

    void Die ()
    {
        isDead = true;

        PlayerStats.Money += worth;

        GameObject effect = (GameObject)Instantiate(deathEffect, transform.position, Quaternion.identity);
        Destroy(effect, 5f);

        WaveSpawner.EnemiesAlive--;

        Destroy(gameObject);
    }

}


Ketergantungan pada script berikut:

Bullet

private Transform target;

    public float speed = 70f;

    public int damage = 50;

    public float explosionRadius = 0f;
    public GameObject impactEffect;
    
    public void Seek (Transform _target)
    {
        target = _target;
    }

    // Update is called once per frame
    void Update () {

        if (target == null)
        {
            Destroy(gameObject);
            return;
        }

        Vector3 dir = target.position - transform.position;
        float distanceThisFrame = speed * Time.deltaTime;

        if (dir.magnitude <= distanceThisFrame)
        {
            HitTarget();
            return;
        }

        transform.Translate(dir.normalized * distanceThisFrame, Space.World);
        transform.LookAt(target);

    }

    void HitTarget ()
    {
        GameObject effectIns = (GameObject)Instantiate(impactEffect, transform.position, transform.rotation);
        Destroy(effectIns, 5f);

        if (explosionRadius > 0f)
        {
            Explode();
        } else
        {
            Damage(target);
        }

        Destroy(gameObject);
    }

    void Explode ()
    {
        Collider[] colliders = Physics.OverlapSphere(transform.position, explosionRadius);
        foreach (Collider collider in colliders)
        {
            if (collider.tag == "Enemy")
            {
                Damage(collider.transform);
            }
        }
    }

    void Damage (Transform enemy)
    {
        Enemy e = enemy.GetComponent<Enemy>();

        if (e != null)
        {
            e.TakeDamage(damage);
        }
    }

    void OnDrawGizmosSelected ()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, explosionRadius);
    }

Selasa, 07 Februari 2017

Belajar Augmented Reality dan Virtual Reality

21.00 Posted by Dicky Rachmat Iskandar No comments
Belajar Augmented Reality dengan Engine Unity3D dan Vuforia Sdk

Assalamualaikum Wr.Wb

Selamat Siang ,Semua...

Halo Sahabat AR dimanapun kalian berada, yang selalu semangat untuk belajar teknologi Augmented Reality dan kerabatnya Virtual Reality.
Karena judul blog gw ini Belajar Augmented Reality dan Virtual Reality, bukan hanya sekedar belajar membuat AR dan VR, kalian harus tahu dulu, apa itu AR (Augmented Reality) dan apa itu VR (Virtual Reality).
Menurut wikipedia, augmented reality adalah teknologi yang menggabungkan benda maya dua dimensi dan ataupun tiga dimensi ke dalam sebuah lingkungan nyata tiga dimensi lalu memproyeksikan benda-benda maya tersebut dalam waktu nyata. 
Dan Virtual reality (VR) atau realitas maya adalah teknologi yang membuat pengguna dapat berinteraksi dengan suatu lingkungan yang disimulasikan oleh komputer (computer-simulated environment), suatu lingkungan sebenarnya yang ditiru atau benar-benar suatu lingkungan yang hanya ada dalam imaginasi. Lingkungan realitas maya terkini umumnya menyajikan pengalaman visual,  yang ditampilkan pada sebuah layar komputer atau melalui sebuah penampil stereokopik, tetapi beberapa simulasi mengikutsertakan tambahan informasi hasil pengindraan, seperti suara melalui speaker atau headpone.

Oke, gw rasa udah pada ngerti apa itu AR dan VR_nya. Masih ada banyak yang harus dibahas untuk dasar-dasar materi dari AR dan VR, seperti Skema dari teknologi AR dan VR, Algorithma AR dan VR, Sejarah AR dan VR, dan masih banyak lagi guys, BUANYAAAAK.......
Tapi semua itu bakal gw bahas sambil kalian belajar bikin, dan ngoprek-ngoprek AR dan VR ini.

Cekidot, langsung saja kita mulai belajar membuat AR (Augmented Reality) dan VR (Virtual Reality).
Tapi karna bakal kepanjangan ni tulisan, akan gw bagi menjadi 2 materi, kita belajar AR dulu, baru setelahnya lanjut ke VR, dengan segala macam tektek bengek nya.


Oke, BAB I !!! biar kayak anak kuliah, ngupyek skripsi , hehe

Download Unity3D dengan versi yang kalian inginkan, bisa kalian pilih di Unity Download Archive. Karena kebetulan gw pake Versi 5.4.3f1. Kalian boleh samain kyak yang gw pake atau nggak terserah yang kalian pengen, tapi ada catatan : error tanggung sendiri!!! 😁
buat belajar mah boleh lah sesekali nekat error2an...Dan langsung di install bro,.
Next, Download Vuforia sdk for Unity nya, disini guys. Pake yang versi terakhir aja ya...

Anyway, setelah semua terinstall dan terdownload. Pertama Buka Unity3D yang sudah kalian install tadi, kemudian buat project baru dengan nama "Hello AR".
ctt:jangan asal ganti nama project, karena lo semua baru pada belajar, nurut aje pokokya 😋






Kedua, install Vuforia sdk yang sudah kalian download, langsung kalian pilih import



Ketiga, nah disini kita mulai belajar mengatur prefab - prefab yang dibutuhkan. pertama hapus dulu MainCamera yang ada pada tab Hierarchy. Kemudian masukan prefab ARCamera dan ImageTarget kedalam Hierarchy yang ada pada tab Project - Assets - Vuforia - Prefabs, hingga seperti pada gambar dibawah ini : 



Selanjutnya, masukan Image Target yang sudah bisa kalian Download disini dengan mengklik 2 kali pada file .unitypackage yang sudah kalian download dan langsung klik import. Kemudian biar lebih greget ARnya, kita pake model 3D yang sudah saya siapkan, langsung sedot aja Gaaaan..
Buka aplikasi Unity kalian,  kemudian cari Assets pada Menubar kemudian pilih create-folder. Berinama "Model" pada folder tersebut. Kemudian buka file mdel 3D yang sudah kalian download dan langsung kalian Drag & Drop file ber-ekstensi .fbx dan folder tex ke folder Model yang sudah kalian buat di Tab Project, sehingga tampak seperti gambar berikut:



Klik ImageTarget pada Hierarchy kemudian lihat pada inspector, pastikan Database yang kalian pilih adalah Tutorial1 dengan ImageTarget elsa.



Kembali ke folder Model pada tab Project, drag & drop model Elsa ke prefab ImageTarget yang terdapat pada Hierarchy. Kemudian atur Transform model Elsa seperti pada gambar berikut:





Sekarang tekan Play untuk melihat hasil kerja kita..




Yess... Selamat ada error, nah disinilah belajarnya, error merupakan awal mula kesuksesan belajar.

Kita hilangkan errornya guys!!!

Klik ARCamera pada Hierarchy, pada inspector tekan Open Vuforia Configuration , kemudian paste kode ini ke App License Key yang masih kosong.Afxb9/T/////AAAAAfakRiUEhU/bnyTcEDAvVPU2gZVRZHu/fqPJu822Uk1RTSgjbIaQHy24C9lAfvJwnfrN2sdZNFATZUH4oxuaCXt4rmBp+7apzQMMxXS17ZxZqkHItOFChlZHZJlFFXP3lw4DDP/+76rqCSAyB6kfIvv30W9uTK4m95UHnoNvCOuO+i2GhojF48QgGCsclZid3FpB/KKRT1q4e9nfSmajRCBQdDjsdNL/ENQl4kc5U//I7ADJvrx8mbGyRWKw1fTyitD1Le9s83PUvEnytXl2E31l458GBsnIpspbB8ldOsUH2F/c3oObb168ChZTMUyG2FdN7+13wSclYLeAOEiVhn3ovLgNkpOMIHwrPrfHnIni

Dan terakhir centang Load Tutorial1 Database & Activate pada Inpector.



... Error Terpecahkan Guys!!!

Oke sekarang kalian tekan Play lagi, dan arahkan Kamera pada Marker yang bisa kalian download disini...




Berikut adalah hasil berlajar kita kali ini,..





Alhamdulillah... selesai juga belajar Augmented Reality kita kali ini, jangan lupa untuk mengajarkan yang kita ketahui ini ke teman - teman yang lain.
InsyaAllah mudah - mudahan di posting berikutnya, kita bisa belajar bagaimana cara build aplikasi, atau juga menambahkan fitur-fitur lain pada aplikasi Augmented Reality kita.

Bila ada kritik atau pun saran pembahasan tutorial silahkan disampaikan ya,. 
Mohon maaf jika ada kekurangan. Terimakasih sudah membaca dan belajar bersama ..... :)


Wassalamu'alaikum...