Unity学习过程中问题记录

文章目录

  • Unity学习过程中问题记录
    • 一. 目标移动和转向
    • 二. 目标跟随的问题
    • 三. 鼠标左键行为
    • 四. 3DS MAX模型制作与导出
      • 1. 模型制作的几个点
      • 2. 导出
      • 3. 导出后材质调整

一. 目标移动和转向

要学会使用Unity的API手册,里面有一些示范代码是可以直接拿来使用的,而且简单易于理解。

其中Java的示例代码中有相应注释,而C#没有,想要进一步理解C#代码可以参考Java中的相关注释加以理解。以下我所使用的都是C#代码。

回到题目,目标移动和转向功能需要使用的是UnityEngine中Input类中所提供的方法,该方法可以获得水平方向和竖直方向的键盘或鼠标输入,我们此处使用键盘输入,相关介绍如图所示:

void Update(){// Get the horizontal and vertical axis.// By default they are mapped to the arrow keys.// The value is in the range -1 to 1float translation = Input.GetAxis("Vertical") * moveSpeed;float rotation = Input.GetAxis("Horizontal") * rotationSpeed;// Make it move 10 meters per second instead of 10 meters per frame...translation *= Time.deltaTime;rotation *= Time.deltaTime;// Move translation along the object's z-axistransform.Translate(0, 0, translation);// Rotate around our y-axistransform.Rotate(0, rotation, 0);}

Input.GetAxis(“…”)此中参数是轴的名称,是否有对应该轴向的输入需要检测按键是否被触动,轴的名称以及对应按键要到Edit->Project Setting->input manager中去查看,默认都是AD和左右方向键对应水平方向;WS和上下方向键对应垂直方向。

然后把该脚本挂载到想要控制的物体上就可以进行移动了。

二. 目标跟随的问题

目标跟随是指物体1(Capsule collider)先移动,然后物体2(Camera)以线性插值的方式缓动跟随过去,以达到一个缓冲效果,看起来不那么生硬。如图所示,是Camera跟随Capsule collider的起点和终点。

此效果的实现需要用到Vector3中的线性插值Lerp方法:

参数一应为追随物体坐标,即起点坐标;
参数二应为被追随物体坐标,即终点坐标;
参数三应为追随速度,最好乘以Time.deltaTime转化为物理时间下的速度。

注:物体的父子关系如下图所示。

该代码块调用FollowAngle()的前一行使用该方法,以达到Camera的Position追随Capsule Collider的效果:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CameraCtrl : MonoBehaviour
{public float moveSpeed = 1.0f;public float rotationSpeed = 10.0f;public float followSpeed = 2.0f;Transform cameraTarget;// Start is called before the first frame updatevoid Start(){cameraTarget = GameObject.Find("CameraTarget").transform;} // Update is called once per framevoid Update(){float translation = Input.GetAxis("Vertical") * moveSpeed;float rotation = Input.GetAxis("Horizontal") * rotationSpeed;translation *= Time.deltaTime;rotation *= Time.deltaTime;transform.Translate(0, 0, translation);transform.Rotate(0, rotation, 0);//cameraTarget.position = transform.position;cameraTarget.position = Vector3.Lerp(cameraTarget.position, transform.position, Time.deltaTime * followSpeed);FollowAngle();}
}private void FollowAngle(){//cameraTarget.rotation = Quaternion.Slerp(cameraTarget.rotation, transform.rotation, Time.deltaTime * followRotate);targetSon.rotation = Quaternion.Slerp(targetSon.rotation, transform.rotation, Time.deltaTime * followRotate);}

此处为了实现相机后续的朝向追随效果,把相机放到一个组合体(小正方体前方插了一个小长方体,准备分别控制左右摆动和上下摆动)下作为子物件,因此在追随的时候一定要把组合体的碰撞盒关掉,否则永远追随不上,会出现一直碰撞,碰撞后向前运动再追随,这样就是个死循环,所以要关掉组合体的碰撞盒。

前面部分是在阐述移动位置的缓动跟随,即对Position的跟随,而角度的跟随是由 FollowAngle()函数完成的,Rotation和Position的数据类型是不同的,Position是Vector3类型的数据,Rotation是Quaternion类型数据,但为了实现跟随使用方法都是类似的,都属于插值的方法,此处为了实现更自然的效果,我们使用球形插值方法实现角度跟随,描述如下:

至此,位置跟随和角度跟随就完成了。

三. 鼠标左键行为

鼠标左键行为的设定是为了实现原地不动时四处张望的效果,之我们就再次需要使用input中“获得轴”的方法,与上面不同的是,上面使用键盘输入,而这里要使用的是鼠标输入,预期效果:按住鼠标左键拖动,返回鼠标坐标的变化量,从而让摄像机进行旋转。
注1:下面的代码块前面功能都保留了,若只想了解该部分的代码实现,可以直接看MouseAction()函数体部分;
注2:此处把前面所使用的CameraTarget移除了,只使用TargetSon就能够完成所有相关功能,没有必要多一个物体。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CameraCtrl : MonoBehaviour
{public float moveSpeed = 1.0f;public float rotationSpeed = 50.0f;public float followSpeed = 2.0f;public float followRotate = 2.0f;Transform targetSon;// Start is called before the first frame updatevoid Start(){targetSon = GameObject.Find("TargetSon").transform;} // Update is called once per framevoid Update(){float translation = Input.GetAxis("Vertical") * moveSpeed;float rotation = Input.GetAxis("Horizontal") * rotationSpeed;translation *= Time.deltaTime;rotation *= Time.deltaTime;transform.Translate(0, 0, translation);transform.Rotate(0, rotation, 0);targetSon.position = Vector3.Lerp(targetSon.position, transform.position, Time.deltaTime * followSpeed);if (translation == 0 && rotation == 0) {MouseAction();}if (translation != 0 || rotation != 0){//防止和目标旋转冲突,要在有方向键输入的时候进行角度追随,没有键盘输入的时候才会检测鼠标的动作,即上一个判断语句,//如果使用内插跟随,放到这个判断里就意味着这个角度跟随效果就会变差,没有按键输入马上就会停止跟随,//所以两物体之间总会有一个角度差。下次移动旋转的时候又会继续跟随,看起来很奇怪,但若直接使用赋值语句会更生硬,待完善。FollowAngle();}}private void FollowAngle(){//targetSon.rotation = transform.rotation;targetSon.rotation = Quaternion.Slerp(targetSon.rotation, transform.rotation, Time.deltaTime * followRotate);}private void MouseAction(){if (Input.GetMouseButton(0)){float mouseX = Input.GetAxis("Mouse X");float mouseY = -Input.GetAxis("Mouse Y");targetSon.Rotate(Vector3.up * mouseX * Time.deltaTime * 200f, Space.World);targetSon.Rotate(Vector3.right * mouseY * Time.deltaTime * 200f, Space.Self);}}
}

需要注意的是,FollowAngle()和MouseAction()都在控制targetSon的旋转,FollowAngle()是在键盘方向键输入的时候,使targetSon进行角度跟随,是间接的;MouseAction()是鼠标左键控制,使targetSon进行角度旋转,是直接的。如果不加判断,将两个函数同时执行,会产生冲突,例如当鼠标向左拖动,MouseAction()产生作用,而同时FollowAngle()进行角度跟随,即跟随到transform.rotation这个角度,这样无论如何都不会用鼠标拉到你想看的方向,会看到过去又回来的效果。
所以此时要加入判断,在键盘有输入时,则不接收鼠标行为;只有当停止键盘输入时,才可以实现四周张望的效果,这就有了如下的判断语句。

       if (translation == 0 && rotation == 0) {MouseAction();}if (translation != 0 || rotation != 0){            FollowAngle();}

但这样又会产生一个问题,一旦键盘没有输入,角度跟随马上就会停止,即球形内插未完成就会停止,如下图所示,所以两物体之间总会有一个角度差。下次移动旋转的时候才会继续跟随,看起来很奇怪,这里如果有相关完善方法的读者,希望不吝赐教。

四. 3DS MAX模型制作与导出

1. 模型制作的几个点

1.挤出要将轴锁定,否则会七扭八歪;
2.要进行编辑某个元素要记得右键>转换为>可编辑多边形/网格/面片;
3.到Unity需要使用贴图的部位,要记得使用修改器列表中的UVW贴图,制作UV坐标(目前还不熟练,只是知道需要这个东西);
4.修改器列表中的倒角功能,可以制作有层次变化的物体,比如门四周的切角;
5.到Unity当中需要调整材质的部分,在3DS MAX当中就要预先添加好,但不用很具体,最简单给一个颜色就可以。

2. 导出

按照什么尺寸做的就要选择对应的单位,默认为英寸;
轴一般我们都是以Z轴朝上建立模型,但默认是Y轴朝上。

3. 导出后材质调整

导入的模型一般使用.fbx格式,此时材质Shader栏如果显示Autodesk Interactive且为灰色,则不可编辑,需要到导入模型的Material一栏进行调整,在Location下拉栏中选择“Use External Materials(Legacy)”,生成材质文件夹,Shader栏变为Standard或其他模式,这样就可以进行接下来的材质调整了。

一些材质需要反射场景,则需要添加反射探针,一些动态物体需要接收周围光照的时候则需要添加光线探针若干,在进行光线烘焙的时候,如果模型的UV制作并不完美,可能需要打开模型中的Generate Lightmap UVs to UV2,但这个功能可能有判断失误的风险。

【Unity】 Unity目标跟随效果 及 fbx模型导入的相关问题相关推荐

  1. 解决FBX模型导入Unity后没有贴图的问题

    将FBX模型导入至Unity 3D中,并实施如下步骤: 1. 步骤1:将FBX模型文件拖拽到Unity的项目视图中,选中模型文件,在检视视图中切换到Materials选项卡,Location属性有两种 ...

  2. fbx模型导入unity,绑了骨骼加蒙皮法线就反

    fbx模型导入unity正常 但只要绑了骨骼,在3dmax中正常,进入unity就法线反转 原因是3dmax中模型用到复制和镜像的导出需要多一步处理 1重置变换 2反转法线 按顺序进行这两个,在绑定模 ...

  3. 不可能的工作:在FBX模型导入脚本中生成模型的预置体

    不可能的工作:在FBX模型导入脚本中生成模型的预置体 #if UNITY_EDITOR using System.Collections; using System.Collections.Gener ...

  4. UE4/fbx模型导入UE4中的坐标问题

    在制作"门的打开"时,需要将坐标定位到门的轴上,有时候导入的模型的坐标却不再理想的位置,这是就需要调整模型的坐标点. 由于模型的门是有多个小部件组成的,比如说门把手,门上的装饰等, ...

  5. 【解决】FBX模型导入Unity3D贴图丢失问题

    1.选择"Materials" 2.Location选择"Use External Materials(Legacy)" 3.最后点击"Apply&q ...

  6. 【unity游戏开发教程】Unity+Umotion Pro+VRoid+Blender制作人物模型和动画,在unity中简单制作二次元人物动画

    前言 大家好!本期教程教大家在unity中制作二次元人物模型和动画 文章目录 前言 0.环境准备 1.下载VRoid Studio 2.Umotion Pro下载 3.Mixamo网站 4.blend ...

  7. FBX骨骼模型导入UE4

    FBX模型导入ue4,建立控制逻辑 1.导入 新建文件夹,直接拖入,点导入 2.对物理模型建立约束 3.建立汽车蓝图类 加载汽车模型,添加车轮骨架,设置项目输入,此时模型已经可以动了 接着添加车轮类, ...

  8. max导出fbx动画模型导入unity后播放会出现局部模型扭曲解决办法总结

    **动画模型在max里面播放是好的,看着没问题,但导出fbx到unity里面会出现局部扭曲或部分破面面消失或动画抖动,这个可能是因为unity本身设置问题,也有可能是蒙皮绑定的问题 解决办法 1.模型 ...

  9. Blender导出.fbx模型到Unity贴图丢失

    原因: 因为Blender的混合着色器是由很多节点组成的,而目标软件获取不到这些过程shader节点的信息,所以目标软件(如Unity)无法加载正确的贴图.一般方法的导出.fbx模型只能导出一些基本的 ...

最新文章

  1. VLC RTP Over TCP
  2. 浅谈常见的七种加密算法及实现(附代码)
  3. 音频降噪处理+java_适当的音频捕获和降噪
  4. python 分类 投票_LightGBM——提升机器算法(图解+理论+安装方法+python代码)
  5. Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装
  6. 黄聪:Wordpress程序Mysql查询导致CPU100%,页面错误增量飙高解决方案
  7. MySQL8.0-基础操作
  8. cv2.imread读取图像结果none_PyTorch 42.图像操作
  9. 在ASP.NET中加密页面机制
  10. jack插头_防水连接器航空插头特点
  11. 软件行业 职位 英文简称
  12. Python好酷|allpairspy一款高效的正交实验法生成用例工具
  13. python中polyfit 之poly1d与polyval的含义
  14. 计算机要重启电脑才能检测出u盘启动,u盘要电脑重启才能用
  15. Oracle 数据库修复,IBM DB2 数据库修复,MY SQL 数据库修复,SQL Server 数据 库修复,Sybase 数据库,Foxpro 数据库,Access 数据库,Informi
  16. 在arm64上基于qemu的vhost user blk设备hotplug
  17. 【华为机试】HJ16 购物单
  18. 你做的数据运营,90%都是无用功
  19. linux的dhcp服务
  20. 耳机断线了怎么修 耳机头部断线了如何修4线修复的方法

热门文章

  1. 【Eclipse 问题】Eclipse压缩包下载及使用教程
  2. R语言分析蛋白质组学数据:飞行时间质谱(MALDI-TOF)法、峰值检测、多光谱比较...
  3. 战网登录-战网选择国家-战网battle.net问题解决
  4. [转载]函数编写规范
  5. Python scrapy项目中.py文件无法保存:Unable to save file 'items.py' Cannot save items.py
  6. 炸弹人 html5,HTML5再显威力 与全世界一起玩炸弹人
  7. 公众号发送卡密指定回复内容发卡系统关注送卡密[更新1.1.27]
  8. HDU1248完全背包
  9. 哈佛大学心理学博士力荐
  10. 【推荐】一款用了好久的屏幕取色工具