• Unity3d工具方法小集


    1、获取垂直水平方向上的输入:

    float moveHorizontal = Input.GetAxis("Horizontal");
    float moveVertical = Input.GetAxis("Vertical");

    2、给刚体一个力:

    Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
    GetComponent<Rigidbody>().AddForce(movement * speed * Time.deltaTime);

    3、摄像头45度俯视角:

    Camera:

    Position:  x(0)   y(5)    z(-6)
    
    Rotate:    x(45)  y(0)    z(0)
    
    Scale:     x(1)   y(1)    z(1)

    4、摄像机跟随:

    public GameObject player;
    private Vector3 offset;
    
    // Use this for initialization
    void Start () {
        //摄像机与跟随物体的初始相对位置
        offset = transform.position - player.transform.position;
    }
    
    // Update is called once per frame
    void LateUpdate () {
        //跟随物体的位置加上相对位置
        transform.position = player.transform.position + offset;
    }

    5、物体自己旋转(固定时间,跟幀率无关):

    void Update () {
        transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime);
    }

    6、检测碰撞(且碰撞后对方消失):

    private void OnTriggerEnter(Collider other)
    {
        //这里的TAG为对方物体Tag
        if (other.gameObject.CompareTag(TAG))
        {
            //要让对方消失,对方物体要设置为碰撞触发器(即IsTrigger属性要为true)
            other.gameObject.SetActive(false);
        }
    }

    7、设置Button里的Text值

    GetComponentInChildren<Text>().text = "";

    8、移除刚体上的力:

    GetComponent<Rigidbody>().velocity = Vector3.zero;
    GetComponent<Rigidbody>().angularVelocity = Vector3.zero;

    9、背景滾动:

    using UnityEngine;
    
    public class BGScroller : MonoBehaviour {
    
        public float scrollSpeed;
        public float tileSizeZ;
    
        private Vector3 startPosition;
        
        void Start () {
            startPosition = transform.position;
        }
        
        void Update () {
            float newPosition = Mathf.Repeat(Time.time * scrollSpeed, tileSizeZ);
            transform.position = startPosition + Vector3.forward * newPosition;
        }
    }

    10、出边界后销毀:

    using UnityEngine;
    
    public class DestoryByBoundary : MonoBehaviour {
    
        void OnTriggerExit(Collider other)
        {
            Destroy(other.gameObject);
        }
    }

    11、把prefabs放入场景中:

    Instantiate(object, position, rotation);

    12、一定时间后销毁:

    using UnityEngine;
    
    public class DestoryByTime : MonoBehaviour {
    
        public float lifetime;
        
        void Start () {
            Destroy(gameObject, lifetime);
        }
    }

    13、游戏开始等待一定时间,过程中时间间隔,每一关时间间隔:

    void Start()
    {
        StartCoroutine (SpawnWaves());
    }
    
    IEnumerator SpawnWaves()
    {
        yield return new WaitForSeconds(startWait);
        while (true) {
            playerObject.GetComponent<PlayerController>().SetFireByLevel(level);
            for (int i = 0; i < hazardCount; i++)
            {
                GameObject hazard = hazards[Random.Range(0, hazards.Length)];
                Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x, spawnValues.x), spawnValues.y, spawnValues.z);
                Quaternion spawnRotation = Quaternion.identity;
                Instantiate(hazard, spawnPosition, spawnRotation);
                yield return new WaitForSeconds(spawnWait);
            }
            level++;
            yield return new WaitForSeconds(waveWait);
            if (gameOver)
            {
                restartButton.SetActive(true);
                restart = true;
                break;
            }
        }
    }

    14、加载场景:

    SceneManager.LoadScene("_Scenes/Main", LoadSceneMode.Single);

    15、物体倾斜:

    rb.rotation = Quaternion.Euler(0.0f, 0.0f, rb.velocity.x * -tilt);

    16、随机旋转:

    GetComponent<Rigidbody>().angularVelocity = Random.insideUnitSphere * tumble;

    tumble在5左右。

    17、开火触模板:

    using UnityEngine;
    using UnityEngine.EventSystems;
    
    public class SimpleTouchAreaButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
    {
        private bool touched;
        private int pointerID;
        private bool canFire;
    
        void Awake()
        {
            touched = false;
            canFire = false;
        }
    
        public void OnPointerDown(PointerEventData eventData)
        {
            if (!touched)
            {
                touched = true;
                pointerID = eventData.pointerId;
                canFire = true;
            }
        }
    
        public void OnPointerUp(PointerEventData eventData)
        {
            if (eventData.pointerId == pointerID)
            {
                canFire = false;
                touched = false;
            }
        }
    
        public bool CanFire()
        {
            return canFire;
        }
    }

    18、位置方向触模板:

    using UnityEngine;
    using UnityEngine.EventSystems;
    
    public class SimpleTouchPad : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler
    {
        public float smoothing;
    
        private Vector2 origin;
        private Vector2 direction;
        private Vector2 smoothDirection;
        private bool touched;
        private int pointerID;
    
        void Awake()
        {
            direction = Vector2.zero;
            touched = false;
        }
    
        public void OnPointerDown(PointerEventData eventData)
        {
            if (!touched)
            {
                touched = true;
                pointerID = eventData.pointerId;
                //set our start point
                origin = eventData.position;
            }
        }
    
        public void OnDrag(PointerEventData eventData)
        {
            if (eventData.pointerId == pointerID)
            {
                //compare the difference between our start point and current pointer pos
                Vector2 currentPosition = eventData.position;
                Vector2 directionRaw = currentPosition - origin;
                direction = directionRaw.normalized;
            }
        }
    
        public void OnPointerUp(PointerEventData eventData)
        {
            if (eventData.pointerId == pointerID)
            {
                //reset everything
                direction = Vector2.zero;
                touched = false;
            }
        }
    
        public Vector2 GetDirection()
        {
            smoothDirection = Vector2.MoveTowards(smoothDirection, direction, smoothing);
            return smoothDirection;
        }
    }

    19、延迟重复执行:

    InvokeRepeating("Fire", delay, fireRate);

    20、向目标靠近:

    using System.Collections;
    using UnityEngine;
    
    public class EvasiveManeuver : MonoBehaviour {
    
        public float dodge;
        public float smoothing;
        public float tilt;
        public Vector2 startWait;
        public Vector2 maneuverTime;
        public Vector2 maneuverWait;
        public Boundary boundary;
    
        private Transform playTransform;
    
        private float currentSpeed;
        private float targetManeuver;
        private Rigidbody rb;
    
        void Start () {
            rb = GetComponent<Rigidbody>();
            GameObject playerObject = GameObject.FindGameObjectWithTag("Player");
            if (playerObject != null) {
                playTransform = playerObject.transform;
            }
            currentSpeed = rb.velocity.z;
            StartCoroutine(Evade());
        }
    
        IEnumerator Evade()
        {
            yield return new WaitForSeconds(Random.Range(startWait.x, startWait.y));
            while(true)
            {
                targetManeuver = Random.Range(1, dodge) * -Mathf.Sign(transform.position.x);
                if (playTransform != null)
                {
                    targetManeuver = playTransform.position.x;
                }
                yield return new WaitForSeconds(Random.Range(maneuverTime.x, maneuverTime.y));
                targetManeuver = 0;
                yield return new WaitForSeconds(Random.Range(maneuverWait.x, maneuverWait.y));
            }
        }
        
        void FixedUpdate () {
            float newManeuver = Mathf.MoveTowards(rb.velocity.x, targetManeuver, Time.deltaTime * smoothing);
            rb.velocity = new Vector3(newManeuver, 0.0f, currentSpeed);
            rb.position = new Vector3(
                Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax),
                0.0f,
                Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)
            );
            rb.rotation = Quaternion.Euler(0.0f, 0.0f, rb.velocity.x * tilt);
        }
    }

    21、给按钮绑定事件:

  • 相关阅读:
    frida hook native -- frida hook so层 实例代码讲解
    frida hook 类所有方法(ZenTracker)
    frida hook AES DES RSA 自吐算法
    frida java层和c层打印堆栈 (修复优化)
    frida延时hook的3种方法
    [去广告]x米万能遥控 去掉底部banner广告
    Linux使用C语言连接MYSQL
    Linux一对一通信(UDP)
    Linux一对多的通信
    Linux一对一的通信
  • 原文地址:https://www.cnblogs.com/lurenjiashuo/p/unity3d-tools.html
Copyright © 2020-2023  润新知