- Home /
Making Cross Hair Show Red when over item tagged Enemy
I have the following code to create a cross hair and make it move when I press fire but is there any way I can make it so that it uses it exposed color area and changes red when over an item tagged Enemy?
MousePoint.js
#pragma strict
var drawCrosshair = true;
var crosshairColor = Color.white; //The crosshair color
var width : float = 1; //Crosshair width
var height : float = 3; //Crosshair height
private var hit : RaycastHit;
class spreading{
var spread = 20.0; //Adjust this for a bigger or smaller crosshair
var maxSpread = 60.0;
var minSpread = 20.0;
var spreadPerSecond = 30.0;
var decreasePerSecond = 25.0;
}
var spread : spreading;
private var tex : Texture2D;
private var newHeight : float;
private var lineStyle : GUIStyle;
function Awake (){
tex = Texture2D(1,1);
SetColor(tex,crosshairColor); //Set color
lineStyle = GUIStyle();
lineStyle.normal.background = tex;
}
function OnGUI (){
var centerPoint = Vector2(Screen.width/2,Screen.height/2.5);
var screenRatio : float = Screen.height/100;
newHeight = height * screenRatio;
if(drawCrosshair){
GUI.Box(Rect(centerPoint.x-(width/2), centerPoint.y - ((newHeight-1) + spread.spread), width, newHeight),GUIContent.none,lineStyle);
GUI.Box(Rect(centerPoint.x-(width/2), (centerPoint.y + spread.spread), width, newHeight),GUIContent.none,lineStyle);
GUI.Box(Rect((centerPoint.x + spread.spread), (centerPoint.y - (width/2)), newHeight, width),GUIContent.none,lineStyle);
GUI.Box(Rect(centerPoint.x- ((newHeight-1) + spread.spread), (centerPoint.y -(width/2)), newHeight, width),GUIContent.none,lineStyle);
}
if(Input.GetButton("Fire1"))
{
spread.spread += spread.spreadPerSecond * Time.deltaTime; //Make spreading "smooth" and not abrupt
Fire();
}
spread.spread -= spread.decreasePerSecond * Time.deltaTime; //Decrement the spread
spread.spread = Mathf.Clamp(spread.spread, spread.minSpread, spread.maxSpread);
}
function Fire(){
//Carry out your normal shooting and stuff
}
function SetColor(myTexture : Texture2D, myColor : Color){
for (var y : int = 0; y < myTexture.height; ++y){
for (var x : int = 0; x < myTexture.width; ++x){
myTexture.SetPixel(x, y, myColor);
}
}
myTexture.Apply();
}
Answer by Alec Thilenius · Dec 19, 2012 at 11:21 PM
Yes, assuming the Enemy has a collider. Simply preform a raycast from the center of the screen, and if it hits something and that something is tagged "Enemy" than change to red. If not then change to white. See here for how to do that: http://docs.unity3d.com/Documentation/ScriptReference/Camera.ViewportPointToRay.html
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Rest postion after animation plays 0 Answers
error CS0246 anybody help? 1 Answer
Im still confuse. any help or guide? 3 Answers
Pickaxe Collision Problems 1 Answer