您的位置:首页 > 移动开发 > Unity3D

雨谈老师塔防摄像头移动归位 围绕选定对象旋转

2015-09-01 14:52 465 查看
using UnityEngine;

using System.Collections;

public class CameraContorl : MonoBehaviour {
public float minFov=15.0f;
public float maxFov=150.0f;
public float sensitivity = 10f;
private Transform target_transform=null;
// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

//检测鼠标左键是否按下 没down  down只一次
bool press_left= Input.GetMouseButton (0);
//检测鼠标右键键是否按下
bool press_right = Input.GetMouseButton (1);
//检测鼠标中轮是否按下
bool ScrollWheel= Input.GetMouseButton (2);
//检测Alt是否按下
bool alt = Input.GetKey (KeyCode.LeftAlt);

//获得鼠标在水平、垂直方向的移动距离
float mx = Input.GetAxis ("Mouse X");
float my = Input.GetAxis ("Mouse Y");
//按住鼠标滚轮调整角度
if(ScrollWheel){
transform.Rotate(my*2.0f,mx*2.0f,0);

}
//alt+左键按下移动场景
if(press_left & alt ){
transform.Translate(-mx*5.0f,0,-my*5.0f);

}

//alt+右键按下摄像机按Y轴移动
if(press_right & alt  ){
transform.Translate(0,-my*5.0f,0);

}

//拉近拉远效果
//Input.GetAxis("Mouse ScrollWheel")----鼠标转轮滚动距离

float fov = Camera.main.fieldOfView;  
fov += Input.GetAxis("Mouse ScrollWheel") * sensitivity; 
fov = Mathf.Clamp(fov, minFov, maxFov); 
Camera.main.fieldOfView = fov;  

//归位设置摄像机
if(Input.GetKeyDown (KeyCode.H)){
//test场景摄像机,步冲突。
if(gameObject.name=="test_camer"){return;}
//切换相机
if(Camera.main.depth==1){
//实现跟随效果
Camera.main.depth=-1;
Camera.main.fieldOfView = 77.0f;
Camera.main.transform.localPosition= new Vector3(-0.528f,3.2393f,-4.507f);
Camera.main.transform.localEulerAngles=new Vector3(11.723f,1.8464f,359f); 
}else{
//实现远离主角效果
Camera.main.depth=1;
Camera.main.fieldOfView = 77.0f;
Camera.main.transform.position= new Vector3(229.082f,47.7411f,42.4572f);
Camera.main.transform.eulerAngles=new Vector3(11.7237f,359.0f,359.0f); 
}

}
//让摄像机围绕选定对象旋转
if(Input.GetKey(KeyCode.A) & press_left){

Vector3 mouse_posion=Input.mousePosition;
Ray rayObj = Camera.main.ScreenPointToRay(mouse_posion);  
   RaycastHit hitObj;  
if (Physics.Raycast(rayObj, out hitObj))  
         {  
               if(hitObj.collider.gameObject.tag=="terrain"){
//Debug.Log("射线得到的对象名称:" + hitObj.collider.name);   
target_transform = null;  }else{target_transform=hitObj.transform;}

             }  
if (target_transform != null)  
    {  
   //Debug.Log("射线取得对象");   
   //float mousX = Input.GetAxis("Mouse X") * 2.0f;//得到鼠标移动距离   
       //旋转选定的对象
//target_transform.transform.Rotate(new Vector3(0, -mousX, 0));
transform.RotateAround (target_transform.transform.position, Vector3.up, 20 * Time.deltaTime);
 
}else{  
//transform.RotateAround (mouse_posion, Vector3.up, 20 * Time.deltaTime);

        Debug.Log("无法取得对象,请选择物体!");  
     }

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d