unity如何制作无线电波探测仪

Dont think who you are, know you are
Unity3d 开发(二)Unity 制作可发布插件
文章作者: 本文出自 ,禁止用于商业用途,转载请注明出处。
原文链接:
翻译自制作要求安装时如果需要特殊设置,例如:Input Manager or Tag Manager。需要有文档支持。代码包要包含文档,提醒用户如何使用和设置,以防止用户无法配置项目。最好制作,YouTube视频、支持网站、在线例子。最推荐的是视频,这在示范工具或编辑器扩展方面尤为有价值。版权声明不能用开锁资源,因为会被起诉不能包含其他有版权的商标,比如kfc、法拉利...不能有色情暴力种族歧视命名用空格分词不能以Unity开头名称中建议不要带版本号不能包含其他商标名(比如武器等)。文档 和 测试场景必须包含文档,其被放置在package的主文件夹中其中应包含这是什么安装说明书如何使用最好包含例子场景如需经常提交,需要包含 version history在文档中,并提及提交所做的更改。这可以保持你顾客的兴趣,并追踪你最近的成绩。文件格式 源资源不推荐压缩文件。包括zip和.unitypackage。图形资源需要是 FBX或OBJ格式。如果包含Maya等源文件,要将其打包成zip(压缩文件的唯一例外),例如:.mb, .ma, .max, .c4d, .blend, .3ds, .jas, .fbm, .dds, and .pvr. 纹理必须要连接到材质上。纹理要使用无损压缩,例如:PSD,PNG,TIFF。代码出错时需要有warning提示。warning不要过多。似乎不推荐将错误写成Error.编辑器扩展编辑器扩展必须包含下面的功能:优化的工作流。 设计人性化,别搞诡异的UI。用户应当能直接搞懂,而不必非得查文档。Undo功能:Prefab Overrides & Serialized Property。更改或编辑组件的工具必须支持预设覆盖和使用SerializedProperty类。Menu 不允许使用公司名作为顶级菜单。应将其放置到对应的目录下。例如: Edit, Window, Component, Gameobject。完整项目完整的项目必须有YouTube视频或WebPlayer的预览。声音声音需要有在线预览的支持。价格表不能在其他渠道卖得更低价。别不敢要高价。Art Packages$2, $5 - $20 Increments of $5$25 - $95 Increments of $5Complete Projects$10 - $55 Increments of $5$60 - $95 Increments of $5Scripting Packages$5 - $45 Increments of $5$50 - $95 Increments of $5Extensions$5 - $45 Increments of $5$50 - $95 Increments of $5获取showcased即使插件流弊,没有卖相也是获得不了showcased,要使它看起来高大上。UI图片规定Your asset requires three 32-bit .png key images:big - used to promote a package when the package is the primary item onscreensmall - used to promote images in smaller box viewsicon - used for downloads and list viewsTotal image dimensions are:big - 860 x 389 (live area 550 x 330)small - 200 x 258 (live area 175 x 100)icon - 128 x 128提交流程注册 在登陆注册创建。在 中点击Create New Package.首发Version Changes填写Initial Release。填写描述。写文件中包含了多少模型、脚本、动画是个好习惯。英语要ok,至少别拼写错误,否则会降权。URL是这样的格式:&a href="http://www.mysite.com"&My Site&/a&制作图片 点击上方的预览可看到页面效果。在Unity中打开AssetStore,点击下方的Publish your stuff下载发布工具。下载后导入项目。点击Asset Store Tools-&Package Upload。在弹出对话框中:选择对应的package。选择Asset目录,目录下的所有东西都会被上传,不过据说AssetStoreTools目录会被自动移除。如果有main models 或者是animations 才需要选择。它是用来当用户在Unity内部搜索时,显示在Inspector上的预览。所以通常是空的上传包。下载包测试。主要是检查功能是否正常,是否会抛异常,纹理贴图是否连接到资源上。打标签 Asset Store Tools-&Mass Labeler点击在 点击Submit package for approval.更新版本 新建一个Draft version,在页面底部点击Create New Draft,更改版本号,走正常创建流程如果你觉得这篇文章对你有帮助,可以顺手点个顶,不但不会喜当爹,还能让更多人能看到它...
没有更多推荐了,【转载】【Unity教程】如何制作一辆简单的车
没有更多推荐了,http://blog.csdn.net/helloguonan
Unity3d 制作铁链子
没有更多推荐了,unity行为树制作AI简单例子(2) - 语文小子 - 博客园
Blog Stats
Stories - 0
Comments - 1
Trackbacks - 0
继续昨天的工程,给Monster添加一个空物体命名为AI,在AI添加脚本BehaviorTree,然后就可以打开行为树编辑器进行编辑了
先写好自定义的节点脚本,下面是一个寻找漫游点的行为节点脚本
using UnityE
using BehaviorDesigner.Runtime.T
using BehaviorDesigner.R
[TaskCategory("MyActions")]
[TaskDescription("计算出更新的路径")]
public class ChooseWanderPosition : Action {
[BehaviorDesigner.Runtime.Tasks.Tooltip("最长距离")]
public float wanderD
[BehaviorDesigner.Runtime.Tasks.Tooltip("存放目标地的变量")]
public SharedVector3
[BehaviorDesigner.Runtime.Tasks.Tooltip("自己")]
public SharedGameO
public override TaskStatus OnUpdate(){
Vector3 direction = new Vector3(Random.Range(-1f, 1f), 0f, UnityEngine.Random.Range(-1f, 1f));
direction *= wanderD
destination.Value = monster.Value.transform.position +
return TaskStatus.S
[TaskCategory("MyActions")]
指定文件的目录为MyActions,我是在Actions下新建了一个MyActions的文件夹,所以指定目录为MyActions
其实也可以不指定,但是添加节点时就会显得杂乱
[TaskDescription("计算出更新的路径")]
这可以提示脚本的功能
public的属性将会显示在面板上
既可使用int float GameObject这种unity的类型,但缺点在于无法和其他脚本共享变量
Shared xxx类型是插件提供的,他在整个行为树中都能使用
使用Shared xxx类型前,必须在Variables先定义变量
之后点击该按钮切换后就能选择全局的变量了
最后设置如下,该节点就完成了
[BehaviorDesigner.Runtime.Tasks.Tooltip("xxx")]是面板上变量的解释,移动到面板变量上会显示
作为行为节点必须继承自Action并实现OnUpdate
OnUpdate()是节点执行时要运行的代码
接下来贴出其他要用到的行为节点
using UnityE
using BehaviorDesigner.Runtime.T
using BehaviorDesigner.R
[TaskCategory("MyActions")]
[TaskDescription("转向玩家")]
public class FaceToPlayer : Action {
[BehaviorDesigner.Runtime.Tasks.Tooltip("朝向的目标玩家")]
public SharedGameO
[BehaviorDesigner.Runtime.Tasks.Tooltip("自己")]
public SharedGameO
public override TaskStatus OnUpdate(){
Vector3 targetDir = player.Value.transform.position - monster.Value.transform.
monster.Value.transform.rotation = Quaternion.LookRotation(targetDir);
return TaskStatus.S
using UnityE
using BehaviorDesigner.Runtime.T
using BehaviorDesigner.R
[TaskCategory("MyActions")]
[TaskDescription("移动至漫游点")]
public class MoveToWanderPoint : Action {
[BehaviorDesigner.Runtime.Tasks.Tooltip("移动的速度")]
public float speed = 3;
[BehaviorDesigner.Runtime.Tasks.Tooltip("移动的目标点")]
public SharedVector3
[BehaviorDesigner.Runtime.Tasks.Tooltip("自己")]
public SharedGameO
public override TaskStatus OnUpdate(){
monster.Value.GetComponent&NavMeshAgent&().Move(position.Value);
return TaskStatus.S
using UnityE
using BehaviorDesigner.Runtime.T
using BehaviorDesigner.R
[TaskCategory("MyActions")]
[TaskDescription("移动至玩家")]
public class MoveToWanderPoint : Action {
[BehaviorDesigner.Runtime.Tasks.Tooltip("移动的速度")]
public float speed = 3;
[BehaviorDesigner.Runtime.Tasks.Tooltip("移动的目标玩家")]
public SharedGameO
[BehaviorDesigner.Runtime.Tasks.Tooltip("自己")]
public SharedGameO
public override TaskStatus OnUpdate(){
monster.Value.GetComponent&NavMeshAgent&().Move(player.Value.transform.position);
return TaskStatus.S
因为移动调用了NavMeshAgent,所以我们先烘焙下场景并给Monster添加NavMeshAgent控件
using UnityE
using BehaviorDesigner.Runtime.T
using BehaviorDesigner.R
[TaskCategory("MyActions")]
[TaskDescription("设置怪物的基本属性")]
public class SetInfo : Action {
[BehaviorDesigner.Runtime.Tasks.Tooltip("玩家")]
public SharedGameO
[BehaviorDesigner.Runtime.Tasks.Tooltip("自己")]
public SharedGameO
public override TaskStatus OnUpdate(){
monster.Value = transform.parent.gameO
player.Value = GameObject.FindWithTag("Player");
return TaskStatus.S
我们还需要自己写一个判断节点来判定玩家和怪物的距离,还需一个判断节点判断物体是否移动
using UnityE
using BehaviorDesigner.Runtime.T
using BehaviorDesigner.R
[TaskCategory("MyConditionals")]
[TaskDescription("判断范围内是否有玩家")]
public class PlayerInRange : Conditional {
[BehaviorDesigner.Runtime.Tasks.Tooltip("距离")]
public float
[BehaviorDesigner.Runtime.Tasks.Tooltip("判断距离的玩家")]
public SharedGameO
[BehaviorDesigner.Runtime.Tasks.Tooltip("自己")]
public SharedGameO
public override TaskStatus OnUpdate(){
if(Vector3.Distance(player.Value.transform.position, monster.Value.transform.position) & ranage){
return TaskStatus.F
return TaskStatus.S
using UnityE
using BehaviorDesigner.Runtime.T
using BehaviorDesigner.R
[TaskCategory("MyConditionals")]
[TaskDescription("判断对象是否移动")]
public class NotMove : Conditional {
[BehaviorDesigner.Runtime.Tasks.Tooltip("上一次的位置")]
public Vector3 lastP
[BehaviorDesigner.Runtime.Tasks.Tooltip("判断的对象")]
public SharedGameO
public override TaskStatus OnUpdate(){
if(obj.Value.transform.position == lastPosition){
return TaskStatus.S
lastPosition = obj.Value.transform.
return TaskStatus.F
依靠这些节点就可以拼出一颗行为树,一运行就可以看到一个简单的AI在运行,在攻击范围内它会攻击,在追击范围内它会追击敌人直到可以攻击,否则漫游
红圈位置可以改变节点颜色,更容易观察行为树结构
一些细节方面可以观看Demo
http://git.oschina.net/yejinqi/BehaviorTreeDemo
如果的事:http://y.qq.com/#type=song&mid=0040ZKt52jxJ6Y&play=1

我要回帖

更多关于 无线电波频率范围 的文章

 

随机推荐