纳金网

标题: Unity3D RTS Camera [打印本页]

作者: 晃晃    时间: 2011-11-16 17:26
标题: Unity3D RTS Camera



            
           

            
           

            var cameraMoveSpeed: float;     // скорость передвижения камеры
           

            var cameraRotateSpeed: float;   // скорость поворота камеры
           

            var cameraScrollSpeed: float;   // скорость перемещения камеры
           

            
           

            var minYPos: float;
           

            var maxYPos: float;           // минимальная и максимальная высота камеры над землей
           

            
           

            private var newPos: Vector3;            // новая позиция камеры
           

            private var yRot:   float = 0;      // поворот по оси y
           

            
           

            function LateUpdate () {
           

                    if (!(Input.GetButton("Turn Camera"))) {  // зажата ли клавиша перемещения
           

                            //код перемещения
           

                            newPos = Vector3.zero;
           

                  
           

                  
           

                            // проверим, подвел ли юзер курсор мыши к краю экрана
           

                            if (Input.mousePosition.x <= 5) {
           

                                    newPos = Vector3(transform.position.x - 20, 0, 0);
           

                                    transform.Translate(newPos * cameraMoveSpeed);
           

                            }
           

                  
           

                            if (Input.mousePosition.y <= 5) {
           

                                    newPos = Vector3(0, 0, transform.position.z - 3);
           

                                    transform.Translate(-newPos * cameraMoveSpeed);
           

                            }
           

                  
           

                            if (Input.mousePosition.x >= (Screen.width - 5) ) {
           

                                    newPos = Vector3(transform.position.x + 20, 0, 0);
           

                                    transform.Translate(newPos * cameraMoveSpeed);
           

                            }
           

                  
           

                            if (Input.mousePosition.y >= (Screen.height - 5)) {
           

                                    newPos = Vector3(0, 0, transform.position.z + 3);
           

                                    transform.Translate(newPos * cameraMoveSpeed);
           

                            }
           

                    }
           

                  
           

                else {
           

               
           

                    yRot -= Input.GetAxis("Mouse X") * cameraRotateSpeed * -0.02;
           

                                   
           

                    var rotation = Quaternion.Euler(0, yRot, 0);
           

                  
           

                    transform.rotation = rotation;
           

                }
           

               
           

                var mouseWheel: float = Input.GetAxis("Mouse ScrollWheel");  
           

                    // проверим нижнюю точку под камерой
           

                    var hit : RaycastHit;
           

                    var distanceToGround: float;
           

                     
           

                            if (Physics.Raycast (transform.position, -Vector3.up, hit,      transform.position.y * 2)) { // посылаем рэйкаст вниз
           

                            distanceToGround = hit.distance;
           

                        }
           

                  
           

                    var currentHeight: float;
           

                    currentHeight = transform.position.y;
           

                  
           

                    var minY = minYPos + (currentHeight - distanceToGround);   //исходя из данных RaycastHit, рассчитывает минимальную высоту камеры
           

                  
           

                    // изменить высоту камеры основываясь на заданной скорости
           

                    currentHeight -= mouseWheel * cameraScrollSpeed * Time.deltaTime;
           

                  
           

                    // проверим позицию на переход допустимых значений
           

                    if (currentHeight < minY)
           

                            currentHeight = minY;
           

                    if (currentHeight > maxYPos)  
           

                            currentHeight = maxYPos;
           

                           
           

                    transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
           

                  
           

            }
           


作者: C.R.CAN    时间: 2012-3-3 23:19
此地無銀。。。

作者: C.R.CAN    时间: 2012-4-3 23:29
很有心,部分已收录自用,谢谢

作者: 奇    时间: 2012-4-10 23:29
这么后现代

作者: tc    时间: 2012-5-14 23:18
真是不错啊

作者: 晃晃    时间: 2012-5-30 23:26
好`我顶``顶顶

作者: 奇    时间: 2012-6-20 23:20
我是老实人,我来也!

作者: C.R.CAN    时间: 2012-6-27 23:26
不错哦,谢谢楼主

作者: 晃晃    时间: 2012-7-14 23:27
佩服,好多阿 ,哈哈

作者: 奇    时间: 2012-8-11 00:08
都闪开,介个帖子,偶来顶

作者: C.R.CAN    时间: 2012-9-4 23:25
都闪开,介个帖子,偶来顶

作者: 晃晃    时间: 2013-2-5 23:20
顶!学习了!阅!





欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5