unity 模型扭曲怎么使模型看起来具有旋转扭曲感

求问unity3d如何实现模型自身的移动、缩放、旋转!谢谢!
&求助各位大神!我想用unity实现多个三维模型各自分别移动、缩放、旋转。我在网上找了很多代码都是摄像机的移动和旋转,请问谁能教教我物体自身的移动、缩放、旋转该怎么写呀? 希望大神能把代码分享给我,感激不尽!
————————————————————————————————————————————————————————————
以下是我找的移动摄像机实现移动和缩放、平移的代码
#pragma strict
//用于绑定参照物对象
var target : T
//缩放系数
var distance = 10.0;
//左右滑动移动速度
var xSpeed = 250.0;
var ySpeed = 120.0;
//缩放限制系数
var yMinLimit = -20;
var yMaxLimit = 80;
//摄像头的位置
var x = 0.0;
var y = 0.0;
//记录上一次手机触摸位置判断用户是在左放大还是缩小手势
private var oldPosition1 : Vector2;
private var oldPosition2 : Vector2;
&
//初始化游戏信息设置
function Start () {
&& &var angles = transform.eulerA
&& &x = angles.y;
&& &y = angles.x;
&
&// Make the rigid body not change rotation
&& &if (rigidbody)
&rigidbody.freezeRotation =
}
&
function Update ()
{
&//判断触摸数量为单点触摸
&if(Input.touchCount == 1)
&{
&//触摸类型为移动触摸
&if(Input.GetTouch(0).phase==TouchPhase.Moved)
&{
&& & //根据触摸点计算X与Y位置
&x += Input.GetAxis(&Mouse X&) * xSpeed * 0.02;
&& & & & y -= Input.GetAxis(&Mouse Y&) * ySpeed * 0.02;
&
&}
&}
&
&//判断触摸数量为多点触摸
&if(Input.touchCount &1 )
&& &{
&& & //前两只手指触摸类型都为移动触摸
&& & if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)
&& & {
&& & & & //计算出当前两点触摸点的位置
&& & &var tempPosition1 = Input.GetTouch(0).
&var tempPosition2 = Input.GetTouch(1).
&& & & & & & //函数返回真为放大,返回假为缩小
&& & & & & & if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2))
&& & & & & & {
&& & & & & & //放大系数超过3以后不允许继续放大
&& & & & & & //这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改
&& & & & & & & &if(distance & 3)
&& & & & & & & &{
&& & & & & & & &distance -= 0.5;
&& & & & & & & &}
&& & & & & &}else
&{
&& & & & & & & & //缩小系数返回18.5后不允许继续缩小
&& & & & & & & & //这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改
&& & & & & & & & if(distance & 18.5)
&& & & & & & & & {
&& & & & & & & & distance += 0.5;
&& & & & & & & & }
&& & & & & & }
&& & & & & &//备份上一次触摸点的位置,用于对比
&& & & & oldPosition1=tempPosition1;
&oldPosition2=tempPosition2;
&& & }
&& &}
}
&
//函数返回真为放大,返回假为缩小
function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean
{
&//函数传入上一次触摸两点的位置与本次触摸两点的位置计算出用户的手势
&& &var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y));
&& &var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y));
&& &if(leng1&leng2)
&& &{
&& & &//放大手势
&& & & &
&& &}else
&& &{
&& & //缩小手势
&& & & &
&& &}
}
&
//Update方法一旦调用结束以后进入这里算出重置摄像机的位置
function LateUpdate () {
&
&& &//target为我们绑定的箱子变量,缩放旋转的参照物
&& &if (target) {
&
&& & //重置摄像机的位置
&&y = ClampAngle(y, yMinLimit, yMaxLimit);
&& & & &var rotation = Quaternion.Euler(y, x, 0);
&& & & &var position = rotation * Vector3(0.0, 0.0, -distance) + target.
&
&& & & &transform.rotation =
&& & & &transform.position =
&& &}
}
&
static function ClampAngle (angle : float, min : float, max : float) {
&if (angle & -360)
&angle += 360;
&if (angle & 360)
&angle -= 360;
&return Mathf.Clamp (angle, min, max);
}
#pragma strict
&&//用于绑定参照物对象
var target : T
//缩放系数
var distance = 10.0;
//左右滑动移动速度
var xSpeed = 250.0;
var ySpeed = 120.0;
//缩放限制系数
var yMinLimit = -20;
var yMaxLimit = 80;
//摄像头的位置
var x = 0.0;
var y = 0.0;
//记录上一次手机触摸位置判断用户是在左放大还是缩小手势
private var oldPosition1 : Vector2;
private var oldPosition2 : Vector2;
//初始化游戏信息设置
function Start () {
&& &var angles = transform.eulerA
&& &x = angles.y;
&& &y = angles.x;
// Make the rigid body not change rotation
&& &if (rigidbody)
rigidbody.freezeRotation =
}
function Update ()
{
//判断触摸数量为单点触摸
if(Input.touchCount == 1)
{
//触摸类型为移动触摸
if(Input.GetTouch(0).phase==TouchPhase.Moved)
{
&& //根据触摸点计算X与Y位置
x += Input.GetAxis(&Mouse X&) * xSpeed * 0.02;
&& & & &y -= Input.GetAxis(&Mouse Y&) * ySpeed * 0.02;
//判断触摸数量为多点触摸
if(Input.touchCount &1 )
&& &{
&& &//前两只手指触摸类型都为移动触摸
&& &if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)
&& &{
&& & & //计算出当前两点触摸点的位置
&& &var tempPosition1 = Input.GetTouch(0).
var tempPosition2 = Input.GetTouch(1).
&& & & & & &//函数返回真为放大,返回假为缩小
&& & & & & &if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2))
&& & & & & &{
&& & & & & &//放大系数超过3以后不允许继续放大
&& & & & & &//这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改
&& & & & & & & &if(distance & 3)
&& & & & & & & &{
&& & & & & & & &distance -= 0.5;
&& & & & & & & &}
&& & & & & &}else
{
&& & & & & & & &//缩小洗漱返回18.5后不允许继续缩小
&& & & & & & & &//这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改
&& & & & & & & &if(distance & 18.5)
&& & & & & & & &{
&& & & & & & & &distance += 0.5;
&& & & & & & & &}
&& & & & & &}
&& & & & & &//备份上一次触摸点的位置,用于对比
&& & & &oldPosition1=tempPosition1;
oldPosition2=tempPosition2;
&& &}
&& &}
}
//函数返回真为放大,返回假为缩小
function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean
{
//函数传入上一次触摸两点的位置与本次触摸两点的位置计算出用户的手势
&& &var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y));
&& &var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y));
&& &if(leng1&leng2)
&& &{
&& &//放大手势
&& & & &
&& &}else
&& &{
&& &//缩小手势
&& & & &
//Update方法一旦调用结束以后进入这里算出重置摄像机的位置
function LateUpdate () {
&&
&& &//target为我们绑定的箱子变量,缩放旋转的参照物
&& &if (target) {
&& &
&& &//重置摄像机的位置
&&y = ClampAngle(y, yMinLimit, yMaxLimit);
&& & & &var rotation = Quaternion.Euler(y, x, 0);
&& & & &var position = rotation * Vector3(0.0, 0.0, -distance) + target.
&& & & &
&& & & &transform.rotation =
&& & & &transform.position =
&& &}
}
static function ClampAngle (angle : float, min : float, max : float) {
if (angle & -360)
angle += 360;
if (angle & 360)
angle -= 360;
return Mathf.Clamp (angle, min, max);
}
function OnGUI () { &
&& & & & &
&&//将坐标信息显示在3D屏幕中
&&GUI.Label(Rect(50, 100,200,20),&x pos is& + x); &
&&GUI.Label(Rect(50, 120,200,20),&y pos is& + y ); &
&&}
要评论请先&或者&
参考下这个
:参考下这个 哇哇哇!太感谢了!真的转起来了那请问一个手指控制旋转的话,我怎么实现物体自身平移呢?请问您有物体自身平移的代码吗?太感谢了!!!抱住大神!!!!!
平移模型怎么解决???&鍔犺浇涓}

我要回帖

更多关于 unity 模型扭曲 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信