网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月22日漏签0天
unity3d吧 关注:116,407贴子:560,819
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 0回复贴,共1页
<<返回unity3d吧
>0< 加载中...

【求助】控制摄像机浏览模型的问题

  • 只看楼主
  • 收藏

  • 回复
  • liouzheng517
  • Material
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
小弟苦逼学生一枚,老师布置了任务,做不下去了,。。。
要求是:
鼠标控制摄像机自由浏览模型。拖住左键自由旋转视角,拖住右键移动摄像机画面,中键控制视距,下面是我改的脚本。
希望改进成:拖住右键移动摄像机画面后,再拖住左键旋转视角,旋转中心依然在屏幕中心,而不是模型的中心。我的QQ是297388918,小弟初学者,要是哪位大神有空指点下就好了,可以小偿
using UnityEngine;
using System.Collections;
public class Guan9 : MonoBehaviour
{
//摄像机参照的模型
public Transform target;
//旋转中心参照物
//public Transform Cz;
//摄像机距离默认的距离
public float normalDistance=200.0f;
//鼠标X轴、Y轴移动的角度
float x;
float y;
//鼠标X轴,y轴移动的距离
float xd;
float yd;
private Vector3 pd;
//限制旋转角度的最小值与最大值,yMinLimint是从底部看,yMaxLimit是从上方看
float yMinLimit = 0.0f;
float yMaxLimit = 90.0f;
//X、Y轴移动速度
float xSpeed = 250.0f;
float ySpeed = 120.0f;
public float MouseWheelSensitivity=100.0f;
public float MouseZoomMin=200.0f;
public float MouseZoomMax=800.0f;
void Start ()
{
//初始化X、Y轴角度等于参照模型的角度
Vector2 angles = transform.eulerAngles;
//模型的位置存储在旋转中心参照物上
//Cz.position = target.position;
x = angles.y;
y = angles.x;
//鼠标右键移动视窗的初始变量值
xd = 0.0f;
yd = 0.0f;
if (rigidbody)
rigidbody.freezeRotation = true;
}
void LateUpdate ()
{
if (target)
{
//中键控制视距
if (Input.GetAxis ("Mouse ScrollWheel") != 0)
{
//Debug.Log(Input.GetAxis("Mouse ScrollWheel"));
//Debug.Log(normalDistance);
if (normalDistance >= MouseZoomMin && normalDistance <= MouseZoomMax) {
normalDistance -= Input.GetAxis ("Mouse ScrollWheel") * MouseWheelSensitivity;
}
if (normalDistance < MouseZoomMin) {
normalDistance = MouseZoomMin;
}
if (normalDistance > MouseZoomMax)
{
normalDistance = MouseZoomMax;}
}
//自由浏览模型改变视角
if (Input.GetMouseButton (0))
{
//根据鼠标移动修改相机的角度
x += Input.GetAxis ("Mouse X") * xSpeed * 0.02f;
y -= Input.GetAxis ("Mouse Y") * ySpeed * 0.02f;
y = ClampAngle (y, yMinLimit, yMaxLimit);
}
//右键拖动相机窗口
if (Input.GetMouseButton (1))
{
//根据鼠标移动修改相机的位置
xd += Input.GetAxis ("Mouse X") * xSpeed * 0.01f;
yd += Input.GetAxis ("Mouse Y") * ySpeed * 0.01f;
pd =new Vector3(xd, yd, 0.0f);
}
Quaternion rotation = Quaternion.Euler (y, x, 0);
Vector3 position = rotation * new Vector3 (0.0f, 0.0f, -normalDistance) + target.position;
//设置模型的位置与旋转
transform.rotation = rotation;
transform.position = position;
//右键移动相机窗口的距离
transform.Translate(pd,Space.Self);
//transform.LookAt(target.transform.Translate(pd,Camera.main.transform));
}
}
float ClampAngle (float angle , float min , float max)
{
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp (angle, min, max);
}
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回unity3d吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示