Unity中location和rotation赋值和更改

这篇具有很好参考价值的文章主要介绍了Unity中location和rotation赋值和更改。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity中location可以和Vector3向量相加减和 通过new Vector3更改位置。如:

public Vector3 cubeposition = new Vector3(0,0,0);

cubeposition = new Vector3(Xadjustposition, Yadjustposition, Zadjustposition);
 GameObject.Find("newcube").transform.position = cubeposition;

但rotation不行,要用Quaternion.Euler赋值的办法才能赋值或更改角度。如:

public Quaternion cuberotation = Quaternion.identity;//四元素初始化只能这样

cuberotation = Quaternion.Euler(Xadjustrotation, Yadjustrotation, Zadjustrotation);

GameObject.Find("newcube").transform.localRotation=cuberotation;

或者GameObject.Find("newcube").transform.localRotation=Quaternion.Euler(Xadjustrotation, Yadjustrotation, Zadjustrotation);

综合:

GameObject.Find("newcube").transform.localPosition = cuberotation * new Vector3(translation.y, translation.z, -translation.x) + cubeposition;

下面是更完整一点儿的摘抄:

float Xadjustposition, Yadjustposition, Zadjustposition, Xadjustrotation, Yadjustrotation, Zadjustrotation;
 public Vector3 cubeposition = new Vector3(0,0,0);
 public Quaternion cuberotation = Quaternion.identity;//四元素初始化只能这样

 Matrix4x4 matrix = new Matrix4x4();
              matrix.SetRow(0, new Vector4(m[3], m[6], m[9], m[12] / scaleMultiplier));//经过实际测试前三个都是0,从第四个开始才跟transform中的数据一样,跟openIGTLink官方的协议说明不同,按实际的来,所以从m[3]开始
                matrix.SetRow(1, new Vector4(m[4], m[7], m[10], m[13] / scaleMultiplier));
                matrix.SetRow(2, new Vector4(m[5], m[8], m[11], m[14] / scaleMultiplier));
                matrix.SetRow(3, new Vector4(0.0f, 0.0f, 0.0f, 1.0f));

Vector3 eulerAngles = matrix.rotation.eulerAngles;
 GameObject.Find("newcube").transform.localRotation = Quaternion.Euler(eulerAngles.x, -eulerAngles.y, -eulerAngles.z);

 Vector3 markerposition = GameObject.Find("ImageTarget2").transform.position;//ImageTarget2 
 Quaternion markerrotation = GameObject.Find("ImageTarget2").transform.rotation;

cubeposition = markerposition + markerrotation * new Vector3(0, -0.03f, -0.114f);

cubeposition = markerposition + markerrotation * (cubeposition - markerposition);//此句虽然是用的向量加旋转,但依然是眼镜获得的两个全局值再运算,跟上面一个效果,多一层误差。
   

 public void XpositionPlus()
    {
       
        float result = 0;
        string textValue = XpositionInput.GetComponent<InputField>().text;
        result = float.Parse(textValue);
        Xadjustposition = Xadjustposition + result / 1000;
        cubeposition = new Vector3(Xadjustposition, Yadjustposition, Zadjustposition);
        GameObject.Find("newcube").transform.position = cubeposition;
    }   

//以下是rotation
    public void XrotationPlus()
    {
        
        float result = 0;
        string textValue = XrotationInput.GetComponent<InputField>().text;
        result = float.Parse(textValue);
        Xadjustrotation = Xadjustrotation + result;
        cuberotation = Quaternion.Euler(Xadjustrotation, Yadjustrotation, Zadjustrotation);

        GameObject.Find("newcube").transform.localRotation=cuberotation;
    }文章来源地址https://www.toymoban.com/news/detail-401664.html

到了这里,关于Unity中location和rotation赋值和更改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (unity/c#)反射为类赋值小工具

    string参数为需要修改的变量,dynamic需要一个int/float数值,将从playvalue类中检索对应变量修改数值

    2024年02月10日
    浏览(18)
  • 【vue3】对axios进行封装,方便更改路由并且可以改成局域网ip访问(附代码)

    对axios封装是在main.js里面进行封装,因为main.js是一个vue项目的入口 在1处创建一个axios实例为http,baseURL是基础地址(根据自己的需求写),写了这个在vue界面调用后端接口时只用在post请求处写路由地址就可以了 在2处将创建的axios实例挂到app上 在3处,vue页面进行调用后端接

    2024年02月12日
    浏览(26)
  • unity C#深拷贝、浅拷贝、直接赋值区别与经典实例

    在C#中,浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是两种不同级别的对象复制方式。它们的区别主要体现在处理引用类型字段时的行为。 浅拷贝是指复制对象时,只复制对象本身所包含的值类型字段,并将引用类型字段简单地复制一份引用,而不是复制引用的对象内容。这意

    2024年01月16日
    浏览(61)
  • unity环境创建及颜色更改

    完成效果大概是这个样子: 先启动unity,创建工程 我的个人习惯是将所有创建的环境都放到一个里面,即先创建一个空对象,所有的环境创建都在这个空项目下: 这里的立方体参数在这里,如果想围起来的话直接将这几个参数改改顺序就可以啦。 最后的创建结果就是这个样

    2023年04月21日
    浏览(25)
  • unity更改帧率的方法

    unity更改帧率的方法 通过编辑器更改帧率: a. 在Unity编辑器中,选择“Edit”(编辑)菜单,然后选择“Project Settings”(项目设置)。 b. 在“Project Settings”中选择“Time”(时间)选项卡。 c. 在“Time”选项卡中,将“Fixed Timestep”(固定时间步)选项设置为所需的帧率。默认

    2024年02月11日
    浏览(32)
  • Unity通过脚本更改物体的材质

       

    2024年02月12日
    浏览(29)
  • unity如何手动更改脚本执行顺序

    在Unity中,脚本的执行顺序是由脚本的执行顺序属性决定的。默认情况下,Unity根据脚本在项目中的加载顺序来确定它们的执行顺序。然而,你可以手动更改脚本的执行顺序,以下是一种方法: 在Unity编辑器中,选择你想要更改执行顺序的脚本。 在Inspector面板中,找到脚本组

    2024年02月14日
    浏览(27)
  • unity发布apk怎么更改app图标

    unity发布apk,怎么更改app图标。 在 Unity 发布 Android 应用程序时,可以通过以下步骤更改应用程序的图标: 1.在 Unity 编辑器中,选择要发布的 Android 平台,并选择“Player Settings”(位于 Unity 菜单栏上的“Edit”菜单下的“Project Settings”子菜单中)。 2.在“Player Settings”窗口中

    2024年02月12日
    浏览(25)
  • Unity 下载网络图片的方法,并把图片赋值给UI和物体的方法

    Unity 下载网络图片的方法,可使用WWW类或UnityWebRequest类,其中UnityWebRequest是新版的方法。 通常我们下载图片都会转成Texture,然后赋值给UI或者物体。 具体实现方法: 使用上面方法,运行前: 运行后: 完美把网络图片Load下来,并赋到UI和物体上。

    2024年02月04日
    浏览(33)
  • docker-compose.yml 文件更改后想使之立刻生效,但是不想手动删除已经建立的 container 等信息可以运行下面命令

    docker-compose.yml 文件更改后想使之立刻生效,但是不想手动删除已经建立的 container 等信息可以运行下面命令 重新创建容器实现修改

    2024年02月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包