3ds max -> Unity -> iOS

June 25, 2017 0 Comments iOS, Unity, 3ds Max

Ciao a tutti!

Ho preparato questa piccola guida per tutti quelli che vorrebbero provare un modello 3d creato con 3ds max, all'interno di unity e di conseguenza nel proprio iPhone.

Requisiti:

  • Avere un computer windows con 3ds max installato
  • Avere un Mac per poter utilizzare Xcode
  • Avere un iPhone (meglio se dal 6 in su)

3ds max

Partiamo dall'esempio di un modello creato con 3ds max 2018, per prima cosa bisognerà esportare il progetto in formato FBX.

Con il nostro progetto aperto in 3ds max, seguiamo i seguenti passaggi

Dopodiché avendo l'fbx salvato in una cartella accessibile da Mac, passiamo ad aprire Unity con un progetto demo

Unity

Apriamo per semplicità, Roll a Ball

Ci posizioniamo sul progetto completo di questo tutorial

E importiamo l'asset appena creato, l'FBX

Ci troveremo ad avere il nostro bellissimo cubo importato all'interno di Unity

Quindi, lo trasciniamo all'interno della scena

Esportazione in Xcode

A questo punto, possiamo procedere ad esportare il nostro gioco in Xcode

Aprire il menu e fare Build & run

A questo punto aggiungere la scena aperta in unity con il tasto Add Open scenes

Saremo nella situazione seguente:

Ora possiamo premere Build and Run, selezionare quindi una cartella di output del progetto Xcode, per semplicità salviamolo nel desktop

Arrivati a questo punto, bisognerà aggiustare delle impostazioni in Xcode

Una volta aperto Xcode, selezionare il progetto

E modificare le impostazioni di Identity, (inventiamo un bundle identifier)

E selezioniamo un Team, (basterà essere loggati in Xcode con il proprio apple id)

Deploy su iOS

Collegare il proprio iphone al Mac, una volta fatto, si avrà la possibilità di inserire l'applicazione all'interno del cellulare, basterà premere "play"

Attendere che la procedura sia completata

Una volta fatto, avremo nel nostro iphone una fiammante applicazione nuova, che non vorrà aprirsi.

Dovremo andare in impostazioni e accettare il certificato di developer (che siamo noi)

Una volta fatto, finalmente, l'applicazione si avvierà!

E come potete vedere, ecco il nostro modellino inserito all'interno!

😊

Come rendere il gioco Roll a ball interattivo con il touchscreen

Bene, ora il gioco è caricato, ma non ci si riesce a giocare.

Bisogna modificare uno script, e bloccare la rotazione in landscape

Aprire il file PlayerController

E sostituire il codice con il seguente:

using UnityEngine;  
using System.Collections;  
using UnityEngine.UI;

public class PlayerController : MonoBehaviour {

    public float speed;
    public Text countText;
    public Text winText;

    private Rigidbody rb;
    private int count;

    //game world plane
    private Plane plane;


    void Start()
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        winText.text = "";
        SetCountText();

        //Create our game world plane
        //Our plane will pass through (0, 0, 0) in our game world and face up
        plane = new Plane(Vector3.up, Vector3.zero);

    }

    void FixedUpdate()
    {
        //keyboard inputs
        //       float move_horizontal = Input.GetAxis("Horizontal");
        //       float move_vertical = Input.GetAxis("Vertical");

        //check that we have at least 1 touch on screen
        if(Input.touchCount > 0)
        {
            //grab the first touch
            Touch myTouch = Input.GetTouch(0);

            //create a ray from that touch position through the camera plane
            var ray = Camera.main.ScreenPointToRay(myTouch.position);
            float ent;

            //check if our ray will intersect the game world plane
            //if yes, return true, set ent to the DISTANCE at which the ray intersects the plane
            //if no, return false, ent is zero
            if (plane.Raycast(ray, out ent))
            {
                //Get the point on the ray at distance 'ent'
                var hitPoint = ray.GetPoint(ent);

                //Add force to our rigidbody from it's position to the touch point
                //magnitude is set to 1 with 'normalized' to keep the speed multiplier consistent
                rb.AddForce((hitPoint - rb.position).normalized * speed);
            }


        }

        //keyboard input AddForce
        //       rb.AddForce(movement * speed);
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Pick Up"))
        {
            other.gameObject.SetActive(false);
            count++;
            SetCountText();
        }

    }

    void SetCountText()
    {
        countText.text = "Count: " + count.ToString();
        if (count >= 8)
            winText.text = "YOU WON!";

    }

}

Modifichiamo poi l'impostazione del progetto bloccando la rotazione a Landscape:

Possiamo quindi rifare la procedura di Build & Run descritta sopra!

Samuele Chiocca
Padova, italy Website