실버크라운

JSP다운로드
유니티다운로드 블러드라인

실버크라운
main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset = "utf-8"> 
<title>MAIN</title> 
<style> 
  td input { 
    width:120px; 
    display:inline-block; 
    height:50px; 
  } 
  td h2 { 
    text-align:center; 
  } 
</style> 
</head> 
<body> 
<table border="1"> 
<tbody> 
  <tr> 
    <td colspan="3"><h2>차량 현황 보기</h2></td> 
  </tr> 
  <tr> 
    <td><input type="button" value="삽입" onclick="location.href='carInsert.jsp'"></td> 
    <td><input type="button" value="전체보기" onclick="location.href='ShowCar.jsp'"></td> 
    <td><input type="button" value="모두삭제" onclick="location.href='delAllCarServlet.do'"></td> 
  </tr> 
</tbody> 
</table> 
</body> 
</html>

블러드라인

dasfsaafdsafsadfsad

카메라에 붙음

레이캐스트

using UnityEngine; 
using System.Collections; 
 
public class CharacterRay : MonoBehaviour { 
    //CharacterRay는 Camera에 붙어있음 
   
  // Update is called once per frame 
  void Update () { 
      if(Input.GetMouseButtonDown(0)) //클릭시 
        { 
            RaycastHit hit; 
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
            if (Physics.Raycast(ray, out hit)) 
            { 
                if (hit.transform.gameObject.tag == "Enemy") //맞은 오브젝트의 tag가 Enemy일경우 
                { 
                    hit.transform.gameObject.SendMessage("Dead"); 
                    //맞은 gameobject에서 Dead라는 메소드 실행, 인자값없음 
                } 
            } 
        } 
  } 
} 

 

각각 솔져에 붙음

코루틴

 

index는 반드시 Unity상에서 각각 솔져별로 숫자를 다르게 해 줄것, 숫자는 0부터 시작

using UnityEngine; 
using System.Collections; 
 
public class RayStandBy : MonoBehaviour { 
    //RayStandBy는 각각의 soldier들에게 붙어있고, 각 soldier들의 상태를 갖고있음 
 
    public int index = -1; //각각의 index는 여기서 수정하는 것이 아닌 Unity상에서 수정함!! 
    public GameObject explosion; // 
 
    void Start() 
    { 
        if(DisplaySoldier.controller.soldiers[index] == 0) //자신의 index의 값이 0일경우 (꺼진 상태) 
        { 
            gameObject.SetActive(false); //자신의 Active상태를 false로 바꿈(끔) 
        } 
    } 
 
    public void Dead() //CharacterRay에서 실행할 메소드 
    { 
        GetComponent<Animator>().SetBool("dead", true); //애니메이션 변경 
        StartCoroutine(DeadStandby()); //코루틴 실행 
 
    } 
 
    IEnumerator DeadStandby() 
    { 
        yield return new WaitForSeconds(2); //2초대기 
        Instantiate(explosion, transform.position, transform.rotation); //폭발! 
        DisplaySoldier.controller.changeState(index); //DisplaySoldier에서 changeState메소드 실행, 인자값은 각 soldier들의 index 
        Destroy(gameObject);//자기자신 삭제 
    } 
} 

 

바깥에 Empty Object에 붙임

모든 솔져들 컨트롤

using UnityEngine; 
using System.Collections; 
 
public class DisplaySoldier : MonoBehaviour { 
    //DisplaySoldier는 바깥에 EmptyObject에서 모든 soldier들의 Active상태를 관리하기 위해 사용 
 
 
    public static DisplaySoldier controller; 
    //외부에서 쉽게 접근할 수 있도록 controller를 static으로 선언 
     
    public int[] soldiers = { 1, 1, 1, 1 }; //각 솔져들의 기본 상태 
    // 0 : 보이지않음 
    // 1 : 보임 (SetActive(true)) 
 
    void Awake() //시작할때! 
    { 
        controller = this; 
        //자기자신을 등록 
 
        if(PlayerPrefs.GetString("soldiers") != "") //soldiers라는 PlayerPref가 존재할경우 (저장된경우) 
        { 
            string[] ary; //임시변수 
            ary = PlayerPrefs.GetString("soldiers").Split(','); // ','를 기준으로 잘라냄 
 
            for(int i = 0; i < soldiers.Length; i++) 
            { 
                soldiers[i] = System.Convert.ToInt32(ary[i]); //string형을 int형으로 형변환해줌 
            } 
        } 
    } 
    public void changeState(int index) //soldiers 어레이를 수정할 메소드 
    { 
        soldiers[index] = 0; // 0의 경우 SetActive를 False로 변환 
        string ary = ""; //PlayerPref를 string형으로 저장하기 위해 사용할 임시변수 
        for(int i = 0; i < soldiers.Length; i++) 
        { 
            if(i < soldiers.Length -1) 
            { 
                ary += soldiers[i].ToString() + ","; //하나 추가하고 뒤에 ','를 붙여줌 
            } 
            else 
            { 
                ary += soldiers[i].ToString(); // 마지막의 경우 ,를 붙일 이유가 없음 
            } 
        } 
        PlayerPrefs.SetString("soldiers", ary); 
        //solders라는 이름의 PlayerPref을 ary값으로 설정 
    } 
} 

카메라 컨트롤러 소스

요번 카메라관련 소스에는 굉장히 유용한 함수와 기법들이 들어가있다.

카메라가 플레이어를 쫒아다니는 형식으로, 다른 곳에서도 유용하게 사용할 수 있을 것 같다.

using UnityEngine; 
using System.Collections; 
 
public class CameraPoint : MonoBehaviour { 
    public float xMargin = 1f; //X축을 캐릭터가 카메라 내부에서 이동할 수 있는 범위 
    public float yMargin = 1f; //Y축을 캐릭터가 카메라 내부에서 이동할 수 있는 범위 
 
    public float xSmooth = 2f; //카메라 X축 이동속도 
    public float ySmooth = 2f; //카메라 Y축 이동속도 
    public float maxY = 5; //Y축이 이동할 수 있는 최대값 
    public float minY = -5; //Y축이 이동할 수 있는 최소값 
 
    private float targetX; 
    private float targetY; 
 
    private Transform player; //카메라 조준 오브젝트 
 
  // Use this for initialization 
  void Start () { 
   
  } 
   
  // Update is called once per frame 
  void Update () { 
   
  } 
 
    void Awake() 
    { 
        //하이어라키뷰의 CameraPoint 오브젝트를 찾아 player에 연결한다. 
        player = GameObject.Find("CameraPoint").transform; 
    } 
     
    void FixedUpdate() 
    { 
        TrackPlayer(); 
    } 
     
    bool CheckXMargin() 
    { 
        return Mathf.Abs(transform.position.x - player.position.x) > xMargin; 
    } 
 
    bool CheckYMargin() 
    { 
        return Mathf.Abs(transform.position.y - player.position.y) > yMargin; 
    } 
 
    void TrackPlayer() 
    { 
        //카메라 위치값 X, Y변수에 연결 
        targetX = transform.position.x; 
        targetY = transform.position.y; 
 
        //캐릭터가 카메라의 X값을 벗어나면 targetX의 수치를 
        //캐릭터 위치로 부드럽게 이동시킨다. 
        if(CheckXMargin()) 
        { 
            //선형 보간함수 
            //일정하게 쪼개서 점진적으로 변화시킴 
            //사용방법 
            //Mathf.Lerp(시작값, 끝값, 변화값) 
            targetX = Mathf.Lerp(transform.position.x, player.position.x, xSmooth * Time.deltaTime); 
 
        } 
        //플레이어가 카메라의 Y값을 벗어나면 
        //targetY의 수치를 캐릭터 위치로 부드럽게 이동시킨다 
        if(CheckYMargin()) 
        { 
            targetY = Mathf.Lerp(transform.position.y, player.position.y, ySmooth * Time.deltaTime); 
        } 
         
        //카메라가 이동할 수 있는 Y값 범위 
        //최소 최대치 고정 
        //최소, 최대치를 넘어가지 않도록 고정하는 함수 
        //사용방법 
        //Mathf.Clamp(value, 최소값, 최대값) 
        //value가 최소보다 작으면 최소값 리턴 
        //최대보다 크면 최대값 리턴 
        targetY = Mathf.Clamp(targetY, minY, maxY); 
 
        //카메라의 이동 
        transform.position = new Vector3(targetX, targetY, transform.position.z); 
    } 
} 

 

Unity 타겟 3개 순환해서 따라다니기

using UnityEngine; 
using System.Collections; 
 
public class NavMesh : MonoBehaviour { 
 
  public Transform target1; 
    public Transform target2; 
    public Transform target3; 
 
  private NavMeshAgent nav; 
    private int flag = 0; 
  // Use this for initialization 
  void Start () { 
 
    nav = GetComponent<NavMeshAgent>(); 
    nav.SetDestination(target1.position); 
   
  } 
   
  // Update is called once per frame 
  void Update () { 
      if(Input.GetButtonDown("Fire1")) //클릭했을 때 
        { 
            ++flag; //플래그 변수 1씩 증가 
            if (flag == 3) //총 세개니 0,1,2까지만 허용해야함 
                flag = 0; //0으로 바꿔줌 
 
            switch(flag) //플래그를 기준으로 
            { 
                case 0: 
                    nav.SetDestination(target1.position); //각 타겟의 포지션으로 목적지 설정 
                    break; 
                case 1: 
                    nav.SetDestination(target2.position); 
                    break; 
                case 2: 
                    nav.SetDestination(target3.position); 
                    break; 
            } 
        } 
  } 
} 

 

냥캣 소스

스크립트가 사방에 분포해있어서 보기 힘들지도..

 
다운로드

 

GameController.cs

게임 총괄 소스

using UnityEngine; 
using System.Collections; 
using UnityEngine.SceneManagement; 
 
public class GameController : MonoBehaviour { 
    //controller 
    public static GameController controller = null; 
 
    //boolean 
    public bool ready = true; 
    public bool isOver = false; 
 
    //prefab 
    public GameObject obstructions; 
    public GameObject saw; 
 
    //objects 
    public GameObject gameOverImg; 
    public GameObject window; 
    public GameObject retry; 
    public GameObject Player; 
    public GameObject Floor; 
    public GameObject bestImg; 
    public GameObject clicktostart; 
 
    //texts 
    public TextMesh score; 
    //public TextMesh finalScoreText; 
    public TextMesh bestScoreText; 
 
    // Use this for initialization 
    void Start () { 
         
  } 
    void OnEnable() 
    { 
        controller = this; 
    } 
   
  // Update is called once per frame 
  void Update () { 
      if(Input.GetMouseButtonDown(0) && ready ==true) 
        { 
            ready = false; 
            Destroy(clicktostart); 
            InvokeRepeating("createObs",1.0f, 2.5f); 
        } 
        else if(!ready && isOver && Input.GetKeyDown(KeyCode.Escape)) 
        { 
            SceneManager.LoadScene(0); 
        } 
  } 
 
    void createObs() 
    { 
        int x = Random.Range(0, 2); 
 
        if (x == 0) 
        { 
            Instantiate(obstructions); 
        } 
        else 
        { 
            Instantiate(saw); 
        } 
 
    } 
 
    public void gameOver() 
    { 
        if(isOver) 
        { 
            return; 
        } 
        isOver = true; 
        backgroundScroll.bkctl.isstop = true; 
         
        CancelInvoke("createObs"); 
        iTween.ShakePosition(Camera.main.gameObject, iTween.Hash("x", 0.2, "y", 0.2, "time", 0.5f)); 
        iTween.MoveTo(gameOverImg, iTween.Hash("y", 1, "delay", 1.3f, "time", 0.5f)); 
        iTween.MoveTo(window, iTween.Hash("y", 0.1, "delay", 1.3f, "time", 0.5f)); 
        iTween.MoveTo(retry, iTween.Hash("y", -1, "delay", 1.3f, "time", 0.5f)); 
        if (GlobalVar.count > PlayerPrefs.GetInt("Best")) 
        { 
            PlayerPrefs.SetInt("Best", GlobalVar.count); 
            iTween.FadeTo(bestImg, iTween.Hash("alpha", 255, "time", 0.5f)); 
             
        } 
 
        //finalScoreText.text = GlobalVar.count.ToString(); 
        bestScoreText.text = PlayerPrefs.GetInt("Best").ToString(); 
        Player.GetComponent<Rigidbody>().useGravity = true; 
        Floor.GetComponent<BoxCollider>().isTrigger = true; 
 
        this.GetComponent<AudioSource>().Play(); 
 
         
 
    } 
 
    public void getScore() 
    { 
        if (!controller.isOver) 
        { 
            GlobalVar.count++; 
            Debug.Log(GlobalVar.count); 
            score.text = GlobalVar.count.ToString(); 
        } 
    } 
} 

 

오브젝트 X축 옮기기

using UnityEngine; 
using System.Collections; 
 
public class csShoot : MonoBehaviour { 
    public int speed = 5; 
    public int rotSpeed = 120; 
    public int power = 500; 
    public GameObject ball; 
  // Use this for initialization 
  void Start () { 
        //ball.GetComponent<Rigidbody>().AddForce(new Vector3(0,1,1)*power); 
        //오브젝트 발사 
  } 
   
  // Update is called once per frame 
  void Update () { 
        float amtMove = speed * Time.deltaTime; //매 프레임의 이동 거리 
        float amtRot = rotSpeed * Time.deltaTime; 
        float ver = Input.GetAxis("Vertical"); // 앞뒤 이동 방향 
                                                
        //float hor = Input.GetAxis("Horizontal");                                     
        //좌우 이동 방향  
 
        float ang = Input.GetAxis("Horizontal"); 
        transform.Translate(Vector3.forward * ver * amtMove); 
        //전후진 
         
        //transform.Translate(Vector3.right * hor * amtMove); 
        //좌우 이동 
 
        transform.Rotate(Vector3.up * ang * amtRot); 
        //도리도리 
        if (Input.GetButtonDown("Fire1")) 
        { 
            ball.GetComponent<Rigidbody>().AddForce(Vector3.forward * power);  
            //오브젝트 발사 
        } 
  } 
} 

 

무기마다 최대 탄약 다르게

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 
 
public class GameManager : MonoBehaviour { 
    //manager 
    public static GameManager manager; 
 
    //player 
    public GameObject player; 
 
    //texts 
    public GameObject scoreText; 
    public GameObject welcome; 
    public GameObject ammotext; 
 
    //bullet 
    public GameObject bullet; 
 
    //ammo 
    public int bullets = 0; 
    public int maxbullets = 0; 
 
    //gun damage 
    public int damage = 0; 
 
    //score 
    public int score; 
 
    //can shoot or not 
    //public bool canShoot = false; 
 
    //is started? or Over? 
    public bool isStart = false; 
    public bool isOver = false; 
 
    //max score 
    public const int MAXSCORE = 100; 
 
    // Before Start()... 
    void OnEnable() 
    { 
        manager = this; 
    } 
 
  // Use this for initialization 
  void Start () { 
        bullets = 0; 
        maxbullets = 0; 
  } 
   
  // Update is called once per frame 
  void Update () { 
      if(!welcome.GetComponent<Text>().enabled && !isStart) 
        { 
            //welcome.GetComponent<Text>().text = "You Win!"; //미리 텍스트 변경 
            //Debug.Log("a"); 
            isStart = true; 
            scoreText.SetActive(true); //스코어 텍스트 켜기 
            ammotext.GetComponent<Text>().enabled = true; 
             
        } 
 
        if(score >= MAXSCORE && !isOver) 
        { 
            welcome.GetComponent<Text>().enabled = true; 
            scoreText.SetActive(false); 
            isOver = true; 
        } 
 
        if(Input.GetButtonDown("Fire1") && bullets > 0) 
        { 
            Debug.Log("Ammo " + bullets + " Max " + maxbullets); 
            Debug.Log("남은 총알" + (--bullets)); 
            ammotext.GetComponent<Text>().text = "ammo:" + bullets; 
            GameObject ins = Instantiate(bullet, player.transform.position, player.transform.rotation) as GameObject; 
            ins.GetComponent<Rigidbody>().AddForce(player.transform.forward * 5000f); 
        } 
  } 
 
} 

 

유니티 충돌시 폭파 펑

using UnityEngine; 
using System.Collections; 
 
public class TongEvent : MonoBehaviour { 
    /* 
        이전 스크립트 재사용 
                           */ 
 
    public GameObject Explosion; 
  // Use this for initialization 
  void Start () { 
   
  } 
   
  // Update is called once per frame 
  void Update () { 
   
  } 
 
    void OnCollisionEnter(Collision target) 
    { 
        if(target.gameObject.tag == "Bullet") //총알과 충돌시 
        { 
            //ShootZone.score += 10; //점수증가 
 
            Instantiate(Explosion, transform.position, transform.rotation); 
            //폭발!! 
            Destroy(gameObject, 0.5f); //우주선 삭제 
        } 
    } 
} 

 

특정 위치에 물체 생성 후 발사

발사 = 리지드바디에 addforce

using UnityEngine; 
using System.Collections; 
 
public class Shoot : MonoBehaviour { 
    /* 
        이전 스크립트 재사용 
                           */ 
    public GameObject bullet; 
    public float power = 1500f; 
 
  // Use this for initialization 
  void Start () { 
   
  } 
   
  // Update is called once per frame 
  void Update () { 
      if(Input.GetButtonDown("Fire1") && Controller.gun != -1) 
        { 
            GameObject ins = Instantiate(bullet, transform.position, transform.rotation) as GameObject; 
            ins.GetComponent<Rigidbody>().AddForce(transform.forward * power); 
        } 
  } 
} 

 

유니티 특정 시간 후 자기 자신 삭제

using UnityEngine; 
using System.Collections; 
 
public class BulletDestroy : MonoBehaviour { 
 
  // Use this for initialization 
  void Start () { 
   
  } 
 
    float time = 0.0f; 
   
  // Update is called once per frame 
  void Update () { 
        time += Time.deltaTime; 
 
        if(time >= 1) 
        { 
            Destroy(gameObject); 
            ++GameController.controller.removedGrenades; 
            Debug.Log("Destroyed"); 
        } 
  } 
}