using UnityEngine;
using System.Collections;
public class RotateArrowScript : MonoBehaviour {
/// <summary>
/// Put this on guiTexture (GameObject) and set Transform node to (t000,r000,s001);
/// </summary>
static public bool DownArrowObject=false;
public Texture2D tex;// Texture manipulator
float angle;//
public GameObject RotateArrow;// Rotate object
public GameObject mainCam;// Main Camera
public float rSpeed=0.01f;// speed of rotate
float iniAngle=0;// Initial angle of GUI
Rect mainRect = new Rect(680,50,100,100); //Main rectangle of all GUI
Vector3 centerOfGUI;//center point of GUI
Vector3 centerRotateOfGUI;//center point of Rotate
Vector3 defferenseVector;
float vert;//Vertical sign
float goriz;//Horizontal sign
void Start(){
mainCam=GameObject.Find("Main Camera") as GameObject;
guiTexture.pixelInset=new Rect(mainRect.x,Screen.height-mainRect.y-mainRect.height,mainRect.width,mainRect.height);//Position of GUITexture
centerOfGUI=new Vector3(mainRect.x+mainRect.width/2,Screen.height-mainRect.y-mainRect.height+mainRect.height/2,1);
centerRotateOfGUI=new Vector2(mainRect.x+mainRect.width/2,mainRect.y+mainRect.height/2);
}
////////////////////////////////////////////////
/// Deactivate Camera
////////////////////////////////////////////////
void OnMouseDown(){
DownArrowObject=true;
}
void OnMouseUp(){
DownArrowObject=false;
mainCam.SendMessage("RenderToTexture");
angle=0;
}
//////////////////////////////////////////////////
void OnMouseDrag(){
defferenseVector = Input.mousePosition-centerOfGUI;
vert=Mathf.Clamp(defferenseVector.y,-1,1);// get sign
goriz=Mathf.Clamp(defferenseVector.x,-1,1);
angle=(Input.GetAxis("Mouse Drag X")*vert+(-Input.GetAxis("Mouse Drag Y"))*goriz)*rSpeed;
RotateArrow.transform.Rotate(0,angle,0);
}
void OnGUI(){
Matrix4x4 iniMatrix=GUI.matrix;
iniAngle+=angle;
GUIUtility.RotateAroundPivot(iniAngle,centerRotateOfGUI);//Change GUI matrix
GUI.DrawTexture(mainRect,tex);
///There restore the initial GUI.matrix for future elements from iniMatrix;
GUI.matrix=iniMatrix;
}
}
using UnityEngine;
using System.Collections;
public class RotateArrowScript : MonoBehaviour {
/// <summary>
/// Put this on guiTexture (GameObject) and set Transform node to (t000,r000,s001);
/// </summary>
static public bool DownArrowObject=false;
public Texture2D tex;// Texture manipulator
float angle;//
public GameObject RotateArrow;// Rotate object
public GameObject mainCam;// Main Camera
public float rSpeed=0.01f;// speed of rotate
float iniAngle=0;// Initial angle of GUI
Rect mainRect;
Vector3 centerOfGUI;//center point of GUI
Vector3 centerRotateOfGUI;//center point of Rotate
Vector3 defferenseVector;
float vert;//Vertical sign
float goriz;//Horizontal sign
void Start(){
mainCam=GameObject.Find("Main Camera") as GameObject;
mainRect = guiTexture.pixelInset; mainRect.y = Screen.height - mainRect.y-mainRect.height;
centerOfGUI=new Vector3(mainRect.x+mainRect.width/2,Screen.height-mainRect.y+mainRect.height/2,1);
centerRotateOfGUI=new Vector2(mainRect.x+mainRect.width/2,mainRect.y+mainRect.height/2);
}
////////////////////////////////////////////////
/// Deactivate Camera
////////////////////////////////////////////////
void OnMouseDown(){
DownArrowObject=true;
}
void OnMouseUp(){
DownArrowObject=false;
angle=0;
}
//////////////////////////////////////////////////
void OnMouseDrag(){
defferenseVector = Input.mousePosition-centerOfGUI;
vert=Mathf.Clamp(defferenseVector.y,-1,1);// get sign
goriz=Mathf.Clamp(defferenseVector.x,-1,1);
angle=(Input.GetAxis("Mouse X")*vert+(-Input.GetAxis("Mouse Y"))*goriz)*rSpeed;
}
void OnGUI(){
Matrix4x4 iniMatrix=GUI.matrix;
iniAngle+=angle;
GUIUtility.RotateAroundPivot(iniAngle,centerRotateOfGUI);//Change GUI matrix
GUI.DrawTexture(mainRect,tex);
RotateArrow.transform.Rotate(0,0,angle);
///There restore the initial GUI.matrix for future elements from iniMatrix;
GUI.matrix=iniMatrix;
}
}
using UnityEngine;
using System.Collections;
public class RotateArrowScript : MonoBehaviour {
/// <summary>
/// Put this on guiTexture (GameObject) and set Transform node to (t000,r000,s001);
/// </summary>
static public bool DownArrowObject=false;
public Texture2D tex;// Texture manipulator
float angle;//
public GameObject RotateArrow;// Rotate object
public GameObject mainCam;// Main Camera
public float rSpeed=0.01f;// speed of rotate
float iniAngle=0;// Initial angle of GUI
Rect mainRect = new Rect(680,50,74,74); //Main rectangle of all GUI
Vector3 centerOfGUI;//center point of GUI
Vector3 centerRotateOfGUI;//center point of Rotate
Vector3 defferenseVector;
float vert;//Vertical sign
float goriz;//Horizontal sign
static public bool reset = false;
bool clicked = false;
float lastClickedTime = 0.0f;
Quaternion resetRot;
void Start(){
mainCam=GameObject.Find("Main Camera") as GameObject;
mainRect = guiTexture.pixelInset; mainRect.y = Screen.height - mainRect.y-mainRect.height;
centerOfGUI=new Vector3(mainRect.x+mainRect.width/2,Screen.height-mainRect.y+mainRect.height/2,1);
centerRotateOfGUI=new Vector2(mainRect.x+mainRect.width/2,mainRect.y+mainRect.height/2);
resetRot = RotateArrow.transform.rotation;
}
public static void DoubleClick()
{
if (DownArrowObject) reset = true;
}
////////////////////////////////////////////////
/// Deactivate Camera
////////////////////////////////////////////////
void OnMouseDown(){
DownArrowObject=true;
if(clicked)
{
if (Time.time - lastClickedTime > 0.5f)
{
//too long, so set this as a first click
clicked = true;
lastClickedTime = Time.time;
}
else
{
//it was a double click!
clicked = false;
lastClickedTime = 0.0f;
DoubleClick();
}
}
else
{
clicked = true;
lastClickedTime = Time.time;
}
}
void OnMouseUp(){
DownArrowObject=false;
angle=0;
}
//////////////////////////////////////////////////
void OnMouseDrag(){
defferenseVector = Input.mousePosition-centerOfGUI;
vert=Mathf.Clamp(defferenseVector.y,-1,1);// get sign
goriz=Mathf.Clamp(defferenseVector.x,-1,1);
angle=(Input.GetAxis("Mouse X")*vert+(-Input.GetAxis("Mouse Y"))*goriz)*rSpeed;
}
void OnGUI(){
Matrix4x4 iniMatrix=GUI.matrix;
if (!reset)
{
iniAngle+=angle;
GUIUtility.RotateAroundPivot(iniAngle,centerRotateOfGUI);//Change GUI matrix
GUI.DrawTexture(mainRect,tex);
RotateArrow.transform.Rotate(0,0,angle);
///There restore the initial GUI.matrix for future elements from iniMatrix;
GUI.matrix=iniMatrix;
return;
}
iniAngle=0;
GUIUtility.RotateAroundPivot(0,centerRotateOfGUI);//Change GUI matrix
GUI.DrawTexture(mainRect,tex);
GUI.matrix=iniMatrix;
RotateArrow.transform.rotation = resetRot;
reset = false;
}
}
Вернуться в Исходники (Копилка)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1