U3D 脚本物体绕着目标物体旋转 在两个位置不断变动
 public class DampAngle : MonoBehaviour
{
    public Transform target;
    float smoothTime = 0.3f;
    float distance = 5.0f;
    float yVelocity = 0.0f;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        float yAngle = Mathf.SmoothDampAngle(transform.eulerAngles.y, target.eulerAngles.y, ref yVelocity, smoothTime);
        Vector3 positons = target.position;
        positons += Quaternion.Euler(0, yAngle, 0) * new Vector3(0, 0, distance);
        transform.position = positons + new Vector3(0.0f, 2.0f, 0.0f);
        transform.LookAt(target);
    }

    public void OnGUI()
    {
        if (GUILayout.Button("target旋转60°"))
        {
            target.eulerAngles += new Vector3(0.0f, 60.0f, 0.0f);
        }
    }
}

脚本付给一个立方体,target拖一个球体进去,结果立方体会在球体两端疯狂移动。
yAngle计算出来是89.89→281.2504→96.795→278.78……

如果在distance前加“-”,就能正常运行,yAngle也是类似-2.421408E-07这种小的数字,目前找不到原因,求助各位大佬。

0

1个回答

搞懂了,因为有LookAt这句面向的语句,如果用+distance,经过这句就会反向。而-distance就是把面向这句导致反向的效果抵消。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
一个旋转物体的脚本
一个旋转物体的脚本
鼠标旋转物体脚本
using UnityEngine; using System.Collections; public class NewBehaviourScript : MonoBehaviour { public Camera cam; float ay; float ax; // Use this for initialization void Start () { }
opengl物体绕着任意轴旋转解决方法
opengl中,物体绕着任意轴旋转,采用一个平移矩阵,再用旋转矩阵进行相乘,实际上总是绕着物体的中心坐标值进行旋转的,没法绕着世界坐标中心进行旋转。原因:矩阵只是进行坐标变换,并没有真正的改变物体的各个顶点坐标,所以和矩阵相乘平移后实际上原始坐标没有变化,再进行旋转矩阵相乘,物体还是会围绕自己的中心旋转而已解决方法:先平移时候直接在各个顶点坐标上加上一个平移偏移值,这样就是真正改变物体的世界坐标值...
U3D保存物体位置信息,读取物体位置信息
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO.Ports; using System.Threading; using System.IO; using System; using System.Text; using UnityEngine.UI; ...
unity 用鼠标控制相机绕着物体旋转脚本
using UnityEngine; using System.Collections; public class RotateObj : MonoBehaviour {     public GameObject cube;     float horizontalSPeed =2.0f;     float verticalSpeed = 2f ;     float x,
Unity3d物体缩放旋转脚本
Unity3d物体缩放旋转脚本 控制物体的放大缩小 限制在规定的角度内旋转 实现在屏幕上进行滑动对物体进行旋转 双指控制物体大小变化
旋转物体
本课程带领完全没有3D编程基础的同学学习OpenGL
物体旋转
按下1键 调用is Rotation方法 使得物体旋转
U3D实现鼠标移动物体
IEnumerator OnMouseDown() { Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position); var offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(I
U3d TextMesh穿透物体
Shader "Custom/3D Text Shader" {     Properties {         _MainTex ("Font Texture", 2D) = "white" {}         _Color ("Text Color", Color) = (1,1,1,1)     }     SubShader {         Tags{
U3D物体跟随鼠标移动
void Update () { if (Input.GetMouseButton(0)) { var mousePos = Input.mousePosition; mousePos.z = 10; var world = Camera.main.ScreenToWorldPoint(mous...
U3D子物体和父物体的获得及创建子物体
获得父物体的方法是,通过transform类中的一个函数parent获得该父物体的transform信息(因为该函数的返回值是transform类型),再通过transform类的gameobject函数获得该物体,从而可以控制物体了。 如果是创建子物体的话,只需要创建后设置物体的父物体就好了,获取子物体是通过transform类中的getchild(int)/findchild(string)
点击目标物体 瞬移到那个物体的位置
using System.Collections; using System.Collections.Generic; using UnityEngine; public class main : MonoBehaviour { private Vector3 point; private Camera camera; bool memory = false;...
两个物体的相对位置D3D
我想把床放在屋子的图片里 老是早不好相对的位置 哪位大侠帮帮忙rn另外 我都设了了旋转 但是看的迷糊于是我都把旋转的命令删了 然后一个也不显示了是为啥呢rnHRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, rn const D3DSURFACE_DESC* pBackBufferSurfaceDesc, rn void* pUserContext )rnrn HRESULT hr;rnrn V_RETURN( g_DialogResourceManager.OnCreateDevice( pd3dDevice ) );rn V_RETURN( g_SettingsDlg.OnCreateDevice( pd3dDevice ) );rn rn //创建字体rn V_RETURN( D3DXCreateFont( pd3dDevice, 15, 0, FW_BOLD, 1, FALSE, DEFAULT_CHARSET, rn OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, rn L"Arial", &g_pFont ) );rnrn //创建老虎网格模型rn V_RETURN(g_pMesh.Create(pd3dDevice, L"Media\\墙壁和门_1.x")) ;rn V_RETURN(g_pMesh1.Create(pd3dDevice, L"Media\\床_1.x")); rnrn D3DXVECTOR3 vecAt ( 0,0,0 );rn D3DXVECTOR3 vecEye( 0,2,-5);rn g_Camera.SetViewParams( &vecEye, &vecAt );rn g_Camera.SetScalers(0.01f,50.0f);//摄象机前后移动弧度rn g_Camera.SetEnableYAxisMovement(true);//按Q,E是否可以移动rn g_Camera.SetEnablePositionMovement(true);//摄象机是否可以移动rn return hr;rnrnrnrn//-----------------------------------------------------------------------------rn// Desc: 在此创建默认内存类型资源对象, 设置相关渲染状态(重置设备)rn//-----------------------------------------------------------------------------rnHRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice, rn const D3DSURFACE_DESC* pBackBufferSurfaceDesc, rn void* pUserContext )rnrn HRESULT hr;rnrn V_RETURN( g_DialogResourceManager.OnResetDevice() );rn V_RETURN( g_SettingsDlg.OnResetDevice() );rnrn //设置对话框位置和尺寸rn g_HUD.SetLocation( pBackBufferSurfaceDesc->Width-170, 0 );rn g_HUD.SetSize( 170, 170 );rn g_SampleUI.SetLocation( pBackBufferSurfaceDesc->Width-170, rn pBackBufferSurfaceDesc->Height-350 );rn g_SampleUI.SetSize( 170, 300 );rn g_move.SetLocation( pBackBufferSurfaceDesc->Width-170, rn pBackBufferSurfaceDesc->Height-700 );rn g_SampleUI.SetSize( 170, 430 );rnrn //恢复字体rn if( g_pFont )rn V_RETURN( g_pFont->OnResetDevice() );rn rn //创建ID3DXSprite接口对象rn V_RETURN( D3DXCreateSprite( pd3dDevice, &g_pTextSprite ) );rnrn rnrn //设置投影矩阵rnrn float fAspectRatio = (float)pBackBufferSurfaceDesc->Width / pBackBufferSurfaceDesc->Height;//定义fAspectRatio rn rn rnrn //设置纹理渲染状态rn pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );rn pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );rn pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );rn pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );rnrn //关闭光照rn pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );rn rnrn g_Camera.SetProjParams( D3DX_PI / 4, fAspectRatio, 1.0f, 1000000.0f );//观察距离rnrn return S_OK;rnrnrnrn//-----------------------------------------------------------------------------rn// Desc: 更新场景(框架移动)rn//-----------------------------------------------------------------------------rnvoid CALLBACK OnFrameMove( IDirect3DDevice9* pd3dDevice, double fTime, rn float fElapsedTime, void* pUserContext )rn rn g_Camera.FrameMove(fElapsedTime);//必须写的自由摄象机命令 更新rn rn //世界变换rn D3DXMATRIXA16 matWorld;//世界变换矩阵rn D3DXMATRIXA16 matTranlate;rn UINT iTime = timeGetTime() % 10000;rn FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 10000.0f;rn D3DXMatrixRotationY( &matWorld, fAngle );//填充matWorld为一个旋转矩阵,fAngle是旋转角度rn D3DXMatrixTranslation(&matTranlate,i+0.0f,0.0f,0.0f);//沿X平移30个单位1rn D3DXMatrixMultiply(&matWorld,&matWorld,&matTranlate);//组合得到世界变幻矩阵rn pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );//将matWorld设置为世界转换矩阵rnrnrnrnrn//-----------------------------------------------------------------------------rn// Desc: 渲染场景(框架渲染)rn//-----------------------------------------------------------------------------rnvoid CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, rn float fElapsedTime, void* pUserContext )rnrn HRESULT hr;rn rn //如果正在利用Direct3D设备设置对话框进行设置, 则不渲染场景rn if( g_SettingsDlg.IsActive() )rn rn g_SettingsDlg.OnRender( fElapsedTime );rn return;rn rnrn //清除后台颜色缓冲区和深度缓冲区rn V( pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, rn D3DCOLOR_ARGB(0, 45, 50, 170), 1.0f, 0) );rn pd3dDevice->SetTransform( D3DTS_VIEW, g_Camera.GetViewMatrix() );// 摄象机取→观察rn pd3dDevice->SetTransform( D3DTS_PROJECTION, g_Camera.GetProjMatrix());//摄象机 投影rn //开始渲染场景rn if( SUCCEEDED( pd3dDevice->BeginScene() ) )rn rnrn //渲染网格模型rn g_pMesh.Render( pd3dDevice );rnrnrn D3DXMATRIXA16 matWorld1;//世界变换矩阵rn //D3DXMATRIXA16 matTranlate;rn UINT iTime = timeGetTime() % 10000;rn FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 10000.0f;rn D3DXMatrixRotationZ( &matWorld1, fAngle );//填充matWorlrn pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld1 );rnrnrnrn g_pMesh1.Render( pd3dDevice );rnrn //渲染文本和对话框rn DXUT_BeginPerfEvent( DXUT_PERFEVENTCOLOR, L"HUD / Stats" ); rn RenderText();rn V( g_HUD.OnRender( fElapsedTime ) );rn V( g_SampleUI.OnRender( fElapsedTime ) );rn V( g_move.OnRender( fElapsedTime ) );rn DXUT_EndPerfEvent();rnrn //结束渲染场景rn V( pd3dDevice->EndScene() );rn rnrnrn
Unity 2D 物体旋转指向目标
  Vector2 direction = target.transform.position - transform.position;   float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;   transform.rotation = Quaternion.AngleAxis(angle, Vector3....
u3d 两个同样obj查找子物体
using UnityEngine; using System.Collections; using System.Collections.Generic; using DG.Tweening; public class Test : MonoBehaviour { public GameObject m_tar; public GameObject m_tarShadow; V
物体出现在目标物体的某个方向
this.gameObject.transform.LookAt(VR_Camera.transform); this.gameObject.transform.position = VR_Camera.transform.position + VR_Camera.transform.forward * L; this.gameObject.tran...
物体在指定距离处绕另一个物体旋转
我们来写一个例子,让Cube物体在距离Sphere 2米处绕Sphere旋转 代码: public class t_Distance : MonoBehaviour { public Transform target; //旋转距离 public float targetDistance = 2.0f; //是否到达旋转的距离 private bool
Unity3D基础17:物体中心点与物体旋转
  前文:https://blog.csdn.net/Jaihk662/article/details/86754532(利用Transform组件移动物体) 一、模型中心点 模型身上的坐标轴的中心点,也就是我们模型的中心点,模型的的位置旋转缩放都是相对于模型的中心点来进行变化的 多个物体的中心点:如果你选中了多个物体,那么这些物体整体的中心点在哪呢? Center:当选中多个模...
【Unity3D】物体、材质的设置、物体位移与旋转
Unity3D和Flash一样,甚至可以说是和C#一样,拖完组件,再写一系列的脚本,完成编程,甚至可以说,就是带编程脚本的3DSMAX。那么如何完成最基本的物体、材质的设置、物体位移与旋转呢?下面用一个简单的Unity3D说明这个问题,如下图所示: 在一个面板上面有一个可以控制的立方体与不可以控制的球体和立方体各2个,然后可以控制立方体的位移与旋转。概念的东西就不写了,具体步骤如下。
旋转三维物体(加三维物体上)
//旋转参数     public float x = 0.0f;//相机旋转角度     public float y = 0.0f;     public float z = 0.0f;     private float xSpeed = 250.0f;//鼠标在x、y轴方向旋转的速度     private float ySpeed = 120.0f;     //缩放参数
Unity控制物体旋转修改物体颜色
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeScript : MonoBehaviour { Transform t; MeshRenderer mr; // Use this for initialization void St
unity中键盘控制摄像机绕着某个物体旋转
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseRotateAndMove : MonoBehaviour { public GameObject gam; public float speed = 10f; // Use this
U3D中物体的渲染顺序
1,由SHADER中渲染队列及队列中的值决定 2,在同一队列中,若材质相同 2.1 对于UI,按其在场景层级中的先后顺序绘制 2.2 对于3D不透明物体,按其离相机的距离,由近到远绘制,这样可以减少像素重绘 2.2 对于3D透明物体,按其离相机的距离,由远到近绘制,只有这要才能正确绘制所有半透明物体,反之,有些半透明物体将看不到半透效果 3,在同一队列中,若材质不同,绘制顺序不定,在f...
u3d物体跟随摄像头旋转角度
void Update () { Quaternion rotation = Quaternion.LookRotation(transform.forward - m_arCam.transform.forward); transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.de
Opengl 三维物体旋转
源码,实例,两个立方体,一个茶壶 OPENGL 函数编写
第七课旋转物体
类似于平移,在内容编辑器中的transform,rotation更改即可。这样精确
旋转物体的几种方式
指定最终角度进行旋转,方式一: transform.eulerAngles = new Vector3(x,y,z) transform.localEulerAngles = new Vector3(x,y,z) 给物体赋予一个新的旋转角度值,Vector3 是最終角度,区别是 localEulerAngles 是相对于 parent transform's rotation 官方文档
unit3d物体旋转代码
QQ群:476842922(欢迎加群讨论学习) using UnityEngine; using System.Collections; public class Spin : MonoBehaviour { public float speed=1.0f; // Use this for initialization void Start () { } // Update ...
物体自身旋转
void Update () {         if (LoGo != null)         { //物体以世界坐标自身旋转             LoGo.transform.Rotate(LoGo.transform.up * Time.deltaTime * Speed);         }     } void Update () {         if (LoGo ...
u3d 保存加载物体Position
u3d中 运行时改变物体位置进行记录,停止后可批量加载记录的位置
多物体旋转
文档类 [code="java"]package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; /** * ... * @author zkl */ public class Rotate extends Spri...
物体惯性旋转
要惯性旋转,不一定要控制他的rotatio,可以给他施加一个扭曲力torque using UnityEngine;  using System.Collections; public class test : MonoBehaviour {     private Vector3 torque;     private Rigidbody rigid;     private f
控制Unity物体的旋转
使用方法,将该脚本挂载到一个空物体上或者物体本身上,然后运行项目,分别按住A键旋转;按住W键物体移动
物体的拖拽,旋转,缩放
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LiXiaoYaoCtrl : MonoBehaviour { /// <summary> /// 上次触摸的地方 /// </summary> Touch...
物体旋转和缩放
使用该脚本可以实现场景中物体的缩放和旋转,使用在Android端Unity场景中物体的缩放和旋转
Unity子物体在父物体中的位置、子物体脱离父物体在世界坐标系的位置,关系???
物体A的Scale为(1,1,1)Position为(0,0,0),物体B的Scale为(1,1,1)Position为(1,1,1),当A变为B的子物体后A的Position变为(-1,-1,-1),这个很容易理解。rn但是当我把物体B的Scale变为(2,2,2)其余内容全部不改变,再将A作为B的子物体,这是A的Position变为(-0.5,-0.5,-0.5),这是为什么呢?我理解不了是我觉得无论A、B是多么不规则,A、B的Position都是A、B的中心点,为什么父子物体的Position变换还与物体的Scale有关呢?
关于物体旋转的困惑
我在让物体旋转时是先将物体放入,然后打碎,插入关键桢以后把这个物体设置了一个旋转角度。然后设置在第一帧设置补间动作。设置完了以后,旋转画面一下一下的旋转。如何能实现流畅的旋转呢。
鼠标移动控制物体旋转
学习virtools,鼠标控制物体旋转一个案例,分不多,可以看看
物体的移动与旋转
当物体带有刚体组件时并有持续的运动或者旋转时,使用刚体组件的MovePositon,MoveRotation方法;         //Vector3 dir = enemy.position - player.position;         //dir.y = 0;         //Quaternion target = Quaternion.LookRotation(dir);

相似问题

5
我本地放一个纯静态界面的html,中间有写js脚本,我用ie打开的时候会弹出“已限制此网页运行脚本”
3
Unity C#相机跟随目标物体旋转相机会颠倒。
9
Unity C#相机跟随目标物体旋转相机会颠倒。急求。
4
shell脚本中grep命令及if判断
4
有关Unity中多个Prefab物体绑定同一脚本出现相互影响的问题
7
shell脚本在运行时出现"已杀死"停止运行
0
叉叉助手发布的xsp脚本如何在导入到叉叉助手中修改脚本
3
tolua框架里,如何在C#脚本中调用Lua脚本的函数?
1
UnityEditor中如何获取一个脚本下内所有函数
1
shell脚本中一个全局变量怎么指向另一个脚本?
1
关于orCAD脚本的编写和使用
1
Linux无法执行二进制文件
1
一台服务器上传目录和文件到另外一台ftp服务器上(注意是目录和文件)的shell脚本。
2
刚刚基础python,在WINDOWS的控制台执行脚本出现语法错误什么原因呢
2
kettle中有源表和目标表,两个表的表输入的查询中的表名是一个变量,如何让源表中的数据更新到目标表中?
2
java调用linux语句,第一个脚本的返回结果是第二个脚本的入参,怎样调用
1
关于shell脚本编写从1、2、3、4中取三个随机的不重复数字所生成的数的问题?
1
怎么利用docker-compose,在容器启动后执行自定义的shell命令,能不能在docker-compose.yml中配置啊?
1
树莓派关闭开机启动python脚本
4
Unity脚本在VS2017中打开没有智能提示