zoukankan      html  css  js  c++  java
  • Unity 屏幕外死亡的敌人的分数显示在屏幕内

    在敌人死亡后,会出现分数,如果敌人死亡的位置在屏幕内,那么使得获得的分数显示在屏幕内,超出屏幕范围的,显示在屏幕外

    当然,这里例子是使得场景中的物体显示在屏幕内,当然也可以使用纯粹的UGUI物体的显示,但是换算方式上刚好相反。

    有如下脚本,脚本挂在分数物体上

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Test01 : MonoBehaviour
    {
        Transform cam;//相机物体
        Vector3 pos;
        // Start is called before the first frame update
        void Start()
        {
            pos = transform.position;
            cam = GameObject.FindWithTag("MainCamera").transform;
        }
    
        // Update is called once per frame
        void Update()
        {
            Vector3 offset = pos - cam.position;//相对相机的偏移位置
            Vector3 camSize = new Vector3(1.51f*(1920f/1080f)-0.2f, 1.51f-0.2f,0);//相机的宽度和高度的一半尺寸,这里假设相机的高度一半为1.51
            camSize = camSize - new Vector3(0.2f, 0.2f, 0);//在坐标在屏幕外时,让自己在屏幕内离边缘一段距离0.2
            //判断是在屏幕内还是屏幕外
            bool isInCam = (Mathf.Abs(offset.x) < camSize.x) && (Mathf.Abs(offset.y) < camSize.y);
            //如果是在屏幕内,那么坐标位置等于自己的坐标位置
            //如果是在屏幕外,那么坐标位置在屏幕边缘
            if (isInCam) {
                transform.position = pos;
            }
            else {
                float x=pos.x;
                if (Mathf.Abs(offset.x) > camSize.x) x = Mathf.Sign(offset.x) * camSize.x + cam.position.x;
                //x = x + -Mathf.Sign(offset.x) * 0.2f;
    
                float y = pos.y;
                if (Mathf.Abs(offset.y) > camSize.y) y = Mathf.Sign(offset.y) * camSize.y + cam.position.y;
                //y = y + -Mathf.Sign(offset.y) * 0.2f;
    
                transform.position =new Vector3(x, y, 0);
            }
        }
    
        //判断是在屏幕内还是屏幕外
        //如果是在屏幕内,那么坐标位置等于自己的坐标位置
        //如果是在屏幕外,那么坐标位置在屏幕边缘
    
        private void OnDrawGizmos()
        {
            //Gizmos.color = Color.red;
            //float x = 1920f / 1080f;
            //Gizmos.DrawCube(transform.position, new Vector3(1.51f * (1920f / 1080f), 1.51f, 0) * 2);
        }
    }
  • 相关阅读:
    +7白盒测试与黑盒测试的定义与区别
    对于逆序数组,,选择排序 和 插入排序 那个更快?
    +1.1向量 链表 数组
    3.2 二十三种设计模式全解析
    3.1软件体系结构风格
    Mysql: 强制走索引:mysql between 日期索引 索引问题-日期索引使用
    php: xampp安装对应的phalcon版本(3.2.2-php5.6):比如redis-php5.6, php_igbinary-5.6
    京东自营,你TM太坑了。
    php:微信公众平台上传多媒体接口 41005错误
    php:如何使用PHP排序, key为字母+数字的数组(多维数组)
  • 原文地址:https://www.cnblogs.com/xiaoahui/p/10464453.html
Copyright © 2011-2022 走看看