Unity

Värt att nämna när det gäller att programmera kontroller i Unity.

På nästan alla tutroials/forum jag har läst så använder man sig av gui i Unity när man programmerar knappar/spakar. gui programmeringen fungerar väldigt bra men man ska också veta att gui programmeringen tar väldigt mycket kraft från mobilen jämfört med att inte använda sig gui funktionerna i Unity.

youtube

Kollade in ett youtube klipp om programmering till mobil i Unity.

Efter att man hade kollat in hans andra klipp pga första var bara hur man installerar unity så tyckte man att det såg helt okej ut. Men när andra hade slutat och man testade hans kod och får fram att koden inte fungerar så började man undra. Tänkte att han tar väll upp felen på nästa men där visar det sig att han har ett helt nytt script som han har tagit från någon annan:/

Det positivas var att en hade skrivit en bra läk bland kommentarerna på hans tredje del.

Där fanns det ett script för C# för mobiltelefoner som var väldigt bra. Nog det bästa scriptet jag har hittat på alla dessa veckor.

Det som var bra med detta skriptet är att det fungerar direkt utan massa krångel. En annan sak som också var bra var att skriptet var i C# och inte java som jag inte är lika bra på.

Nackdelar med C#

Något som jag har upptäckt genom programmeringen är att vissa rader kod skulle man kunna tro att de har samma som C# och Java. Men så är inte fallet. I stället finns det vissa rader kod som inte finns om man översätta koden rakt av.

Tex denna kod i Java:

function Update()
{
if ( iPhoneInput.touchCount > 0 && crashed )
{
Application.GarbageCollectUnusedAssets();
Application.LoadLevel( 0 );
}
}

Om man skulle översätta detta till C# skulle koden bli:

void  Update (){
if ( iPhoneInput.touchCount > 0 && crashed )
{
Application.GarbageCollectUnusedAssets();
Application.LoadLevel( 0 );
}
}
}

Tittar man på de två olika koderna så ser de princip lika dana ut MEN nu är det så att C# koden fungerar inte om man skulle översätta koden rakt av. För i C# finns inte .touchCount om man skriver iPhoneInput före. I C# kan man bara få touchCount om man skriver input.touchCount.

Och då kommer vi till det roliga. Iphonen förstår koden hur bra som helst när man skriver input.touchCount så jag förstår inte riktigt varför de har en iPhoneInput och AndoridInput när man kan lika bra använda sig av input.

 

Course Technology iPhone 3D Game Programming All in One

I boken Course Technology iPhone 3D Game Programming All in One står det ett mycket intressant stycke om olika iphone funktioner. Det är på sidan 127-129.

iPhoneInput Class
This class has the following variables:
accelerationEvents: This read-only variable returns a list of acceleration
measurements that occurred during the previous frame.
iPhoneInput Class 127
touches: This read-only variable yields a list of objects representing the
status of all touches that occurred during the last frame.
touchCount: Another read-only variable that returns the number of
fingers touching the screen.
multiTouchEnabled: This flag variable tells us whether the system
handles multi-touch support.
accelerationEventCount: This tells us how many acceleration
measurements took place last frame.
acceleration: This read-only variable reports the last measured linear
acceleration in 3D space.
orientation: A read-only variable that reports the current device
orientation.
lastLocation: This reports the geographical location last recorded by
the device.
The class has these functions:
GetTouch: This function returns a touch object with information about
the status of a specific touch. You would use this as GetTouch( 0 ) to
get information about one finger touching the screen, or you would use
GetTouch( 0 ) through GetTouch( 4 ) to get information about all
fingers touching the screen if the touchCount is equal to 5.
GetAccelerationEvent: This function returns a specific acceleration
measurement that occurred during the previous frame.
As you can see, there’s quite a bit to cover with regard to the iPhone’s very specific
input system. Overall, the system is very good and with an innovative
thought process you can achieve great results even without hardware buttons.

 

Simpel javascript kod för iphone på att trycka på skärmen:

function OnGUI()
{
for ( i = 0; i < iPhoneInput.touchCount; i++ )
{
var tPos = iPhoneInput.GetTouch( i ).position;
var x = tPos.x;
var y = tPos.y;
GUI.Label( Rect( x, 320 – y, 300, 20 ), ‘‘Touch# ’’+ (i+ 1)+ ‘‘ Position ’’
+ tPos );
}
}

 

 

iOS vs Android

För att kunna se om du kodar till android eller iOS så kan man skriva koden på följande sätt:

#if UNITY_IPHONE ... iPhone code here... #endif #if UNITY_Android ... Android code here... #endif

Eller på detta sättet:

function Start () { if (Application.platform == RuntimePlatform.Android) print ("Android"); else if(Application.platform == RuntimePlatform.IPhonePlayer) print("Ifone"); }

 

 

Kod med mus och samma kod med iphone

Så, nu har jag snart hittat allt som jag vill veta innan jag kan börja testa olika koder till mobiler. Jag vet nu att touch screenen kan jobba med samma kod som man använder när musen på datorn. Dock så måste man använda den riktiga koden när man sak exportera ut och använda det på mobilen. En annan begränsning som finns i musen är att den bara klarar av en sak. Du kan tex inte testa saker där du behöver ha mer än ett finger.

 

Hur kod ser ut med mus:

if ( Input.GetMouseButtonDown(0) ) { // or GetMouseButton for continuous... Input.mousePosition.y .. blah blah }

 

Hur koden kan se ut på iphone:

if ((Input.touchCount == 1) && (Input.GetTouch(0).phase == TouchPhase.Began) ) { Input.GetTouch(0).position .. blah blah }

Telefonen hängde sig

Körde ett test på telefonen med ett iphone exempel. Fungerade bra ändars till att jag testade ännu ett nytt. Då hängde sig telefonen när man klickade på spelet på telefonen. Skärmen blev svart och man kunde inte på något sätt starta om telefonen. Telefonen var helt död. Jaha tänkte jag. Jag testade en metod för att ta bort hängningar i program för iphone och tre metoder för att starta telefonen i felsäkert läge. Inget av de metoderna fungerade. Jag testade då med att ladda telefonen men det fungerade inte heller. Lika så så hittade inte datorn telefonen när man stoppade in sladden i datorn. Skit tänkte man och efter flera timmars testade så slutade jag. Jag tänkte att nu var det helt kört. Blir nog inte att man kan fortsätta med detta blocket. Men så vaknade jag på morgonen och klickade på telefonen. Då startade skärmen och den visade att batteriet var väldigt lågt. Så tydligen så har hängningen tagit väldigt mycket ström som tur är och på det sättet har telefonen stängt av sig. Så nu fungerar den igen.

Sista felen och sen är det bara att börja kolla programmeringen för mobiler

Äntligen fick jag ner uppdateringen. Och mycket riktigt försvann alla varningar. Dock kom det upp en ny varning.

 

Det visade sig att man behövde ladda ner en app till som heter appsync.

Och efter att man hade laddat ner appsync så var man tvungen att skriva in lite kod i terminalen(som kommandtolken i windows) på sin mac för att bli av med sitt felmeddelande. Och efter detta fick man in sitt spel på sin Iphone.

Äntligen så kan man börjar koda på riktigt.

 

PS: Kommer nog att lägga upp en steg för steg guide på hur man ska göra för att få sin iphone till att köra sina egna appar. Tyckte att det var otroligt många steg som jag har fått göra. Och det har inte funnits någon guide på nätet hur man gör. Känner att jag hjälper nog väldigt många människor för att lägga ner flera veckor som jag har gjort bara för att få mobilen att testa sitt program är inte kul.

 

Börjar känna att man kommer någon stans

Tror man att man har fått allt till att fungera så får man upp detta felet i Xcode:

Efter att ha googlat på:

Undefined symbols for architecture armv7:
“ConvertToUnityScreenOrientation(int, EnabledOrientation*)”, referenced from:
-[UnityViewController shouldAutorotateToInterfaceOrientation:] in AppController.o
-[UnityViewController willRotateToInterfaceOrientation:duration:] in AppController.o
-[UnityViewController didRotateFromInterfaceOrientation:] in AppController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Fick jag fram att det hade något med en “gammal” Unity editor. Så jag fick ladda ner ett snäpp nyare av Unity.

Nu är det bara att vänta på att Unity ska bli färdig nerladdat…. Är på mobilt bredband idag så beräknad tid 2h…..

Link Identity Editor

För att kunna köra sina program till sin jailbreak iphone måste man installera ett program på Cydia som heter ldid. Något man måste tänka på för att kunna hitta ldid är att man måste ha status Utveckare i Cydia för att kunna hitta ldid och kunna installerar det. Om man inte har status Utvecklare utan har valt användare eller Hacker istället så kan man ändra status i Cydia genom att klicka på SKÖTA/Inställningar.

Vad är då ldid?? Idid är en förkortning av Link Identity Editor och är ett program som gör att man får ett fake code sign som då gör att Xcode i mac kan köras på sin iphone utan att man behöver ha apple licens. Man behöver också skriva vissa ord i sin Terminal(Terminalen är motsvarigheten till windows kommandotolken) som man har i sin mac för att kunna överföra saker genom ldid.

hittade en guide på hur en använde sig av sin ldid. Vet dock ännu hur bra den är.

kodning till ios

Hur man ska koda:

http://forum.unity3d.com/threads/118036-How-to-code-iPhone-controls

 http://stackoverflow.com/questions/9712807/creating-ios-plugin-in-unity

http://docs.unity3d.com/Documentation/Manual/index.html

 

Göra plugins för ios:

 http://docs.unity3d.com/Documentation/Manual/PluginsForIOS.html

 

Kontroller till ios dock java och jag vill göra mitt i c#:

http://docs.unity3d.com/Documentation/Manual/Input.html

 

http://docs.unity3d.com/Documentation/ScriptReference/Input.html

 

Tips om hur man ska göra sin mobilspel:

http://iphone.ezone.com/

Jeailbreak

Jaha, efter uppdaterad osx så var man tvungen att stoppa i ett simkort från den opratören som telefonen en gång i tiden var låst till. Väldigt kul…. Så jag beställde ett kontantkort gratis från deras sida så att jag kan få telefonen att fungera.

 

Blir att kolla in dokumentationen för programmera för mobiler i dag istället.

Jeailbreak

Efter många timmars arbete så vet jag nu hur man gör för att byta sin programversion på telefonen.

Fanns ett bra youtubeklipp hur man gjorde. Tydligen så måste man ha en fil på telefonen som heter SHSH blobs. Det tråkiga med denna filen är att man får den från apples server och de har slutat att ge ut SHSH blobs som är under ios programversion 6.0 så jag fick jailbreaka den i 6.0.1 istället och den är mycket sämre än 5.1.1

Jailbreak

Dessa länkarna fann jag att man skulle kunna jailbreak sin iphone med:

http://www.jailbreakaiphone.se/

http://osxdaily.com/2010/10/25/download-iphone-firmware-ipsw/

http://iphoneguiden.se/guider/guide-jailbreaka-ios-5-1-1-med-absinthe-mac/

http://www.ijailbreak.com/software/

http://www.ijailbreak.com/cydia/install-cracked-apps-ios-5-1-1-5-1-appsync-installous/

http://www.iclarified.com/tutorials/iphone/index.php

Hur man kan få sin iphone till att köra i Unity utan att betala 99dollar till Apple

Har nu hittat en länk hur man får sin iphone till att köras i unity utan att betal Apple.

Man behöver först Jailbreaka telefonen så det är väll det jag får kolla in nu.

Sen får jag hoppas att min unity ios licens fortfarande finns kvar. De licenserna var ju gratis i 4 veckor på unitys hemsida i sommras så jag hoppas att de fortfarande fungerar. Annars har man Jailbreaktat mobilen i onödan:P

http://stackoverflow.com/questions/246422/how-can-i-deploy-an-iphone-application-from-xcode-to-a-real-iphone-device

 

En annan artikel om vilka program som man behöver ha:

http://answers.unity3d.com/questions/9622/can-unity-remote-be-installed-without-an-app-store.html

http://techexxpert.blogspot.in/2011/06/developing-iphone-games-with-unity-on.html

 

http://answers.unity3d.com/questions/20775/the-game-exporting-proccess-for-iphone.html

Fel som kan inträffa

http://answers.unity3d.com/questions/16007/beginner-user-nothing-will-compile-in-xcode.html