unity3D物体的旋转和缩放
2014-08-14 11:40
477 查看
昨天我去看电影了,《泰坦尼克号》,看完我心里有种说不出来的味道~~~~。
呵呵~~~几天没写博客了,这几天学了两天3Dmax,因为网上下载的都是bip和模型,就是没动画,所以我就想把这两个合到一起,学了两天就懂了一点点,哎~~~~ 做了一个简单的展示3D模型的demo,就是旋转和缩放啦,效果做的不是很满意啦,我今天又改了一下,然后和大家分享一下,好了,进入主题吧。
一.旋转:
旋转有很多种函数,我都试了一下,最后我选择了RotateAround函数;
Input.GetAxis("Mouse X")又正左负,Input.GetAxis("Mouse Y")上正下负,这两个函数你可以感受一下,他的大小会随着你的手势(或者鼠标)方向和速度改变的。
用这两个函数就能做出手势控制物体的旋转了,重点:你自己要体验一下Input.GetAxis("Mouse X/Y")的用法,然后就是注意一下旋转方向;
二.缩放:
缩放手势是用两个手指来模拟的,当两手之间的距离越来越大,那就是放大,反之缩小;
放大的方法有两种:
1.物体用localScale来放大物体。不知道为什么我用这种放大得不到我想要的效果;
2.拉近摄像机,这里面可就有一点学问了,我记得我在看OpenGL的时候,上面用铁轨来比喻一个视觉效果,实际当中铁轨是平行的不相交,但是我们视觉上的效果就是铁轨间的距离越来越近,最后相交了。unity3D默认的是相交的效果(camera-->Projection-->perspective),当然也有不想交的效果了(camera-->
Projection-->orthographic),你们试试效果很不一样的。如果你想加入天空盒而且不想随着物体缩放,看到天空背景也移动的话,那就选第二种。我加了天空盒,所以用第二种了,呵呵~~~
[java] view
plaincopyprint?
<p>
</p><pre name="code" class="java" style="background-color: rgb(255, 255, 255); "><pre name="code" class="java">var rotatepos:Transform;//rotatepos是该物体的一个子物体,放到物体的中心地方就行。
var horizontalSpeed : float ;
var verticalSpeed : float ;
var flag:boolean;
var olddis:float=0;
var newdis:float=0;
var child:Transform;
function Start(){
horizontalSpeed=0;
verticalSpeed=0;
flag=true;
}
function Update () {
if(flag){
transform.RotateAround(rotatepos.position,Vector3.up,1);
}
//物体的旋转
if(Input.touchCount==1){
if(Input.GetTouch(0).phase==TouchPhase.Moved){
flag=false;
var h : float=Input.GetAxis("Mouse X");//又正左负
var v : float =Input.GetAxis("Mouse Y");//上正下负
if(Mathf.Abs(h)>=Mathf.Abs(v)){
if(h<0){
horizontalSpeed=6;
transform.RotateAround(rotatepos.position,Vector3.up,horizontalSpeed);
}
if(h>0){
horizontalSpeed=6;
transform.RotateAround(rotatepos.position,-Vector3.up,horizontalSpeed);
}
}
else{
if(v<0){
verticalSpeed=6;
transform.RotateAround(rotatepos.position,-Vector3.right,verticalSpeed);
}
if(v>0){
verticalSpeed=6;
transform.RotateAround(rotatepos.position,Vector3.right,verticalSpeed);
}
}
}
}
//物体的缩放
if(Input.touchCount>1){
flag=false;
if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){
var pos1=Input.GetTouch(0).position;
var pos2=Input.GetTouch(1).position;
newdis=Vector2.Distance(pos1,pos2);
if(olddis!=null){
if(newdis<olddis) {
Camera.main.camera.orthographicSize+=2;
}
if(newdis>olddis) {
Camera.main.camera.orthographicSize-=2;
}
}
olddis=newdis;
}
}
//按返回键退出程序
if(Input.GetKey(KeyCode.Escape)){
Application.Quit();
}
}
</pre>
<p>上面的代码有点局限,不适合所有物体,那么现在我就来改一下吧,让他适合每一种物体哦。</p>
<p></p>
<pre name="code" class="java">var horizontalSpeed:float=0;
var newdis:float=0;
var olddis:float=0;
function Update () {
if(Input.touchCount==1){
if(Input.GetTouch(0).phase==TouchPhase.Moved){
var h : float=Input.GetAxis("Mouse X");//又正左负
if(h<0){
horizontalSpeed=1.5;
transform.Rotate(transform.up*horizontalSpeed);
}
if(h>0){
horizontalSpeed=1.5;
transform.Rotate(-transform.up*horizontalSpeed);
}
}
}
if(Input.touchCount>1){
if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){
var pos1=Input.GetTouch(0).position;
var pos2=Input.GetTouch(1).position;
newdis=Vector2.Distance(pos1,pos2);
if(olddis!=null){
if(newdis<olddis) {
Camera.main.camera.orthographicSize+=0.2;
}
if(newdis>olddis) {
Camera.main.camera.orthographicSize-=0.2;
} if( Camera.main.camera.orthographicSize<0){
Camera.main.camera.orthographicSize=0;
}
if( Camera.main.camera.orthographicSize>10){
Camera.main.camera.orthographicSize=10;
}
}
olddis=newdis;
}
}
//按返回键退出程序
if(Input.GetKey(KeyCode.Escape)){
Application.Quit();
}
}</pre><br>
<br>
<p></p>
<p><br>
</p>
<p><span style="font-size:18px; color:#ff0000">这篇就说到这,下一篇是《让物体有惯性的旋转》~~~~</span></p>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
</pre>
呵呵~~~几天没写博客了,这几天学了两天3Dmax,因为网上下载的都是bip和模型,就是没动画,所以我就想把这两个合到一起,学了两天就懂了一点点,哎~~~~ 做了一个简单的展示3D模型的demo,就是旋转和缩放啦,效果做的不是很满意啦,我今天又改了一下,然后和大家分享一下,好了,进入主题吧。
一.旋转:
旋转有很多种函数,我都试了一下,最后我选择了RotateAround函数;
Input.GetAxis("Mouse X")又正左负,Input.GetAxis("Mouse Y")上正下负,这两个函数你可以感受一下,他的大小会随着你的手势(或者鼠标)方向和速度改变的。
用这两个函数就能做出手势控制物体的旋转了,重点:你自己要体验一下Input.GetAxis("Mouse X/Y")的用法,然后就是注意一下旋转方向;
二.缩放:
缩放手势是用两个手指来模拟的,当两手之间的距离越来越大,那就是放大,反之缩小;
放大的方法有两种:
1.物体用localScale来放大物体。不知道为什么我用这种放大得不到我想要的效果;
2.拉近摄像机,这里面可就有一点学问了,我记得我在看OpenGL的时候,上面用铁轨来比喻一个视觉效果,实际当中铁轨是平行的不相交,但是我们视觉上的效果就是铁轨间的距离越来越近,最后相交了。unity3D默认的是相交的效果(camera-->Projection-->perspective),当然也有不想交的效果了(camera-->
Projection-->orthographic),你们试试效果很不一样的。如果你想加入天空盒而且不想随着物体缩放,看到天空背景也移动的话,那就选第二种。我加了天空盒,所以用第二种了,呵呵~~~
[java] view
plaincopyprint?
<p>
</p><pre name="code" class="java" style="background-color: rgb(255, 255, 255); "><pre name="code" class="java">var rotatepos:Transform;//rotatepos是该物体的一个子物体,放到物体的中心地方就行。
var horizontalSpeed : float ;
var verticalSpeed : float ;
var flag:boolean;
var olddis:float=0;
var newdis:float=0;
var child:Transform;
function Start(){
horizontalSpeed=0;
verticalSpeed=0;
flag=true;
}
function Update () {
if(flag){
transform.RotateAround(rotatepos.position,Vector3.up,1);
}
//物体的旋转
if(Input.touchCount==1){
if(Input.GetTouch(0).phase==TouchPhase.Moved){
flag=false;
var h : float=Input.GetAxis("Mouse X");//又正左负
var v : float =Input.GetAxis("Mouse Y");//上正下负
if(Mathf.Abs(h)>=Mathf.Abs(v)){
if(h<0){
horizontalSpeed=6;
transform.RotateAround(rotatepos.position,Vector3.up,horizontalSpeed);
}
if(h>0){
horizontalSpeed=6;
transform.RotateAround(rotatepos.position,-Vector3.up,horizontalSpeed);
}
}
else{
if(v<0){
verticalSpeed=6;
transform.RotateAround(rotatepos.position,-Vector3.right,verticalSpeed);
}
if(v>0){
verticalSpeed=6;
transform.RotateAround(rotatepos.position,Vector3.right,verticalSpeed);
}
}
}
}
//物体的缩放
if(Input.touchCount>1){
flag=false;
if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){
var pos1=Input.GetTouch(0).position;
var pos2=Input.GetTouch(1).position;
newdis=Vector2.Distance(pos1,pos2);
if(olddis!=null){
if(newdis<olddis) {
Camera.main.camera.orthographicSize+=2;
}
if(newdis>olddis) {
Camera.main.camera.orthographicSize-=2;
}
}
olddis=newdis;
}
}
//按返回键退出程序
if(Input.GetKey(KeyCode.Escape)){
Application.Quit();
}
}
</pre>
<p>上面的代码有点局限,不适合所有物体,那么现在我就来改一下吧,让他适合每一种物体哦。</p>
<p></p>
<pre name="code" class="java">var horizontalSpeed:float=0;
var newdis:float=0;
var olddis:float=0;
function Update () {
if(Input.touchCount==1){
if(Input.GetTouch(0).phase==TouchPhase.Moved){
var h : float=Input.GetAxis("Mouse X");//又正左负
if(h<0){
horizontalSpeed=1.5;
transform.Rotate(transform.up*horizontalSpeed);
}
if(h>0){
horizontalSpeed=1.5;
transform.Rotate(-transform.up*horizontalSpeed);
}
}
}
if(Input.touchCount>1){
if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved){
var pos1=Input.GetTouch(0).position;
var pos2=Input.GetTouch(1).position;
newdis=Vector2.Distance(pos1,pos2);
if(olddis!=null){
if(newdis<olddis) {
Camera.main.camera.orthographicSize+=0.2;
}
if(newdis>olddis) {
Camera.main.camera.orthographicSize-=0.2;
} if( Camera.main.camera.orthographicSize<0){
Camera.main.camera.orthographicSize=0;
}
if( Camera.main.camera.orthographicSize>10){
Camera.main.camera.orthographicSize=10;
}
}
olddis=newdis;
}
}
//按返回键退出程序
if(Input.GetKey(KeyCode.Escape)){
Application.Quit();
}
}</pre><br>
<br>
<p></p>
<p><br>
</p>
<p><span style="font-size:18px; color:#ff0000">这篇就说到这,下一篇是《让物体有惯性的旋转》~~~~</span></p>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
</pre>
相关文章推荐
- unity3D基础学习 通过判断鼠标点击的是否是目标物体,物体旋转,滑动滚轮缩放拉近视角
- unity3D物体的旋转和缩放
- Unity3D 控制物体移动、旋转、缩放
- Unity3D 控制物体移动、旋转、缩放
- Unity3d控制物体的旋转以及缩放
- Unity3d物体模型(实现旋转缩放平移自动旋转)
- unity3d实现相机对场景物体的旋转、缩放、平移查看功能、近似于scene下查看场景的效果
- Unity3D 控制物体移动、旋转、缩放
- Unity3d物体模型(实现旋转缩放平移自动旋转)
- Unity3d通过鼠标缩放查看和旋转物体
- Unity3D 控制物体移动、旋转、缩放
- Unity3d物体模型(实现旋转缩放平移自动旋转)
- 002-实现Unity3d中触摸屏幕控制物体的旋转和缩放 代码实现
- Unity3d中使用鼠标控制物体的平移旋转缩放
- Unity3D 控制物体移动、旋转、缩放
- Unity3D 控制物体移动、旋转、缩放
- Unity3D 拖动物体旋转和缩放
- Unity3D 几个基本动画(控制物体移动、旋转、缩放)
- Unity3D 控制物体移动、旋转、缩放
- Unity3d 简单实现物体旋转缩放移动