Unity 的旋转 与 行走

本文介绍如何在Unity中实现摄像机围绕指定目标物体旋转的功能,包括使用鼠标和触摸屏控制旋转方向,适用于桌面和移动设备。代码示例展示了如何响应用户输入并调整摄像机角度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//1 Unity让摄像机沿着一个目标物体旋转

public GameObject model;//让摄像机沿着这个目标物体旋转的 “目标物体”
public Camera myCamera;//摄像机
Vector2 first = Vector2.zero;//记录鼠标点击的初始位置
Vector2 second = Vector2.zero;//记录鼠标移动时的位置
bool directorToLeft =false;
bool directorToRight =false;
bool directorToUp =false;
bool directorToDown =false;
bool isdragging =false;//标记是否鼠标在滑动
// Use this for initialization
void Start () {

}
   // Update is called once per frame      
void Update () {
    if (Input.GetMouseButton(0))
    {
        Ray ray =myCamera.ScreenPointToRay (Input.mousePosition);
        RaycastHit hit ;
        if (Physics.Raycast (ray,out hit))
        {
            //print(hit.collider.gameObject.name);                    
            if (hit.collider.gameObject.tag == "BgCylinder" && isdragging ==true)
            {
                Vector3 newPosition = Vector3.zero;
                float speed = 0;
                if (directorToLeft == true)
                {
                    newPosition = new Vector3(0, -1, 0);
                    speed = 10;
                    print("left");
                }
                if (directorToRight == true)
                {
                    speed = 10;
                    newPosition = new Vector3(0, 1, 0);
                    print("right");
                }
                if (directorToUp == true)
                {
                    speed = 15;
                    newPosition = new Vector3(1, 0, 0);
                    print("up");
                }
                if (directorToDown == true)
                {
                    speed = 10;
                    newPosition = new Vector3(-1, 0, 0);
                    print("down");
                }
                transform.RotateAround (model.transform.localPosition, newPosition, speed * Time.deltaTime);//一个物体围绕另一个物体旋转
                
                    //transform.Rotate(-newPosition, speed * 2f );//一个物体朝“上下左右”旋转
               
                //transform.Rotate(-newPosition, speed * Time.deltaTime*20f);//一个物体朝“上下左右”旋转
            }
        }
    }
}
void OnGUI() {
    if (Event.current.type == EventType.MouseDown){
        //记录鼠标按下的位置               
        first = Event.current.mousePosition ;
    }
    isdragging =false;
    if (Event.current.type == EventType.MouseDrag){//记录鼠标拖动的位置               
        isdragging =true;
        second = Event.current.mousePosition ;
        Vector2 slideDirection = second - first;
        float x = slideDirection.x,
            y = slideDirection.y;
        if (y < x && y > -x)
        {// right                     
            directorToLeft = false;
            directorToRight = true;
            directorToUp = false;
            directorToDown = false;
        }
        else if (y > x && y < -x)
        {// left                     
            directorToLeft = true;
            directorToRight = false;
            directorToUp = false;
            directorToDown = false;
        }
        else if (y > x && y > -x)
        {// up                     
            directorToLeft = false;
            directorToRight = false;
            directorToUp = true;
            directorToDown = false;
        }
        else
        {// down                      
            directorToLeft = false;
            directorToRight = false;
            directorToUp = false;
            directorToDown = true;
        }
    }
}

//【unity】Unity 手指滑动让物体旋转

private Vector3 startFingerPos;
private Vector3 nowFingerPos;
private float xMoveDistance;
private float yMoveDistance;
private int backValue = 0;
public GameObject my_Cube;

public void JudgeFinger ()
{
//没有触摸
if (Input.touchCount <= 0) {
return;
}

	if (Input.GetTouch (0).phase == TouchPhase.Began ) {

		//Debug.Log("======开始触摸=====");

		startFingerPos = Input.GetTouch (0).position;


	}

	nowFingerPos = Input.GetTouch (0).position;

	if ((Input.GetTouch (0).phase == TouchPhase.Stationary) || (Input.GetTouch(0).phase == TouchPhase.Ended)) {

		startFingerPos = nowFingerPos;
		//Debug.Log("======释放触摸=====");
		return;
	}
	//			if (Input.GetTouch(0).phase == TouchPhase.Ended) {
	//				
	//			}
	if (startFingerPos == nowFingerPos) {
		return;
	}
	xMoveDistance = Mathf.Abs (nowFingerPos.x - startFingerPos.x);

	yMoveDistance = Mathf.Abs (nowFingerPos.y - startFingerPos.y);

	if (xMoveDistance > yMoveDistance) {

		if (nowFingerPos.x - startFingerPos.x > 0) {

			//Debug.Log("=======沿着X轴负方向移动=====");

			backValue = -1; //沿着X轴负方向移动

		} else {

			//Debug.Log("=======沿着X轴正方向移动=====");

			backValue = 1; //沿着X轴正方向移动

		}

	} else {

		if (nowFingerPos.y - startFingerPos.y > 0) {

			//Debug.Log("=======沿着Y轴正方向移动=====");

			backValue = 2; //沿着Y轴正方向移动

		} else {

			//Debug.Log("=======沿着Y轴负方向移动=====");

			backValue = -2; //沿着Y轴负方向移动

		}

	}
	if (backValue == -1) {
		my_Cube.transform.Rotate (Vector3.back * Time.deltaTime * 300, Space.World);   
		my_Color.transform.Rotate (Vector3.back * Time.deltaTime * 300, Space.World);   
	} else if (backValue == 1) {
		my_Cube.transform.Rotate (Vector3.back * -1 * Time.deltaTime * 300, Space.World); 
		my_Color.transform.Rotate (Vector3.back * -1 * Time.deltaTime * 300, Space.World);   
	} 
	//		else if (backValue == 2) {
	//			my_Cube.transform.Rotate(Vector3.right  * Time.deltaTime * 200 , Space.World); 
	//		} else if (backValue == -2) {
	//			my_Cube.transform.Rotate(Vector3.right  * -1  * Time.deltaTime * 200 , Space.World); 
	//		}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值