ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 04/09 유니티 슈팅게임 연습
    유니티 2021. 4. 9. 15:28

     

    미구현

    게임오버 화면

    점수

     

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerController : MonoBehaviour
    {
        public Rigidbody playerRigidbody;
        public GameObject player;
        public float speed = 8f;
        public int hp = 100;
        public UIController uiController;    
        private Animation animation;
        private float delta;
        // Start is called before the first frame update
        void Start()
        {
            animation = player.GetComponent<Animation>();        
        }
    
        // Update is called once per frame
        void Update()
        {
            //if (Input.GetKey(KeyCode.UpArrow)) {
            //    this.playerRigidbody.AddForce(0, 0, this.speed);
            //}
    
            //if (Input.GetKey(KeyCode.DownArrow)) {
            //    this.playerRigidbody.AddForce(0, 0, -this.speed);
            //}
    
            //if (Input.GetKey(KeyCode.LeftArrow)) {
            //    this.playerRigidbody.AddForce(-this.speed, 0, 0);
            //}
    
            //if (Input.GetKey(KeyCode.RightArrow)) {
            //    this.playerRigidbody.AddForce(this.speed, 0, this.speed);
            //}
    
            //수평축과 수직축의 입력값을 감지해서 저장
            float xInput = Input.GetAxis("Horizontal");
            float yInput = Input.GetAxis("Vertical");
            if(xInput != 0 || yInput != 0)
            {
                
                Debug.LogFormat("{0} {1}", xInput, yInput);
    
                float xSpeed = xInput * speed;
                float ySpeed = yInput * speed;
    
                Vector3 newVelocity = new Vector3(xSpeed, 0, ySpeed);
    
                Quaternion targetRot = Quaternion.LookRotation(newVelocity);
                transform.rotation = Quaternion.Lerp(transform.rotation, targetRot, 0.15f);
    
                playerRigidbody.velocity = newVelocity;
                            
                if(animation.IsPlaying("idle@loop") || !animation.isPlaying)
                {
                    animation.Play("run@loop");
                }
                
            }
            else
            {
                if (animation.IsPlaying("run@loop") || !animation.isPlaying)
                {
                    animation.Play("idle@loop");
                }
                    
            }
                    
            if (hp <= 0)
            {
                delta += Time.deltaTime;
                animation.Play("die");
                if(delta > 0.7f)
                {
                    Die();
                }
            }
        }
        public void Die()
        {
            this.gameObject.SetActive(false);        
        }
        public void Hit()
        {
            animation.Play("damage");
            this.hp -= 10;
            Debug.Log(hp);
            uiController.DecreaseHp(this.hp);
        }
        
    }
    
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Bullet : MonoBehaviour
    {
        public float speed = 8f;
        private Rigidbody bulletRigidbody;
        // Start is called before the first frame update
        void Start()
        {
            //게임오브젝트에서 Rigidbody 컴포넌트를 찾아 
            this.bulletRigidbody = this.GetComponent<Rigidbody>();
    
            this.bulletRigidbody.velocity = this.transform.forward * speed;
    
            Destroy(this.gameObject, 3f);
        }
    
        private void OnTriggerEnter(Collider other)
        {
            if(other.tag == "Player")
            {
                PlayerController playerController = other.GetComponent<PlayerController>();
    
                if(playerController != null)
                {
                    playerController.Hit();
                }
            }
        }
    }
    

     

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class BulletSpawner : MonoBehaviour
    {
        public GameObject bulletPrefab;
        public float spawnRateMin = 0.5f;
        public float spawnRateMax = 3;
        public PlayerController player;
    
        private Transform target;
        private float spawnRate;
        private float timeAfterSpawn;    
    
        // Start is called before the first frame update
        void Start()
        {
            this.timeAfterSpawn = 0;
            this.spawnRate = Random.Range(this.spawnRateMin, this.spawnRateMax);
            this.target = FindObjectOfType<PlayerController>().transform;        
        }
    
        // Update is called once per frame
        void Update()
        {
            if (player.hp > 0)
            {
                this.timeAfterSpawn += Time.deltaTime;
    
                if (this.timeAfterSpawn >= this.spawnRate)
                {
                    this.timeAfterSpawn = 0;
    
                    GameObject bullet = Instantiate(this.bulletPrefab, this.transform.position, this.transform.rotation);
                    bullet.transform.LookAt(target);
                    this.spawnRate = Random.Range(this.spawnRateMin, this.spawnRateMax);
                }
            }
        }
    }
    

     

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class UIController : MonoBehaviour
    {
        // Start is called before the first frame update
        public Text hpText;
        public Image hpGauge;    
        void Start()
        {
            
        }
    
        // Update is called once per frame
        void Update()
        {
            
        }
        public void DecreaseHp(int hp)
        {
            this.hpGauge.GetComponent<Image>().fillAmount -= 0.1f;
            this.hpText.GetComponent<Text>().text = hp +"/100";
        }
    }
    
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class GameOver : MonoBehaviour
    {
        // Start is called before the first frame update
        private GameOver gameOver;
        void Start()
        {
            this.gameOver = GetComponent<GameOver>();
        }
    
        // Update is called once per frame
        void Update()
        {
            
        }
    
        public void Gameover()
        {
            gameOver.gameObject.SetActive(true);
        }
    }
    

    '유니티' 카테고리의 다른 글

    04/13 유니티 쿠키런 제작 2  (0) 2021.04.13
    04/13 유니티 쿠키런 제작 1  (1) 2021.04.13
    04/11 유니티 조이스틱으로 캐릭터 이동 연습  (0) 2021.04.12
    04/09 수업내용 메모  (0) 2021.04.09
    04/08 유니티 연습  (0) 2021.04.08
Designed by Tistory.