Difference between revisions of "Unity Sandbox"

From Wikicliki
Jump to: navigation, search
(Create An Augmented Reality App Webinar by Gen Infiniti Academy, 13 Aug 2020, 7.30pm-9.30pm)
Line 26: Line 26:
 
* Build and Run
 
* Build and Run
  
=== PlaceOnPlace.cs ==
+
=== PlaceOnPlace.cs ===
  
 
<pre>
 
<pre>

Revision as of 13:25, 13 August 2020

Create An Augmented Reality App Webinar by Gen Infiniti Academy, 13 Aug 2020, 7.30pm-9.30pm

  • Change build settings to Android/mobile
  • Delete Main camera and Directional Light
  • Window > Package Manager > AR Foundation > Install
  • Window > Package Manager > ARCore XD Plugin > Install
  • Window > Package Manager > ARkit Xr Plugin > Install
  • Rightclick on Hierarchy Window > XR > AR Session origin
  • Double click the tiny AR Session origin > look under inspector > tag: MainCamera
  • Rightclick on Hierarchy Window > XR > AR Session (coordinates the real world)
  • Rightclick on Hierarchy Window > XR > AR Default Plane
  • Click on AR Session Origin in Hierarchy > Look in Inspector > Add Component > AR Raycast Manager (checks for floor)
  • Click on AR Session Origin in Hierarchy > Look in Inspector > Add Component > AR Plane Manager (allows you to tag and project things)
  • Now we want to add a plane prefab, first we create a folder in project called “prefabs”
  • Drag the AR Default Plane into the Prefabs folder
  • Drag the blue AR Default Prefab into inspector slot for AR Session Origin > plane manager > plane prefab
  • Create in project a scripts folder
  • Create a new C# script “PlaceOnPlane”
  • Drag and drop this script into AR session origin
  • Download free asset butterfly
  • Double click on FBX
  • Double click on Materials
  • Select second sphere (blue metallic) butterfly_Albedo select the material in emissions
  • Assets > Butterfly Animated > Prefab > left click on butterfly and drag it inside Place On Place Model (inside AR Session Origin)
  • Project Settings > Player > Other setting > Identification > Minimum API Level > Set to Android 7.1
  • Build and Run

PlaceOnPlace.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.EventSystems;

public class PlaceOnPlane : MonoBehaviour
{
    ARRaycastManager raycastManager;
    List<ARRaycastHit> hits;

    public GameObject model;
    
    void Start()
    {
        raycastManager = GetComponent<ARRaycastManager>();
        hits = new List<ARRaycastHit>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.touchCount == 0)
            return;

        Touch touch = Input.GetTouch(0);

        if (IsPointerOverUIObject(touch.position))
            return;

        if (raycastManager.Raycast(touch.position, hits))
        {
            Pose pose = hits[0].pose;

            Instantiate(model, pose.position, pose.rotation);
        }
    }

    bool IsPointerOverUIObject(Vector2 pos)
    {
        if (EventSystem.current == null)
            return false;
        PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
        eventDataCurrentPosition.position = new Vector2(pos.x, pos.y);
        List<RaycastResult> results = new List<RaycastResult>();
        EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
        return results.Count > 0;
    }
}