unity对象的简单平移与旋转

物体旋转问题,比如说自转,绕转,点击一物体,让其它物体绕该物体转,还有始终面向鼠标或者是player朝向等等,实际上都是一些简单的Rotate\RotateAround\LookAt等的属性,实现起来很简单,只需要获取场景里的物体,设置相对应的属性就可以。

1.场景中物体获取方法:

[C#] 纯文本查看 复制代码

1

2

cube = GameObject.FindGameObjectWithTag(Tags.Cube).transform;

                cube1 = GameObject.FindGameObjectWithTag(Tags.Cube1).transform;

                cube2 = GameObject.FindGameObjectWithTag(Tags.Cube2).transform;

2.控制移动:

[C#] 纯文本查看 复制代码

1

2

3

//控制移动

                float h = Input.GetAxis ("Horizontal");

                float v = Input.GetAxis ("Vertical");

                GetComponent<Rigidbody> ().MovePosition (transform.position - new Vector3 (h, 0, v) * speed * Time.deltaTime);

3.始终朝向鼠标方向的实现:

[C#] 纯文本查看 复制代码

1

2

3

4

5

6

7

Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);

                //控制转向,朝向鼠标

                RaycastHit hitInfo;

                if (Physics.Raycast(ray, out hitInfo, 200, groundLayerIndex)) {

                                Vector3 target = hitInfo.point;

                                target.y = transform.position.y;

                                transform.LookAt(target);

                }

平移是通过改变position的方法来实现的,通过设定值与deltaTime的乘积来控制速度,简单实用

自转是Rotate,绕转是RotateAround,通过光线投放碰撞检测出被作为中心的物体,如果数量比较大可以用数组等等的方式来实现

4.点击某物体,其它物体围绕其转

[C#] 纯文本查看 复制代码

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

//鼠标左键点击围绕旋转

                RaycastHit hit; 

                if (Input.GetMouseButton (0)) {

                        //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

                        //RaycastHit hit; 

                        if (Physics.Raycast (ray, out hit)) {

                                Debug.Log (hit.collider.name);

                                //print("hello !");

                                //cube旋转

                                if (hit.collider.name == "Cube") {

                                                cube.Rotate (0, 1, 0);

                                                cube1.RotateAround (cube.position, new Vector3 (0, 5, 0), 60 * Time.deltaTime);

                                                cube2.RotateAround (cube.position, new Vector3 (0, 5, 0), 60 * Time.deltaTime);

                                }

                                if (hit.collider.name == "Cube1") {

                                                cube1.Rotate (0, 1, 0);

                                                cube.RotateAround (cube1.position, new Vector3 (0, 5, 0), 60 * Time.deltaTime);

                                                cube2.RotateAround (cube1.position, new Vector3 (0, 5, 0), 60 * Time.deltaTime);

                                }

                                if (hit.collider.name == "Cube2") {

                                                cube2.Rotate (0, 1, 0);

                                                cube1.RotateAround (cube2.position, new Vector3 (0, 5, 0), 60 * Time.deltaTime);

                                                cube.RotateAround (cube2.position, new Vector3 (0, 5, 0), 60 * Time.deltaTime);

                                }

                        

                }

这几行是用来实现物体始终朝向鼠标方向的代码,像是合金弹头里角色的枪始终朝向鼠标类似。

总结:

移动旋转等的原理其实很简单,还有一个addforce的方法,像是模拟子弹应该就是这种方法,但是模拟导弹轨迹这类应该都是setPosition,在实际的操作中可以根据需求来具体实现所需的逻辑结构。

时间: 2024-11-26 03:30:06

unity对象的简单平移与旋转的相关文章

【转载】Unity中矩阵的平移、旋转、缩放

By:克森 简介 在这篇文章中,我们将会学到几个概念:平移矩阵.旋转矩阵.缩放矩阵.在学这几个基本概念的同时,我们会用到 Mesh(网格).数学运算.4x4矩阵的一些简单的操作.但由于克森也是新手,文章的严谨性可能不是很高,还请大神们多多指教. 创建项目 首先创建一个Unity工程,克森把他命名为“Matrix of China”(中国的矩阵),基本配置如下图所示: 为了便于查找,让我们在 Assets 目录下新建三个文件夹,分别命名为“Scripts”.“Shader”.“Materials”

OpenGL绘制简单场景,实现旋转缩放平移和灯光效果

本项目实现了用OpenGL绘制一个简单场景,包含正方体.球体和网格,实现了物体的旋转.缩放.平移和灯光效果.附有项目完整代码,有详细注释.适合初学者熟悉opengl使用. 开发情况 开发环境VS2012+OpenGL 开发平台 Intel core i5,Intel HD Graphics Family 本项目实现了绘制一个场景(包括立方体.球体.网格),对各物体实现平移.旋转.缩放功能,添加了光源并简单设置了物体材质. 本项目示例代码下载(里面有详细注释) 感谢nehe的框架! 场景介绍 初始

Opencv图像识别从零到精通(7)----图像平移、旋转、镜像

根据vc6.0c++的学习经验,如果可以很好的自己编程,让图像进行平移旋转这些操作,那么就好像能够清楚的看见图像的内部结构当然这里你怎么访问像素,这个可以自己选一种适合的,最多的是ptr指针,at也是挺多的.看着很简单的变换,可以对图像处理上手的更快,当然对于旋转可能就稍微i难了一点,不过opencv提供了resize(0,remap()等这样的函数,可以方便的让我们进行学习-特别是旋转的时候,有很多的变换,你可以任意旋转一个角度,也可能一直旋转,当然还可以保持图像大小不变的旋转和大小变换的旋转

opencv 图像变换原理详解 图像平移 图像旋转 图像缩放

常见的2D图像变换从原理上讲主要包括基于2×3矩阵的仿射变换和基于3×3矩阵透视变换. 仿射变换 原理 基本的图像变换就是二维坐标的变换:从一种二维坐标(x,y)到另一种二维坐标(u,v)的线性变换: 如果写成矩阵的形式,就是: 作如下定义: 矩阵T(2×3)就称为仿射变换的变换矩阵,R为线性变换矩阵,t为平移矩阵,简单来说,仿射变换就是线性变换+平移.变换后直线依然是直线,平行线依然是平行线,直线间的相对位置关系不变,因此非共线的三个对应点便可确定唯一的一个仿射变换,线性变换4个自由度+平移2

session 对象的简单实例

一个session对象的简单实例: 1.登录界面:使用简单的html表单提交界面. <%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "ht

css的after伪对象选择器简单介绍

css的after伪对象选择器简单介绍:本章节将会介绍一下after伪对象选择器的用法,希望能够给需要的朋友带来一定的帮助.此选择器前面要加两个点:或者四个点::,两个点的时候是css2中的写法,在css3中规定是四个点,这是为了和伪类选择器进行区别,当然当前两个点也是适用的.语法结构: E:after{ Rules } E::after{ Rules } 此选择器能够设置元素内部结尾的一些结构内容 通常和content属性一起使用,关于content可以参阅CSS的content属性一章节. 

Unity 对象池的使用

在游戏开发过程中,我们经常会遇到游戏发布后,测试时玩着玩着明显的感觉到有卡顿现象.出现这种现象的有两个原因:一是游戏优化的不够好或者游戏逻辑本身设计的就有问题,二是手机硬件不行.好吧,对于作为程序员的我们只能从第一个原因着手了,那就开始对着Profiler看性能开销,接下来就开始做各种内存,特效,代码上的优化了.对于这种问题,有经验的开发者在一开始就会做一个规范的设计,就我们的项目而言,设计时包含了角色池,怪物池,特效池,经验池,伤害池......所谓的对象池就是尽可能的复用内存中已经驻留的资源

WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示

原文:WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示 为方便描述, 这里仅以正方形来做演示, 其他图形从略. 运行时效果图: XAML代码:// Transform.XAML <Canvas Width="700" Height="700" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://sc

Assignment 4 OpenGL中正十二面体追踪球实现(平移、旋转、多面体线框体切换)

一.使用平台    windows  8.1     visual  studio  2012    二.使用方法     鼠标左键控制旋转,鼠标右键控制平移,点击鼠标中键出现菜单可选多面体 或线框体绘制.     键盘↑↓←→控制平移,F1 和 F2 键分别为多面体和线框体绘制的切换.  三.实现简述     主函数  在 main 函数中与这次实验相关的主要有以下几个函数:  glutReshapeFunc(myReshape);  //窗口改变时重新设