- Home /
3D Object Doesn't Show Up In Safari Web Player
We built a web player of our project and it works great in IE and Firefox on PC and Firefox on Mac but will not run properly in Safari! It loads and the interface we designed comes up but the 3d object doesn't show. Any ideas what could cause this?
Any takers on this? As per Unity's suggestion, we've separated our "interface" script and "camera" script but the 3d object still does not load in Safari. Any ideas?
Safari's always sucked for me when it comes to the webplayer.
I should also note that the initial load in firefox on mac does the same thing...no 3d object. But reloading it works fine. But still nothing in Safari. $$anonymous$$ust be a bug no?
Answer by krivel · Jul 12, 2011 at 02:59 PM
Bump...posting the code for our camera. Something in here I'm thinking isn't working. We tried a try-catch scenario and get no errors. Any takers?
//CAMERA SETTINGS var target : Transform; //What to rotate around var interfaceGameObject : GameObject; // 07-05-2011 RMG: New
//Standard Settings
private var camDistance : float = 15.0; //# //17
private var offsetCircleX : float = 0.2; //# private var offsetCircleY : float = 1.0; //#
private var startAngleX : float = 122.5 + 180; //# private var startAngleY : float = 91.9; //#
private var angleMin : float = 45.0; //# private var angleMax : float = 92.0; //#
private var angleX : float = 0.0; private var angleY : float = 0.0;
private var xSpeed : float = 45.0; //X sensitivity //# private var ySpeed : float = 45.0; //Y sensitivity //#
private var speedDecay: float = 0.97; //#
private var xMouse : float = 0.0; //X rotation private var yMouse : float = 0.0; //Y rotation
private var xMousePin : float = 0.0; private var yMousePin : float = 0.0;
private var velX : float = 0.0; //X Velocity private var velY : float = 0.0; //Y Velocity
private var useVelocityLimits : boolean = true; private var velXMax : float = 30.0; private var velYMax : float = 30.0;
//HD SETTINGS /* private var camDistance : float = 14.5;
private var offsetCircleX : float = -0.2; private var offsetCircleY : float = 1.25;
private var startAngleX : float = 122.5 + 180; private var startAngleY : float = 91.9;
private var angleMin : float = 45.0; private var angleMax : float = 92.0;
private var angleX : float = 0.0; private var angleY : float = 0.0;
private var xSpeed : float = 45.0; //X sensitivity private var ySpeed : float = 45.0; //Y sensitivity
private var speedDecay: float = 0.98;
private var xMouse : float = 0.0; //X rotation private var yMouse : float = 0.0; //Y rotation
private var xMousePin : float = 0.0; private var yMousePin : float = 0.0;
private var velX : float = 0.0; //X Velocity private var velY : float = 0.0; //Y Velocity
private var useVelocityLimits : boolean = true; private var velXMax : float = 30.0; private var velYMax : float = 30.0; */
private var quarterScreen : float = parseFloat(4)/parseFloat(Screen.width); private var interfaceComponent : Interface = null; // 07-05-2011 RMG: New private var screenAspectRatio : float; // 07-05-2011 RMG: New private var screenRes : Vector2; // 07-05-2011 RMG: Screen resolution at startup
function Start(){
// 07-05-2011 RMG: Save our screen resolution. If this changes, we need to initialize again. screenRes = new Vector2(Screen.width, Screen.height); Initialize();
// 07-05-2011 RMG: If an interface game object exists, find it's Interface component. if (interfaceGameObject != null) { interfaceComponent = interfaceGameObject.GetComponent("Interface"); } //Set Initial Camera Angle angleX = startAngleX; angleY = startAngleY;
UpdateCameraPosition(); }
function LateUpdate() {
var mousePos = Input.mousePosition;
if(Input.GetMouseButtonUp(0)) { //Released mouse button velX = mousePos.x - xMousePin; velY = mousePos.y - yMousePin;
//Check for limits if (useVelocityLimits) { if (velX > velXMax) velX = velXMax;
if (velX < (velXMax -1)) velX = velXMax -1;
if (velY > velYMax) velY = velYMax;
if (velY < (velYMax -1)) velY = velYMax -1; } }
if (Input.GetMouseButtonDown(0)) { //Pushed mouse button xMousePin = mousePos.x; yMousePin = mousePos.y;
// 07-05-2011 RMG: If an interface component exists, call OnMouseClicked. if (interfaceComponent != null) interfaceComponent.OnMouseClicked(Input.mousePosit ion);
} else if(Input.GetMouseButton(0)) { //Mouse button is down xMouse = mousePos.x - xMousePin; yMouse = mousePos.y - yMousePin;
//Check for limits if (useVelocityLimits) { if (xMouse > velXMax) xMouse = velXMax;
if (xMouse < (velXMax -1)) xMouse = velXMax -1;
if (yMouse > velYMax) yMouse = velYMax;
if (yMouse < (velYMax -1)) yMouse = velYMax -1; }
xMousePin = mousePos.x; yMousePin = mousePos.y;
} else { //Handle Velocity xMouse = velX; yMouse = velY;
if (velX != 0.0) velX = velX speedDecay; if (velY != 0.0) velY = velY speedDecay;
if (velX < 0.01 && velX > -0.01) velX = 0.0; if (velY < 0.01 && velY > -0.01) velY = 0.0;
}
UpdateCameraPosition(); }
function Update () { // 07-05-2011 RMG: If screen resolution changes, call Initialize() if (screenRes.x != Screen.width || screenRes.y != Screen.height) { screenRes = new Vector2(Screen.width, Screen.height); Initialize(); } }
function Initialize() { if (Screen.width >= 1200) { camDistance = 14.5; offsetCircleX = -0.2; offsetCircleY = 1.25; speedDecay = 0.98; } else { camDistance = 15.0; offsetCircleX = 0.2; offsetCircleY = 1.0; speedDecay = 0.97; } screenAspectRatio = Screen.width / Screen.height; }
function UpdateCameraPosition(){
var cam = Camera.main; if (cam == null){ print("! Need to tag a camera as Main Camera !"); return; }
angleX += xMouse screenAspectRatio quarterScreen xSpeed; angleY += yMouse screenAspectRatio quarterScreen ySpeed;
//Check angle limits if (angleY < angleMin){ angleY = angleMin; velY = 0; } else if (angleY > angleMax){ angleY = angleMax; velY = 0; } if (angleX > 360){ angleX -= 360; } else if (angleX < 0){ angleX += 360; }
//print(angleX + " : " + angleY);
//Get position around object using polar coordinates var x:float = camDistance Mathf.Cos(Mathf.Deg2Rad angleX) Mathf.Sin(Mathf.Deg2Rad angleY); var y:float = camDistance Mathf.Cos(Mathf.Deg2Rad angleY); var z:float = -camDistance Mathf.Sin(Mathf.Deg2Rad angleX) Mathf.Sin(Mathf.Deg2Rad angleY);
//Offset from target if (target){ x += target.position.x; y += target.position.y; z += target.position.z; }
//Offset ring x += (Mathf.Cos(Mathf.Deg2Rad angleX) offsetCircleX); z += (Mathf.Sin(Mathf.Deg2Rad angleX) offsetCircleY) * -1;
//Position camera; cam.transform.position = Vector3(x, y, z);
//Rotate camera to face object cam.transform.rotation.eulerAngles = Vector3((angleY-90)*-1, angleX-90, 0);
}
Editing your answer would suffice. Formatting the code properly would have been ideal.
You should not add an answer to bump your question, that makes it look more already-answered. Ins$$anonymous$$d, edit your original question. That bumps it on the Questions list too.
If you meant to comment on my answer,
private var quarterScreen : float = parseFloat(4)/parseFloat(Screen.width);
That is wrong.
Yeah sorry...did that by mistake..still getting used to the format here. But HUGE thanks for pointing that out. Been driving us nuts!! Its fixed now! I owe you a round some day so maybe at a future Unity event or something :-)
I'd be happiest if you could tidy up this Q&A such that others could benefit. I've cleaned up the Answer.
Answer by Dreamora · Jul 01, 2011 at 02:38 AM
Are you using the page as generated by unity or did you toy with the html? Also is the connection to the server fast enough? (the reload fixes it note on firefox implies that it might not run all as round as it would need to)
Answer by krivel · Jul 01, 2011 at 02:57 AM
No I didn't mess with the html. Connection server is fast. Works flawlessly on IE, firefox and chrome from any pc.
Answer by Waz · Jul 12, 2011 at 03:10 PM
Your code relies on the initial value of Screen.width and/or Screen.height:
private var quarterScreen = 4.0 / Screen.width;
...
That is bad, since these change dynamically as the WebPlayer is loaded and resized. You need to track and adapt to changes in these values, or at the very least hard-code in your final assumed size. So:
function Update()
{
quarterScreen = 4.0 / Screen.width;
...
The reason you see different results in different browsers is that they each resize plugins in their own unspecified ways. Safari's way happens to hit your bug, but that's not Safari's fault.
Your answer
Follow this Question
Related Questions
Mac/Safari Mouse Input Bug? 0 Answers
Different webplayer behaviour on safari on mac 2 Answers
Web player with Mac OSx not open a new window 0 Answers
unity wont appear as installed on mac 0 Answers