I develop a mobile app on Unity, and I decided to let the user flip the orientation whenever they want (landscape/portrait). But as I remember- when you flip the device on Android- the Activity gets restarted so you need to store the variables and restore after the change. But since I develop everything in Unity- I'm not sure about the steps I have to make in order to allow orientation changes. Do I have to store the variables? What happens after the user rotates their device? What information might I lose besides the objects positions? Also is there any recommended tool for making 3d game objects fit the screen? like the "anchor presets" option that UI elements have?
Related
How can I check if the device is a touch device or a mouse device?
Using kIsWeb is not sufficient because if using web version of the app on a mobile device kIsWeb returns true, but I need it to return false because it is a touch device.
Checking the platform doesn't work either because if using web version of the app on an iOS device for example returns false for iOS platform check.
Use case - I have two different types of video players for my app. One is suitable for touch devices (you tap to show and hide controls) and one is suitable for mouse devices (controls show when you mouse into the player and hide when you mouse out).
Youtube has the same idea. If I use the youtube app or website on my iPhone I get touch controls. If I use the youtube app or website on my iPad Pro I get touch controls. If I use the youtube website on my Mac I get mouse controls at all screen sizes (even mobile screen sizes).
So I guess I really just need to know platform on the web. I can get platform if not on the web.
Great question #jwasher! I had the same issue - a touch and swipe based UI that was great as a native mobile app, great as an single page web app (SPA) on mobile web browsers, but that was weird and clunky for mouse based interactions when the SPA was used in a desktop web browser.
The solution I have settled on is to wrap sensitive widgets in a MouseRegion (https://api.flutter.dev/flutter/widgets/MouseRegion-class.html) to detect mouse activity at runtime, then reacting by augmenting the UI with buttons to provide a mouse focussed way of triggering actions previously only linked to touch triggers.
You could use this to "mouse-enable" individual widgets, or you could wrap the whole app in a MouseRegion, trip a state field when activity was detected then rebuild the widget tree in a substantially different way for point and click users.
This strategy may incur some minor complexity/CPU overhead on devices that will never have a mouse attached (like a smartphone), but the solution will be more flexible than a build or configuration time capability determination. If a user starts the app on a tablet, then puts it in a stand and attaches a bluetooth mouse - it will react appropriately.
A device isn't "a mouse device" or "a pointer device". Events have an input type--see Pointer event.kind--but not the whole device. A laptop can have a touch screen, and a tablet can have a stylus or external mouse; an app running in those environments can receive both types of event.
Without knowing what you are trying to accomplish with this classification, is hard to advise on how to accomplish it. Trying to style your UI based on a guess of the primary interaction mode, for instance, is a completely different problem than reacting to a mouse event differently than a touch event.
I want to develop one iOS app. Is there any way to get the ui touch point when app in background. Like i want tap randomly in iOS device screen and my app will get correspond touch point accordingly.
Fortunately, this is not possible on iOS.
I have a universal iPhone/iPad app that I'm in the process of completing. This is a music listening app that connects to and allows you to listen to music off of a user composed music site.
Since the user base for this app will be very small I've decided to put iAds in to try and get a little recovery on the programming costs.
The app is xib-less meaning that I create all components and draw every view manually. I have all of the code in place to place the iAd on screen and off screen for its various states. My app supports all rotations of all devices and my screens correctly reposition all components for every possible orientation.
After digging deep in the documentation I found that Apple always displays tapped on iAds in portrait mode. If my device is in portrait mode (upright) then there is no problem. However if I'm in landscape or upside down (yes it makes sense for this app), then the iAd displays in portrait but when closed my app is a mess.
The best way I can describe it is that each of my display items has a frame which I manually set to position it where I want it for each orientation. This works perfectly until the user taps on an iAd. The modal iAd dialog comes up then after it is closed even if I force a reposition of my components nothing draws correctly.
I've checked the view frame coordinates before and after the ad and I see some minor shifting. But what is so strange is that my components even when forced to their frame locations I desire are just a mess.
Any help would be greatly appreciated. Here is a link to the screen movie incase
embedding doesn't work: http://www.screencast.com/t/1pSwUI3EiMF
i want to make my game universal. but when i try it on ipad, my background layer only covers 1/4 of the screen, but the sprites can go the entire screen. also the sizes of sprites are too small, didn't scale up.
when i see the apple doc, it says i have to "if else" to detect device every time use coordinate. but there are just so much code to be modified.
so is there any way to solve this? like just change in one place?
When you make your game universal, You have to rename your resources to support the ipad size.. meaning : sprite-ipad.png
It is not suppose to scale up when you choose universal app.. You can to redo the sprites..
As cocos2d auto handles the coordinates of the sprites when it is on different devices, it should be all over the device..
If you do not wish to redo the images, you can just choose to build for iphone.. It would be able to scale up when the player downloads it on the ipad..
Disclaimer: I know the question of locking orientation has been asked, and solved. But that's only half my question.
I'm building an iphone website for a small indie game developer. They want to be able to show off screenshots from some of their iphone games. This is somewhat of a problem though. All the screenshots are taken from the game in landscape mode, so it really doesn't make any sense to display them in landscape.
Currently I have a very lightweight lightbox-style display for the image. You click a button on the site, and the image pops up (through ajax magic!) to occupy the full screen. Clicking anywhere on the image makes it go away, as if you had never viewed it.
I'm thinking that the two most practical solutions are either: a) lock iphone orientation for the duration of displaying the image; or b) do some very sneaky rotation on the image when the phone rotates, so no one ever notices. Are either of these possible/feasible? If so, could you give me any tips? And if not, has anyone solved a similar problem?
A demo of this is available at my personal server.
My $.02
As a personal design decision - I would have two images, and switch them as the rotation changes from portrait to landscape. Locking orientation seems so unfriendly. As some extra eye candy, You may want to put some sort of transition image in there between image swaps.
Here is something that may help .. http://snippets.dzone.com/posts/show/4912