查看: 2415|回复: 2
打印 上一主题 下一主题

Unity中雷达效果的制作(一)

[复制链接]

1602

主题

1

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
24658
精华
6

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-6-8 15:36:29 |只看该作者 |倒序浏览
Unity中雷达效果的制作

想给你游戏中增加个雷达么?Unity中可以很容易增加一个雷达.就像下面这样.当然.你可以让美术把雷达做的更好看一些.



将下面的脚本放在一个游戏对象上,给"blip"设置一个纹理.相当于雷达的信号效果.选择一个纹理作为雷达的背景(radarBG),设置地图在屏幕上的位置,设置一个游戏对象用于你雷达的centerObject(通常是目前的玩家对象).确保所有的"敌人"的标签tag都是"Enemy".之后你就可以在你的游戏中看到雷达了.
两种语言任选其一.
Unity中雷达效果的制作

想给你游戏中增加个雷达么?Unity中可以很容易增加一个雷达.就像下面这样.当然.你可以让美术把雷达做的更好看一些.




将下面的脚本放在一个游戏对象上,给"blip"设置一个纹理.相当于雷达的信号效果.选择一个纹理作为雷达的背景(radarBG),设置地图在屏幕上的位置,设置一个游戏对象用于你雷达的centerObject(通常是目前的玩家对象).确保所有的"敌人"的标签tag都是"Enemy".之后你就可以在你的游戏中看到雷达了.
两种语言任选其一.

js 代码

view sourceprint?001 @script ExecuteInEditMode()
002 // radar! by psychicParrot, adapted from a Blitz3d script found in the public domain online somewhere ..
003 //Modified by Dastardly Banana to add radar size configuration, different colors for enemies in different states (patrolling or chasing), ability to move radar to either one of 9 preset locations or to custom location.
004 //some lines are particular to our AI script, you will need to change "EnemyAINew" to the name of your AI script, and change "isChasing" to the boolean within that AI script that is ***e when the enemy is active/can see the player/is chasing the player.
005 var blip : Texture; // texture to use when the enemy isn't chasing
006 var blipChasing : Texture; //When Chasing
007 var radarBG : Texture;
008 var centerObject : Transform;
009 var mapScale = 0.3;
010 var mapSizePercent = 15;
011 var checkAIscript : boolean = ***e;
012 var enemyTag = "Enemy";
013 enum radarLocationValues {topLeft, topCenter, topRight, middleLeft, middleCenter, middleRight, bottomLeft, bottomCenter, bottomRight, custom}
014 var radarLocation : radarLocationValues = radarLocationValues.bottomLeft;
015 private var mapWidth : float;
016 private var mapHeight : float;
017 private var mapCenter : Vector2;
018 var mapCenterCustom : Vector2;
019 function Start () {
020     setMapLocation();   
021 }
022 function OnGUI () {
023 //  GUI.matrix = Matrix4x4.TRS (Vector3.zero, Quaternion.identity, Vector3(Screen.width / 600.0, Screen.height / 450.0, 1));
024     // Draw player blip (centerObject)
025     bX=centerObject.transform.position.x * mapScale;
026     bY=centerObject.transform.position.z * mapScale;   
027     GUI.DrawTexture(Rect(mapCenter.x - mapWidth/2,mapCenter.y-mapHeight/2,mapWidth,mapHeight),radarBG);
028      
029     // Draw blips for Enemies
030     DrawBlipsForEnemies();
031      
032 }
033   
034 function drawBlip(go,aTexture){
035      
036     centerPos=centerObject.position;
037     extPos=go.transform.position;
038      
039     // first we need to get the distance of the enemy from the player
040     dist=Vector3.Distance(centerPos,extPos);
041      
042     dx=centerPos.x-extPos.x; // how far to the side of the player is the enemy?
043     dz=centerPos.z-extPos.z; // how far in front or behind the player is the enemy?
044      
045     // what's the angle to turn to face the enemy - compensating for the player's turning?
046     deltay=Mathf.Atan2(dx,dz)*Mathf.Rad2Deg - 270 - centerObject.eulerAngles.y;
047      
048     // just basic trigonometry to find the point x,y (enemy's location) given the angle deltay
049     bX=dist*Mathf.Cos(deltay * Mathf.Deg2Rad);
050     bY=dist*Mathf.Sin(deltay * Mathf.Deg2Rad);
051      
052     bX=bX*mapScale; // scales down the x-coordinate so that the plot stays within our radar
053     bY=bY*mapScale; // scales down the y-coordinate so that the plot stays within our radar
054      
055     if(dist<=mapWidth*.5/mapScale){
056         // this is the diameter of our largest radar circle
057        GUI.DrawTexture(Rect(mapCenter.x+bX,mapCenter.y+bY,4,4),aTexture);
058   
059     }
060   
061 }
062   
063 function DrawBlipsForEnemies(){
064     //You will need to replace isChasing with a variable from your AI script that is ***e when     the enemy is chasing the player, or doing watever you want it to be doing when it is red on    the radar.
065      
066     //You will need to replace "EnemyAINew with the name of your AI script
067      
068     // Find all game objects tagged Enemy
069     var gos : GameObject[];
070     gos = GameObject.FindGameObjectsWithTag(enemyTag);
071   
072     var distance = Mathf.Infinity;
073     var position = transform.position;
074   
075     // Iterate through them and call drawBlip function
076     for (var go : GameObject in gos)  {
077           var blipChoice : Texture = blip;
078           if(checkAIscript){
079                 var aiScript : EnemyAI = go.GetComponent("EnemyAI");
080             if(aiScript.isChasing)
081                     blipChoice = blipChasing;
082         }
083         drawBlip(go,blipChoice);
084     }
085   
086 }
087 function setMapLocation () {
088     mapWidth = Screen.width*mapSizePercent/100.0;
089     mapHeight = mapWidth;
090     //sets mapCenter based on enum selection
091     if(radarLocation == radarLocationValues.topLeft){
092         mapCenter = Vector2(mapWidth/2, mapHeight/2);
093     } else if(radarLocation == radarLocationValues.topCenter){
094         mapCenter = Vector2(Screen.width/2, mapHeight/2);
095     } else if(radarLocation == radarLocationValues.topRight){
096         mapCenter = Vector2(Screen.width-mapWidth/2, mapHeight/2);
097     } else if(radarLocation == radarLocationValues.middleLeft){
098         mapCenter = Vector2(mapWidth/2, Screen.height/2);
099     } else if(radarLocation == radarLocationValues.middleCenter){
100         mapCenter = Vector2(Screen.width/2, Screen.height/2);
101     } else if(radarLocation == radarLocationValues.middleRight){
102         mapCenter = Vector2(Screen.width-mapWidth/2, Screen.height/2);
103     } else if(radarLocation == radarLocationValues.bottomLeft){
104         mapCenter = Vector2(mapWidth/2, Screen.height - mapHeight/2);
105     } else if(radarLocation == radarLocationValues.bottomCenter){
106         mapCenter = Vector2(Screen.width/2, Screen.height - mapHeight/2);
107     } else if(radarLocation == radarLocationValues.bottomRight){
108         mapCenter = Vector2(Screen.width-mapWidth/2, Screen.height - mapHeight/2);
109     } else if(radarLocation == radarLocationValues.custom){
110         mapCenter = mapCenterCustom;
111     }
112      
113 }

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

5472

主题

6

听众

1万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
76544
精华
23

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

沙发
发表于 2012-6-8 18:01:51 |只看该作者




    3D投影显示技术在使用中的实现方式(06/08)
    谷歌推出新3D地图_增加Android离线版本(06/08)
    悦览3D世界_3D立体视像论坛暨展览会召开(06/08)
    3D版谷歌地图将于几周内登陆iPhone(06/08)


回复

使用道具 举报

0

主题

1

听众

-18

积分

限制会员

纳金币
-15
精华
0
板凳
发表于 2013-4-27 08:37:08 |只看该作者
学习!!!!!!!!!!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-9-22 11:29 , Processed in 0.348448 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部