unity3d中物体的控制
思路:通过对时间的计算,每隔一段时间让物体旋转,实现来回移动。
float TranslateSpeed = 0.02f;
float TranslateSpeedTime = 0.1f;
void Update () {
TranslateSpeedTime += 0.1f; transform.Translate(Vector3.forward * TranslateSpeed);
if (TranslateSpeedTime > 150.0f)
{
transform.Rotate(, , );
TranslateSpeedTime = 0.1f;
}
}
1.首先给物体定义一个初始速度和初始的时间。
2.然后使时间递增。
3.通过Translate函数使物体移动。
4.Vector3.forward 是向前移动的意思,==Vector3(0,0,1)
*Vector3.up 向上 具体可查看API
5.if判断,规定一个时间,如若TranslateSpeedTime达到这个时间,让物体沿着Y轴旋转
并且重置时间,继续调用Update
即可实现物体的重复移动并旋转。
让gameobject始终面对镜头
actor1.transform.rotation = Camera.main.transform.rotation;
actor1.transform.Rotate(,,)
二、GameObject隐藏/显示
1)
gameObject.SetActive (false);
gameObject.SetActive (true);
2)
GameObject.renderer.enabled//是控制一个物体是否在屏幕上渲染或显示 而物体实际还是存在的 只是想当于隐身 而物体本身的碰撞体还依然存在的
//API已更新为GameObject.GetComponent<Renderer>().enabled = true/false; 注意FBX没有renderer属性,不能用此方法
GameObject.Destroy() //表示移除物体或物体上的组件 代表销毁该物体 实际上该物体的内存并没有立即释放,而是等到这一帧的结束才会真正销毁
GameObject.SetActive()
//是否在场景中停用该物体,设置gameObject.SetActive(false),则你在场景中用find找不到该物体
//如果该物体有子物体 你要用SetActiveRecursively(false) 来控制是否在场景中停用该物体(递归的)
//SetActive(false)的时候,物体不再渲染,释放占用资源
Camera.cullingMask //设置相机的渲染层次,在不需要某个物体的时候,cullingMask中将此物体的layer去掉,但是前提是要规划好layer,不能影响其他不希望隐藏掉的物体。 GameObject.transform.position = FAR_AWAY //设置一个无限远的位置,再不需要的时候就将物体移动至这个位置,但是这样物体并没有释放,占用的所有资源都会继续占用
3)优化:避免频繁调用GameObject.SetActive
昨天又从主程那学到一招Unity+NGUI性能优化方法。我们游戏的某些逻辑会在一帧内频繁调用GameObject.SetActive,显示或隐藏一些对象,数量达到一百多次之多。这类操作的CPU开销很大(尤其是NGUI的UIWidget在激活的时候会做很多初始化工作),而且会触发大量GC。后来我们改变了显示和隐藏对象的方法——让对象一直保持激活状态(activeInHierarchy为true),而原来的SetActive(false)改为将对象移到屏幕外,SetActive(true)改为将对象移回屏幕内。这样性能就好多了。
三、外部加载组件Object
1)加载外部AssetBundle
string text = "bonus";
string path = "D:\\bonus";
AssetBundle assetBundle = AssetBundle.LoadFromFile(path);
Object original = assetBundle.LoadAsset(text);
GameObject gameObject = Object.Instantiate(original) as GameObject;
gameObject.transform.position = Camera.main.transform.position + Camera.main.transform.forward * 5.0f; gameObject.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
gameObject.transform.localScale = new Vector3(3f, 3f, 3f);
gameObject.name = text; //添加绑定脚本
gameObject.AddComponent<MYActivity>();
2)加载一个纹理
Texture2D LoadImageFrom(string path, int width=, int height= )
{
//创建文件读取流
FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
fileStream.Seek(, SeekOrigin.Begin);
//创建文件长度缓冲区
byte[] bytes = new byte[fileStream.Length];
//读取文件
fileStream.Read(bytes, , (int)fileStream.Length);
//释放文件读取流
fileStream.Close();
fileStream.Dispose();
fileStream = null; //创建Texture
Texture2D texture = new Texture2D(width, height);
texture.LoadImage(bytes);
return texture;
}
3)加载一个外部脚本/DLL
var assembly = System.Reflection.Assembly.LoadFile(@"D:\color.dll");
//var assembly = System.Reflection.Assembly.Load("Color"); //path: projectname\project_Data\Managed\
var type = assembly.GetType("Color");
GameObject tGO = new GameObject("tGo");
tGO.AddComponent(type);
四、调用其他脚本函数
第一种,被调用脚本函数为static类型,调用时直接用 脚本名.函数名()。很不实用……
第二种,GameObject.Find("脚本所在物体名").SendMessage("函数名"); 此种方法可以调用public和private类型函数
第三种,GameObject.Find("脚本所在物体名").GetComponent<脚本名>().函数名();此种方法只可以调用public类型函数
unity3d中物体的控制的更多相关文章
- unity3d中让物体显示和隐藏
unity3d中让物体显示和隐藏的方法 gameObject.renderer.enabled //是控制一个物体是否在屏幕上渲染或显示 而物体实际还是存在的 仅仅是想当于隐身 而物体本身的碰撞体还 ...
- (转)Unity3D中移动物体位置的几种方法
1. 简介 在unity3d中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...
- (转)在Unity3D中控制动画播放
用Unity3D也算是好久了,但是每次做项目总还是能学到新的东西.这次做一个TPS的项目就遇到了这样一个问题,如何同时在上下半身播放不同的动画?解决方法其实是很简单,但由于对于动画资源的了解不足导致问 ...
- Unity3D Player角色移动控制脚本
1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position.之前写过类似的文章,这次增加了平时常用API的脚本,每个脚本均手打测试可用. 2. ...
- unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
2条评论 Unity3D 的 Mecanim 动画系统可以直接复用 3DS MAX 中制作的动画文件中的位移,这个就是通过 applyRootMotion 来达成的,我们只需要在使用 Animator ...
- Unity3D 角色(物体) 移动方法 合集
1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...
- (转)Unity3d中的碰撞检测
很多时候,当我们的主角与其他GameObject发生碰撞时, 我们需要做一些特殊的事情,比如:子弹击中敌人,敌人就得执行一系列的动作.这时,我们就需要检测到碰撞现象,即碰撞检测.这一篇,我来具体谈谈自 ...
- Unity3D中使用Projector生成阴影
在Unity3D中使用Projector实现动态阴影 无意中看见一篇博客叙述使用Projector实现动态阴影可以在移动平台拥有非常好的性能,遂按照其想法实现了一遍,发现其中竟有许多细节,写下这篇博客 ...
随机推荐
- 在本地设置 http-proxy 代理 (前后端分离)
1. 利用package.json 安装nodejs,创建package.json文件:内容如下 "dependencies": { "http-proxy": ...
- ubuntu16上传文件到服务器
用windows时候,上传文件到服务器,一般都是用xshell和xftp配合使用,用ubuntu就不需要额外安装任何软件了.只用ctrl+alt+t,打开命令行用一句话就可以上传了. 将本地war包上 ...
- UI基础:target...action设计模式,手势识别器.UIimageview
使用target..action和delegate设计模式可以实现解耦.使代码更加优化. 手势识别器: 手势识别器:是对触摸事件做了封装,无需自己去判断某个手势是否触发,手势识别器本身起到了识别作用, ...
- 2.1 Linux中wait、system 分析
wait与waitpid: 当子进程退出的时候,内核会向父进程发送SIGCHID信号,子进程的退出是一个异步事件(子进程可以在父进程运行的任何时刻终止). 子进程退出时,内核将子进程置为僵尸状态,这个 ...
- stm32 继电器的配置
你可以把继电器当成一个led来控制,只不过就是电路图不一样,但配置原理是一样的, 控制相对应的GPIO口,推挽输出,就行了,然后仿真一下就会发现哒哒哒的声音.
- Http常见状态码说明
一些常见的状态码为: 200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码.代码 说明100 ...
- bind() 函数兼容
为了搞清这个陌生又熟悉的bind,google一下,发现javascript1.8.5版本中原生实现了此方法,目前IE9+,ff4+,chrome7+支持此方法,opera和safari不支持(MDN ...
- hdu1428 记忆化搜索(BFS预处理最短路径和+DP+DFS)
题意:有一块 n * n 大小的方形区域,要从左上角 (1,1)走到右下角(n,n),每个格子都有通过所需的时间,并且每次所走的下一格到终点的最短时间必须比当前格子走到重点的最短时间短,问一共有多少种 ...
- 利用GPU改善程序性能的一点心得
1. 硬件方面 a. 流处理器个数 Gpu内部的计算单元个数,决定分析模块实时性的关键因素. 实测效果: gtx760 1152个 Gtx960 1024个 单路1080p运动 ...
- Spark的启动进程详解
Master和Worker是执行任务之前存在的进程 (类似于公司) Driver和Excutor是任务执行之后存在的进程(类似于公司接到项目后才成立的项目小组) 启动步骤: 启动Master资源管理进 ...