вторник, 8 мая 2012 г.

четверг, 19 апреля 2012 г.

Свободная камера


#pragma strict
var lookSpeed = 15.0;
var moveSpeed = 15.0;

var rotationX = 0.0;
var rotationY = 0.0;

function Update ()
{
    rotationX += Input.GetAxis("Mouse X")*lookSpeed;
    rotationY += Input.GetAxis("Mouse Y")*lookSpeed;
    rotationY = Mathf.Clamp (rotationY, -90, 90);
    
    transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up);
    transform.localRotation *= Quaternion.AngleAxis(rotationY, Vector3.left);
    
    transform.position += transform.forward*moveSpeed*Input.GetAxis("Vertical");
    transform.position += transform.right*moveSpeed*Input.GetAxis("Horizontal");
}

Прицел

Как получить объект в прицеле


Ray ray = camera.ScreenPointToRay(new Vector3(camera.GetScreenWidth()/2  ,camera.GetScreenHeight()/2, 0.0f));
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
Vector3 meshPos = camera.WorldToScreenPoint (hit.transform.position);
GUI.DrawTexture(new Rect(meshPos.x-25 ,camera.GetScreenHeight()-meshPos.y-25 ,50,50), texture, ScaleMode.ScaleToFit, true);
}

Как показать объект через объект (Без шейдерно)

Для этого нужно 2-ве камеры

Первая будет показывать весь мир, вторая только объекты скрытые.

На объекте проверяем рейкаст в камеру.


// Update is called once per frame
void Update () {
Ray ray = new Ray(Camera.main.transform.position, this.transform.position - Camera.main.transform.position);
//Debug.DrawLine (ray.origin, ray.direction, Color.red);   
Debug.DrawRay(Camera.main.transform.position, this.transform.position - Camera.main.transform.position, Color.yellow);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.transform!=this.transform && hit.transform!=this.transform.parent)
{
//Debug.Log("Hit Name:" + hit.transform.name);
this.transform.renderer.enabled = true;
}
else
{
this.transform.renderer.enabled = false;
}
}
else
{
this.transform.renderer.enabled = false;
}
}

 Как подписать объект

Как подписать объект в 3Д пространстве


public Texture2D texture;
public Transform target;
public Camera camera;

public void OnGUI()
{
Vector3 screenPos = camera.WorldToScreenPoint (target.position);
if (screenPos.z > 0)
{
GUI.DrawTexture(new Rect(screenPos.x-25 ,camera.GetScreenHeight()-screenPos.y-25 ,50,50), texture,ScaleMode.ScaleToFit,true);
GUIStyle s = new GUIStyle();
s.alignment = TextAnchor.UpperCenter;
GUI.Label(new Rect(screenPos.x-50 ,camera.GetScreenHeight()-screenPos.y-30, 100,25), "Sphere1",s );
}
}