zoukankan      html  css  js  c++  java
  • 子弹朝向问题的解决,移动方法的编写

    2D游戏UI和3D游戏UI是相反的(以轴作参照)

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Player : MonoBehaviour {
        #region 属性值
        public float moveSpeed;//坦克移动速度
        private Vector3 bulletEulerAngles;//子弹旋转的角度
        #endregion
        #region 引用值
        private SpriteRenderer sprRenderer;//存储图片的引用
        public Sprite[] sprMove;//移动切换图片
        public GameObject bulletPrefab;//子弹引用
        #endregion
        private void Awake()
        {
            sprRenderer = this.GetComponent<SpriteRenderer>(); //获取图片的引用
        }
        void Start () {
            
        }
    
        void Update () {
            
        }
        private void FixedUpdate()
        {
            TankMove();//坦克移动
            Attack();
        }
        /// <summary>
        /// 坦克移动
        /// </summary>
        private void TankMove()
        {
            float h = Input.GetAxisRaw("Horizontal");//获取水平输入
            float v = Input.GetAxisRaw("Vertical");//获取垂直输入
    
            #region 移动图片切换
            if (h > 0)
            {
                sprRenderer.sprite = sprMove[0];//右移
                bulletEulerAngles = new Vector3(0, 0, -90);//子弹旋转-90度
            }
            else if (h < 0)
            {
                sprRenderer.sprite = sprMove[1];//左移
                bulletEulerAngles = new Vector3(0, 0, 90);//子弹旋转90度
            }
            transform.Translate(Vector3.right * h * moveSpeed * Time.deltaTime);//水平移动
    
            //设置移动优先级
            if (h != 0)
            {
                return;
            }
    
            if (v > 0)
            {
                sprRenderer.sprite = sprMove[2];//上移
                bulletEulerAngles = new Vector3(0, 0,0);//子弹旋转-90度
            }
            else if (v < 0)
            {
                sprRenderer.sprite = sprMove[3];//下移
                bulletEulerAngles = new Vector3(0, 0, -180);//子弹旋转-90度
            }
            transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime);//垂直移动
            #endregion
            #region 图片旋转
    
            #endregion
        }
        /// <summary>
        /// 坦克的攻击方法
        /// </summary>
        private void Attack()
        {
            if (Input.GetKey(KeyCode.J))
            {
                //子弹旋转的角度=当前坦克的旋转角度+子弹要转的角度
                Instantiate(bulletPrefab, transform.position, Quaternion.Euler(transform.eulerAngles+bulletEulerAngles));//transform.eulerAngles坦克当前旋转角度
            }
        }
    }
  • 相关阅读:
    第一阶段
    堆栈的内容------全局变量(实例变量)---静态变量等等
    this和引用变量的地址值是同一个---------new后面的是构造方法
    引用数据类型的传递,那个值先输出,后面的也同样是同一个值
    基本数据类型的传递,参数传递的是具体的值
    构造方法和构造代码块
    装饰器初识
    Bootstrap框架
    Django ORM那些相关操作
    jQuery
  • 原文地址:https://www.cnblogs.com/kubll/p/10829323.html
Copyright © 2011-2022 走看看