project dev journal 02

Ive been doing some research on the internet for some unity tutorials and coding in unity. I’m not a CS student so I have to do a lot of research and go through a learning process.

The prototype we decided for my project is to make a scene open as an application on iphone. The aim is to find out about this process, how to create the logo on iphone, and such technical stuff that might pop as problems in further development. thats why we decided that me learning these at the beginning is for the best. Design decisions will be dealt with on the second term, after the prototype is done with.

Unity builds and compiles for iphone, as long as it doesn’t have compiling errors. the second thing to do is to be a liscensed developer in the apple community. this is a must due to testing. without this liscense I’m unable to test the prototype on iphone. Lucky me, at least I have an iphone 8).Mr. Ertan (our course instructor) talked about the possibility of the school purchasing the dev liscense for me. also, another faculty member have been trying to enlist on education program of apple which lets students of the listed school to enroll as a developer for free.

So far I got familiar with the unity interface and created some test scenes. the biggest problem is to make the camera rotate around the scene in simulation mode so I’ve looked up some codes and came up with a camera system which moves similar to maya’s and unity’s perspective cameras. with some tweaks and changes I got it to work as the way I wanted. the downside is that this camera works only on mac. I have to find a new script which would let a touch manipulate the the camera view. so far no results.

Camera script:

using UnityEngine;
using System.Collections;

[AddComponentMenu(“Camera-Control/3dsMax Camera Style”)]
public class maxCamera : MonoBehaviour
{
public Transform target;
public Vector3 targetOffset;
public float distance = 5.0f;
public float maxDistance = 20;
public float minDistance = .6f;
public float xSpeed = 200.0f;
public float ySpeed = 200.0f;
public int yMinLimit = -80;
public int yMaxLimit = 80;
public int zoomRate = 40;
public float panSpeed = 0.3f;
public float zoomDampening = 5.0f;

private float xDeg = 0.0f;
private float yDeg = 0.0f;
private float currentDistance;
private float desiredDistance;
private Quaternion currentRotation;
private Quaternion desiredRotation;
private Quaternion rotation;
private Vector3 position;

void Start() { Init(); }
void OnEnable() { Init(); }

public void Init()
{
//If there is no target, create a temporary target at ‘distance’ from the cameras current viewpoint
if (!target)
{
GameObject go = new GameObject(“Cam Target”);
go.transform.position = transform.position + (transform.forward * distance);
target = go.transform;
}

distance = Vector3.Distance(transform.position, target.position);
currentDistance = distance;
desiredDistance = distance;

//be sure to grab the current rotations as starting points.
position = transform.position;
rotation = transform.rotation;
currentRotation = transform.rotation;
desiredRotation = transform.rotation;

xDeg = Vector3.Angle(Vector3.right, transform.right );
yDeg = Vector3.Angle(Vector3.up, transform.up );
}

/*
* Camera logic on LateUpdate to only update after all character movement logic has been handled.
*/
void LateUpdate()
{
// If Control and Alt and Middle button? ZOOM!
if (Input.GetMouseButton(0) && Input.GetKey(KeyCode.LeftAlt) && Input.GetKey(KeyCode.LeftControl))
{
desiredDistance -= Input.GetAxis(“Mouse Y”) * Time.deltaTime * zoomRate*0.125f * Mathf.Abs(desiredDistance);
}
// If middle mouse and left alt are selected? ORBIT
else if (Input.GetMouseButton(0) && Input.GetKey(KeyCode.LeftAlt))
{
xDeg += Input.GetAxis(“Mouse X”) * xSpeed * 0.02f;
yDeg -= Input.GetAxis(“Mouse Y”) * ySpeed * 0.02f;

////////OrbitAngle

//Clamp the vertical axis for the orbit
yDeg = ClampAngle(yDeg, yMinLimit, yMaxLimit);
// set camera rotation
desiredRotation = Quaternion.Euler(yDeg, xDeg, 0);
currentRotation = transform.rotation;

rotation = Quaternion.Lerp(currentRotation, desiredRotation, Time.deltaTime * zoomDampening);
transform.rotation = rotation;
}
// otherwise if middle mouse is selected, we pan by way of transforming the target in screenspace
else if (Input.GetMouseButton(0))
{
//grab the rotation of the camera so we can move in a psuedo local XY space
target.rotation = transform.rotation;
target.Translate(Vector3.right * -Input.GetAxis(“Mouse X”) * panSpeed);
target.Translate(transform.up * -Input.GetAxis(“Mouse Y”) * panSpeed, Space.World);
}

////////Orbit Position

// affect the desired Zoom distance if we roll the scrollwheel
desiredDistance -= Input.GetAxis(“Mouse ScrollWheel”) * Time.deltaTime * zoomRate * Mathf.Abs(desiredDistance);
//clamp the zoom min/max
desiredDistance = Mathf.Clamp(desiredDistance, minDistance, maxDistance);
// For smoothing of the zoom, lerp distance
currentDistance = Mathf.Lerp(currentDistance, desiredDistance, Time.deltaTime * zoomDampening);

// calculate position based on the new currentDistance
position = target.position – (rotation * Vector3.forward * currentDistance + targetOffset);
transform.position = position;
}

private static float ClampAngle(float angle, float min, float max)
{
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp(angle, min, max);
}
}

http://answers.unity3d.com/questions/23482/unity3d-or-maya-style-camera-navigation

kudos to skovacs1

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: