- 最后登录
- 2017-4-1
- 注册时间
- 2011-7-26
- 阅读权限
- 90
- 积分
- 24690
- 纳金币
- 24658
- 精华
- 6
|
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 }
|
|